相关疑难解决方法(0)

在scipy中修剪树状图(层次聚类)

我有一个约5000个条目的距离矩阵,并使用scipy的层次聚类方法来聚类矩阵.我用于此的代码是以下代码段:

Y = fastcluster.linkage(D, method='centroid') # D-distance matrix
Z1 = sch.dendrogram(Y,truncate_mode='level', p=7,show_contracted=True)
Run Code Online (Sandbox Code Playgroud)

由于树形图将变得相当密集所有这些数据,我使用truncate_mode来修剪它.所有这些都有效,但我想知道如何找出原始5000个条目中哪个属于树形图中的特定分支.

我试过用

 leaves = sch.leaves_list(Y)
Run Code Online (Sandbox Code Playgroud)

获取叶子列表,但是这使用了连接输出作为indata,虽然我可以看到修剪的树形图和叶子列表之间的对应关系,但是手动将原始条目映射到树状图会变得有点麻烦.

总结一下:有没有办法列出属于修剪树形图中分支的距离矩阵中的所有原始条目?或者还有其他方法可以做到这一点,我不知道.

谢谢

python hierarchical-clustering

13
推荐指数
1
解决办法
2652
查看次数

关于树状图的一些问题 - 蟒蛇(Scipy)

我是scipy的新手,但我设法得到了预期的树形图.我还有一些问题;

  1. 在树形图中,某些点之间的距离是0由于图像边界而不可见.如何移除边框并将y轴的下限设为-1,以便清晰可见.例如,这些点之间的距离是0(13,17),(2,10),(4,8,19)
  2. 如何修剪/截断特定距离.例如,修剪0.4
  3. 如何将这些集群(修剪后)写入文件

我的python代码:

import scipy
import pylab
import scipy.cluster.hierarchy as sch
import numpy as np

D = np.genfromtxt('LtoR.txt', dtype=None)
def llf(id):
    return str(id)
fig = pylab.figure(figsize=(10,10))
Y = sch.linkage(D, method='single')
Z1 = sch.dendrogram(Y,leaf_label_func=llf,leaf_rotation=90)
fig.show()
fig.savefig('dendrogram.png')
Run Code Online (Sandbox Code Playgroud)

树状图: 在此输入图像描述

谢谢.

python cluster-analysis dendrogram scipy

5
推荐指数
1
解决办法
2318
查看次数