使用发布的代码,我创建了一个很好的分层集群:
比如说左边的树木图是通过做
Y = sch.linkage(D, method='average') # D is a distance matrix
cutoff = 0.5*max(Y[:,2])
Z = sch.dendrogram(Y, orientation='right', color_threshold=cutoff)
现在,如何获得每个有色集群成员的索引?为了简化这种情况,忽略顶部的集群,只关注矩阵左侧的树形图。
此信息应存储在树形图的“存储变量”中。有一个函数应该按照我想要的方式来执行(请参见文档)。但是,我看不出哪里可以给fcluster提供与创建树形图中指定的相同的
Z
。似乎fcluster
、cutoff
中的阈值变量必须以各种模糊测量(fcluster
、t
、inconsistent
、distance
)为基础。有什么想法吗? 最佳答案
我觉得你走对了。让我们试试这个:
import scipy
import scipy.cluster.hierarchy as sch
X = scipy.randn(100, 2) # 100 2-dimensional observations
d = sch.distance.pdist(X) # vector of (100 choose 2) pairwise distances
L = sch.linkage(d, method='complete')
ind = sch.fcluster(L, 0.5*d.max(), 'distance')
ind
将为100个输入观测值中的每一个提供集群索引。ind
取决于您在method
中使用的内容。尝试linkage
、method=single
和complete
。然后注意average
的区别。例子:
In [59]: L = sch.linkage(d, method='complete')
In [60]: sch.fcluster(L, 0.5*d.max(), 'distance')
Out[60]:
array([5, 4, 2, 2, 5, 5, 1, 5, 5, 2, 5, 2, 5, 5, 1, 1, 5, 5, 4, 2, 5, 2, 5,
2, 5, 3, 5, 3, 5, 5, 5, 5, 5, 5, 5, 2, 2, 5, 5, 4, 1, 4, 5, 2, 1, 4,
2, 4, 2, 2, 5, 5, 5, 2, 5, 5, 3, 5, 5, 4, 5, 4, 5, 3, 5, 3, 5, 5, 5,
2, 3, 5, 5, 4, 5, 5, 2, 2, 5, 2, 2, 4, 1, 2, 1, 5, 2, 5, 5, 5, 1, 5,
4, 2, 4, 5, 2, 4, 4, 2])
In [61]: L = sch.linkage(d, method='single')
In [62]: sch.fcluster(L, 0.5*d.max(), 'distance')
Out[62]:
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1])
ind
Sure令人困惑。在你的链接中,我甚至不认识我自己的代码!关于python - 如何在scipy创建的树形图中获得与颜色簇相对应的平面聚类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7664826/