12

以下代码生成一个包含 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 个集群时,我看不到发生了什么。

如何在树状图上显示簇数?我对其他包裹持开放态度。谢谢。

4

1 回答 1

6

这是一个解决方案,可以适当地为集群着色并用适当的集群名称标记树状图的叶子(叶子被标记为:“点号,集群号”)。这些技术可以单独使用,也可以一起使用。我修改了您的原始示例以包含两者:

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()
于 2013-11-04T23:29:09.070 回答