Какой размер матрицы может обрабатывать функция Spectral clustering of Scikit Learn?

Я использую функцию «Спектральная кластеризация» обучения scikit. Я могу выполнить кластеризацию для матрицы 8100 на 8100, но эта функция выдает ошибку для матрицы 10000 на 10000.

Кто-нибудь использовал эту функцию для большой матрицы?

изменить: я получил следующее сообщение об ошибке:

    Not enough memory to perform factorization.
    Traceback (most recent call last):
    File "combined_code_img.py", line 287, in <module>
    labels=spectral.fit_predict(Affinity)
    File "/root/anaconda/lib/python2.7/site-packages/sklearn/base.py",        
    line 410, in fit_predict
    self.fit(X)
    File "/root/anaconda/lib/python2.7/site-packages/sklearn/cluster/spectral.py", line 463, in fit
    assign_labels=self.assign_labels)
    File "/root/anaconda/lib/python2.7/site-packages/sklearn/cluster/spectral.py", line 258, in spectral_clustering
    eigen_tol=eigen_tol, drop_first=False)
    File "/root/anaconda/lib/python2.7/site-packages/sklearn/manifold/spectral_embedding_.py", line 265, in spectral_embedding
tol=eigen_tol, v0=v0)
    File "/root/anaconda/lib/python2.7/site-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1560, in eigsh
symmetric=True, tol=tol)
    File "/root/anaconda/lib/python2.7/site-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1046, in get_OPinv_matvec
    return SpLuInv(A.tocsc()).matvec
    File "/root/anaconda/lib/python2.7/site-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 907, in __init__
    self.M_lu = splu(M)
    File "/root/anaconda/lib/python2.7/site-packages/scipy/sparse/linalg/dsolve/linsolve.py", line 261, in splu
ilu=False, options=_options)
    MemoryError

Моя машина имеет 16 ГБ оперативной памяти.


person Gunjan naik    schedule 02.01.2017    source источник
comment
Очевидно, это зависит от вашей памяти. 100x100 крошечный, поэтому размер не должен быть проблемой. В чем собственно ошибка?   -  person Has QUIT--Anony-Mousse    schedule 02.01.2017
comment
Извините, я указал неправильные размеры. Функция работает для 90*90 на 90*90 т.е. 8100 на 8100.   -  person Gunjan naik    schedule 03.01.2017
comment
Попробуйте вычислить требования к памяти для матрицы 8100x8100 с двойной точностью (8 байт) и двумя копиями матрицы.   -  person Has QUIT--Anony-Mousse    schedule 04.01.2017


Ответы (1)


Алгоритм спектральной кластеризации имеет ~ O (n³) временную сложность и довольно плохую пространственную сложность, поскольку вам не хватает памяти с 16 ГБ ОЗУ для обработки набора данных ~ 0,8 ГБ (массив 10000x10000, предполагая 64-битные числа с плавающей запятой). Поэтому он не подходит для больших наборов данных.

Вместо этого вы должны использовать алгоритм кластеризации, который лучше масштабируется. См. приведенные ниже тесты, взятые из документации HDBSCAN, масштабирование кластеризации

Например, MiniBatchKMeans, DBSCAN от scikit-learn или HDBSCAN лучше масштабируются.

person rth    schedule 07.01.2017
comment
Должен ли этот метод найти матрицу сродства? Или мы должны предоставить данные напрямую? - person Gunjan naik; 09.01.2017