Python scipy(层次聚类)中的修剪树状图
我有一个约5000个条目的距离矩阵,并使用scipy的分层聚类方法对矩阵进行聚类。我用于此目的的代码如下所示:Python scipy(层次聚类)中的修剪树状图,python,hierarchical-clustering,Python,Hierarchical Clustering,我有一个约5000个条目的距离矩阵,并使用scipy的分层聚类方法对矩阵进行聚类。我用于此目的的代码如下所示: Y = fastcluster.linkage(D, method='centroid') # D-distance matrix Z1 = sch.dendrogram(Y,truncate_mode='level', p=7,show_contracted=True) 由于所有这些数据将使树状图变得相当密集,因此我使用truncate_模式对其进行了一些修剪。所有这些都是可行的,
Y = fastcluster.linkage(D, method='centroid') # D-distance matrix
Z1 = sch.dendrogram(Y,truncate_mode='level', p=7,show_contracted=True)
由于所有这些数据将使树状图变得相当密集,因此我使用truncate_模式对其进行了一些修剪。所有这些都是可行的,但我想知道如何才能找出原始5000个条目中的哪一个属于树状图中的某个特定分支
我试着用
leaves = sch.leaves_list(Y)
获取一个叶子列表,但这使用链接输出作为indata,虽然我可以看到修剪后的树状图和叶子列表之间的对应关系,但是手动将原始条目映射到树状图会变得有点麻烦
总结:有没有一种方法可以列出距离矩阵中属于修剪树状图中分支的所有原始条目?或者还有其他我不知道的方法吗
谢谢scipy.cluster.hierarchy.dendrogram返回的字典数据结构之一具有键
ivl
,描述如下:
与叶节点对应的标签列表
您可以提供自定义标签(使用
标签=
)作为树状图函数的输入,但默认情况下,它们只是原始观测的索引。通过比较原始标签/索引和Z1['ivl']
,您可以确定原始条目是什么。也许我不明白,但您不能保留一份剪枝前的副本吗?我明白您的意思。这可能会起作用,但仍然需要手动映射条目,因为修剪后的输出是一个包含每个分支中成员数的dict,而修剪前的输出是一个包含每个条目的dict,每个条目都显示在树状图中。然后,我们必须将这两者映射到一起。那么Z1['ivl']呢。根据文档,这是“与叶节点对应的标签列表”。您可以提供自定义标签作为树状图函数的输入,但默认情况下,它们只是原始观测的索引谢谢大家。最后,我使用Z1['ivl']方法,并在修剪前后比较了这两个词典,使其工作起来。