scikit-Learn Использование памяти DBSCAN

ОБНОВЛЕНО: В конце концов, решение, которое я решил использовать для кластеризации своего большого набора данных, было предложено Anony-Mousse ниже. То есть, используя ELSCI DBSCAN для выполнения моей кластеризации, а не scikit-learn. Его можно запустить из командной строки и при правильной индексации выполняет эту задачу в течение нескольких часов. Используйте графический интерфейс пользователя и небольшие образцы данных, чтобы определить нужные параметры, а затем отправиться в город. Стоит посмотреть. В любом случае, читайте описание моей первоначальной проблемы и некоторые интересные обсуждения.

У меня есть набор данных с ~ 2,5 миллионами выборок, каждая с 35 объектами (значениями с плавающей запятой), которые я пытаюсь кластеризовать. Я пытался сделать это с помощью реализации ScSCit-Learn DBSCAN, используя манхэттенскую метрику расстояния и значение эпсилона, оцененное по некоторым небольшим случайным выборкам, взятым из данных. Все идет нормально. (вот фрагмент, для справки)

db = DBSCAN(eps=40, min_samples=10, metric='cityblock').fit(mydata)

Моя проблема на данный момент в том, что у меня легко заканчивается память. (Я сейчас работаю на машине с 16 ГБ ОЗУ)

Мой вопрос заключается в том, вычисляет ли DBSCAN матрицу парных расстояний на ходу, и это то, что поглощает мою память? (2,5 миллиона ^ 2) * 8 байт, очевидно, глупо велики, я бы это понял. Должен ли я не использоватьfit() метод? И вообще, есть ли способ обойти эту проблему, или я вообще лаю здесь не то дерево?

Извиняюсь, если ответ становится очевидным. Я ломал голову над этим в течение нескольких дней. Спасибо!

Приложение: Также, если кто-то может объяснить разницу междуfit(X) а такжеfit_predict(X) для меня более явно, я бы также оценил это - боюсь, я просто не совсем понимаю.

Приложение № 2: Конечно, я только что попробовал это на машине с ~ 550 ГБ ОЗУ, и она все еще взорвалась, поэтому я чувствую, что DBSCAN, вероятно, пытается создать матрицу парных расстояний или что-то, что мне явно не нужно сделать. Теперь я думаю, что главный вопрос в том, как остановить это поведение или найти другие методы, которые могут больше соответствовать моим потребностям. Спасибо за терпение со мной здесь.

Приложение № 3 (!): Я забыл прикрепить трассировку, вот она,

Traceback (most recent call last):
  File "tDBSCAN.py", line 34, in <module>
    db = DBSCAN(eps=float(sys.argv[2]), min_samples=10, metric='cityblock').fit(mydata)
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/base.py", line 329, in fit_predict
    self.fit(X)
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/cluster/dbscan_.py", line 186, in fit
    **self.get_params())
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/cluster/dbscan_.py", line 69, in dbscan
    D = pairwise_distances(X, metric=metric)
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/metrics/pairwise.py", line 651, in pairwise_distances
    return func(X, Y, **kwds)
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/metrics/pairwise.py", line 237, in manhattan_distances
    D = np.abs(X[:, np.newaxis, :] - Y[np.newaxis, :, :])
MemoryError

Ответы на вопрос(5)

Ваш ответ на вопрос