以下代码生成一个包含10个叶节点的简单分层聚类树形图:
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个簇时,我看不到发生了什么。
如何在树形图上显示簇数?我对其他包裹持开放态度。感谢。
答案 0 :(得分:4)
这是一个解决方案,可以适当地对聚类进行着色,并使用适当的聚类名称标记树形图的叶子(叶子标记为:'点号,簇号')。这些技术可以单独使用或一起使用。我修改了您的原始示例以包含两者:
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()