2013-11-04 46 views
10

下面的代碼生成具有10葉節點的簡單的分層聚類圖:匹配聚類在Python的scipy.cluster.hierarchy

import scipy 
import scipy.cluster.hierarchy as sch 
import matplotlib.pylab as plt 

X = scipy.randn(10,2) 
d = sch.distance.pdist(X) 
Z= sch.linkage(d,method='complete') 
P =sch.dendrogram(Z) 
plt.show() 

我生成像三個平坦簇這樣:

T = sch.fcluster(Z, 3, 'maxclust') 
# array([3, 1, 1, 2, 2, 2, 2, 2, 1, 2]) 

但是,我想在樹形圖上看到聚類標籤1,2,3。我只用10個葉節點和3個集羣可以很容易地看到,但是當我有1000個節點和10個集羣時,我看不到發生了什麼。

如何顯示樹狀圖上的簇號?我打開其他包。謝謝。

回答

3

這是一個解決方案,適當地爲羣集着色,並使用適當的羣集名稱標記樹形圖的葉子(葉子標記爲'點號,羣號')。這些技術可以獨立使用或一起使用。我修改了您的原始示例以包括兩個:

import scipy 
import scipy.cluster.hierarchy as sch 
import matplotlib.pylab as plt 

n=10 
k=3 
X = scipy.randn(n,2) 
d = sch.distance.pdist(X) 
Z= sch.linkage(d,method='complete') 
T = sch.fcluster(Z, k, 'maxclust') 

# calculate labels 
labels=list('' for i in range(n)) 
for i in range(n): 
    labels[i]=str(i)+ ',' + str(T[i]) 

# calculate color threshold 
ct=Z[-(k-1),2] 

#plot 
P =sch.dendrogram(Z,labels=labels,color_threshold=ct) 
plt.show() 
+0

謝謝,肖恩。但是,如何將顏色與羣集相匹配?我發佈的例子有10個數據點,但總的來說,我有1000點。 – user1910316