【问题标题】:Matching dendrogram with cluster number in Python's scipy.cluster.hierarchy在 Python 的 scipy.cluster.hierarchy 中将树状图与簇号匹配
【发布时间】:2023-04-01 14:05:02
【问题描述】:

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

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

【问题讨论】:

    标签: python-2.7 scipy hierarchical-clustering


    【解决方案1】:

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

    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()
    

    【讨论】:

    • 谢谢,肖恩。但是如何将颜色与集群匹配?我发布的示例有 10 个数据点,但一般来说,我会有 1000 个点。
    猜你喜欢
    • 2013-05-28
    • 2020-05-07
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2015-04-07
    • 2013-11-13
    • 1970-01-01
    相关资源
    最近更新 更多