1

나는 scikit learn의 'Spectral clustering'기능을 사용하고 있습니다. 8100 x 8100 행렬에 대해 클러스터링을 수행 할 수 있지만이 함수는 10000 행렬에 대해 10000 오류를 발생시킵니다.Scikit learn의 스펙트럼 클러스터링이 처리 할 수있는 매트릭스의 크기는 얼마입니까?

대형 매트릭스에이 기능을 사용한 사람이 있습니까?

편집 :

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 기가 바이트 램을 가지고있다 : 나는 다음과 같은 오류 메시지를 받았습니다.

+0

분명히 그것은 당신의 기억에 달려 있습니다. 100x100은 작기 때문에 크기가 문제가되지 않습니다. 실제 오류 란 무엇입니까? –

+0

죄송합니다. 잘못된 치수를 제공했습니다. 기능은 90 * 90 x 90 * 90, 즉 8100 x 8100으로 작동합니다. – user3515225

+0

8100x8100 매트릭스의 메모리 요구 사항을 배정합니다 (배정도 (8 바이트) 및 매트릭스의 사본 2 개). –

답변

0

분광 클러스터링 알고리즘은 ~ 0.8GB 데이터 세트 (10000x10000 어레이, 64 비트 부동 소수점을 가정)를 처리하기 위해 16GB RAM이있는 메모리가 부족하기 때문에 ~ O (n³) 시간 복잡도와 상당히 복잡한 공간 복잡성을 갖습니다. 따라서 대규모 데이터 세트에는 적합하지 않습니다.

대신 클러스터링 알고리즘을 사용하여 더 잘 확장해야합니다. HDBSCAN documentation에서 가져온 벤치 마크를 참조하십시오. clustering scaling

예를 들어 MiniBatchKMeans, scikit-learn의 DBSCAN 또는 HDBSCAN의 확장 성이 좋습니다.

+0

이 방법은 친화도 행렬을 찾아야합니까? 아니면 그대로 데이터를 직접 제공해야합니까? – user3515225

+0

원시 데이터에서 직접 작업합니다. – rth