Проблемы при вычислении выпуклой оболочки большого набора данных с использованием qhull / SciPy - PullRequest
0 голосов
/ 29 мая 2018

Я начал экспериментировать, используя функцию scipy.spatial.ConvexHull, которая (если я правильно понял) является оберткой для библиотеки qhull C.Я использую SciPy 0.19.1 с Python3.

Сначала я работал с реальным набором данных, который имеет 700 точек в 21 измерении, и scipy.spatial.ConvexHull падает, с этой ошибкой: scipy.spatial.qhull.QhullError: QH6235 qhull error (qh_memalloc): negative request size (-2003053336). Did int overflow due to high-D?.

После нескольких попыток, используя следующий пример кода Python3:

import numpy as np
X = np.random.randn(40,21)
print("Computing convex hull of X (shape: " + str(X.shape) + ")...")
from scipy.spatial import ConvexHull
hull = ConvexHull(X)

Мне удалось сузить проблему до размерности.С 39 случайно сгенерированными точками в 21 измерении это работает.С 40 очками, иногда это дает сбой, иногда это удается.Я не уверен, но кажется, что есть ошибка выделения памяти?

  1. Есть ли способ избежать проблемы с памятью?700 пунктов слишком много для алгоритмов выпуклой оболочки?
  2. Просматривая результаты поиска в Google, я заметил, что есть некоторые алгоритмы для вычисления аппроксимации выпуклой оболочки.Вы рекомендуете их?Могут ли они работать в моей ситуации?Есть ли уже реализация Python для некоторых из них?
  3. Потенциально я хотел бы вычислить выпуклые оболочки многомерных пространств с точностью до 100 000 измерений.Это безумие, или оно может быть сделано разумным способом?
...