2017-09-03 237 views
0

我正在使用sklearn.cluster.AgglomerativeClustering。它以每個數據點一個簇開始,並將兩個「最接近」的簇重複合併在一起,從而形成一個二叉樹。什麼構成羣集之間的距離取決於一個連接參數。爲什麼不sklearn.cluster.AgglomerativeClustering給我們合併集羣之間的距離?

瞭解每個步驟中合併後的聚類之間的距離將是有用的。然後,當下一個被合併的集羣相距太遠時,我們可以停下來。唉,這似乎並沒有在AgglomerativeClustering

我錯過了什麼嗎?有沒有辦法恢復距離?

+1

您可以更具體地說明「距離」是什麼意思嗎?即您是指相應羣集的質心之間的距離還是不同的東西? – tttthomasssss

+0

我不想具體。它可以是您建議的質心之間的距離,也可以是單獨鏈中兩個點之間的最小距離,如單鏈接或最終的團簇直徑或方差增加。關鍵在於任何聚集聚類方法都會在每次迭代中合併兩個「最接近」的聚類。這種「親密度」度量可以用不同的方式計算,但在每次合併時具有確定的,增加的價值。瞭解這些值是有用的。 – Eduardo

回答

1

你可能想看看scipy.cluster.hierarchy,它提供了比sklearn.cluster.AgglomerativeClustering更多的選擇。

使用linkage函數完成聚類,該函數返回包含合併羣集之間距離的矩陣。這些可與樹狀被可視化:

from scipy.cluster.hierarchy import linkage, fcluster, dendrogram 
from sklearn.datasets import make_blobs 
import matplotlib.pyplot as plt 

X, cl = make_blobs(n_samples=20, n_features=2, centers=3, cluster_std=0.5, random_state=0) 
Z = linkage(X, method='ward') 

plt.figure() 
dendrogram(Z) 
plt.show() 

dendrogram.png

人們可以從聯動矩陣基於各種標準,例如形成平坦簇觀測的距離:

clusters = fcluster(Z, 5, criterion='distance') 

SciPy的的層次聚類在更多的細節here討論。

相關問題