簡體   English   中英

ValueError:超出最大允許尺寸,AgglomerativeClustering fit_predict

[英]ValueError: Maximum allowed dimension exceeded, AgglomerativeClustering fit_predict

我正在嘗試將分層聚類適合於100.000個對象的23維數據集。 如何解決跟隨誤差?

>>>ac = AgglomerativeClustering(n_clusters=2, affinity='euclidean', linkage='complete')
>>>k=hf.features_itter(hf.file)
>>>k


array([[49,  0,  3, ...,  0,  0,  3],
       [39,  1,  4, ...,  0,  0,  3],
       [25,  0,  3, ...,  0,  0,  1],
       ...,
       [21,  0,  6, ...,  0,  0,  1],
       [47,  0,  8, ...,  0,  0,  2],
       [28,  1,  2, ...,  0,  1,  3]], dtype=uint8)

>>>res = ac.fit_predict(k)

Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    hierarchical()
  File "C:\Users\Tolis\Downloads\WPy-3670\notebooks\ergasia\clustering.py", line 39, in hierarchical
    ac.fit_predict(k)
  File "C:\Users\Tolis\Downloads\WPy-3670\python-3.6.7\lib\site-packages\sklearn\base.py", line 355, in fit_predict
    self.fit(X)
  File "C:\Users\Tolis\Downloads\WPy-3670\python-3.6.7\lib\site-packages\sklearn\cluster\hierarchical.py", line 830, in fit
    **kwargs)
  File "C:\Users\Tolis\Downloads\WPy-3670\python-3.6.7\lib\site-packages\sklearn\externals\joblib\memory.py", line 329, in __call__
    return self.func(*args, **kwargs)
  File "C:\Users\Tolis\Downloads\WPy-3670\python-3.6.7\lib\site-packages\sklearn\cluster\hierarchical.py", line 584, in _complete_linkage
    return linkage_tree(*args, **kwargs)
  File "C:\Users\Tolis\Downloads\WPy-3670\python-3.6.7\lib\site-packages\sklearn\cluster\hierarchical.py", line 470, in linkage_tree
    out = hierarchy.linkage(X, method=linkage, metric=affinity)
  File "C:\Users\Tolis\Downloads\WPy-3670\python-3.6.7\lib\site-packages\scipy\cluster\hierarchy.py", line 708, in linkage
    y = distance.pdist(y, metric)
  File "C:\Users\Tolis\Downloads\WPy-3670\python-3.6.7\lib\site-packages\scipy\spatial\distance.py", line 1877, in pdist
    dm = np.empty((m * (m - 1)) // 2, dtype=np.double)
ValueError: Maximum allowed dimension exceeded

ValueError:超出最大允許尺寸

我猜-由於此算法的某些特性,因此無法使用聚集聚類解決此問題。 您可以在函數中測量所有對象對之間的距離

y = distance.pdist(y, metric)

AgglomerativeClustering內部調用。

因此, AgglomerativeClustering算法不適用於大型甚至中型數據集:

分層聚集聚類(HAC)的標准算法的時間復雜度為O(n ^ 3),並且需要O(n ^ 2)內存,這對於中等數據集來說也太慢了。

-因為速度很慢,而且內存為O(n^2) 即使算法以最佳方式使用RAM,成對距離的矩陣也會消耗〜1e10 1e10 * 4個字節(〜40Gb)的內存-因為每個float32值都會消耗4個字節,因此有10.000 * 10.000個此類度量。 可能沒有足夠的內存。

(我已經使用〜100Gb RAM測試了100.000個隨機點的成對距離,並且計算的時間很長-盡管沒有失敗)

而且,它將運行很長時間-因為它的時間復雜度為O(n^3)

我建議您嘗試sklearn.cluster.DBSCAN它對某些數據具有類似的行為( sklearn示例 ),而且,它以更快的方式運行並且消耗的內存更少:

DBSCAN-帶有噪聲的應用程序的基於密度的空間聚類。 查找高密度的核心樣本並從中擴展聚類。 適用於包含相似密度簇的數據。

內存消耗:

此實現批量計算所有鄰居查詢,這將內存復雜度提高到O(nd),其中d是鄰居的平均數量,而原始DBSCAN的內存復雜度為O(n)。 在查詢這些最近鄰域時,它可能會吸引更高的內存復雜度,具體取決於算法

時間復雜度:平均O(n log n) ,但取決於實現方式,最壞情況為O(n^2) -一種比O(n^3)更好的凝聚方式。

檢查此聚類算法,可能會給出不錯的結果。 主要問題是DBSCAN會自動定義集群數,因此您不能將其設置為2。

謝謝答案! 我必須使用分層聚類,因為這是研究的案例,所以我遵循鏈接中描述的解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM