scipy.cluster.hierarchy:标签的顺序似乎不正确,并且被垂直轴的值弄糊涂了

scipy.cluster.hierarchy: labels seems not in the right order, and confused by the value of the vertical axes

我知道scipy.cluster.hierarchy专注于处理距离矩阵。但是现在我有一个相似矩阵......在我使用树状图绘制它之后,一些奇怪的事情发生了。 这是代码:

similarityMatrix = np.array(([1,0.75,0.75,0,0,0,0],
                         [0.75,1,1,0.25,0,0,0],
                         [0.75,1,1,0.25,0,0,0],
                         [0,0.25,0.25,1,0.25,0.25,0],
                         [0,0,0,0.25,1,1,0.75],
                         [0,0,0,0.25,1,1,0.75],
                         [0,0,0,0,0.75,0.75,1]))

这里是联动方法

Z_sim = sch.linkage(similarityMatrix)
plt.figure(1)
plt.title('similarity')
sch.dendrogram(
    Z_sim,
    labels=['1','2','3','4','5','6','7']
)
plt.show()

但这是结果:

我的问题是:

  1. 为什么这个树状图的标签不正确?
  2. 我给出了链接方法的相似度矩阵,但我无法完全理解垂直轴的含义。比如最大相似度为1,为什么纵轴的最大值几乎是1.6?

非常感谢您的帮助!

  • linkage 期望 "distances",而不是 "similarities"。要将矩阵转换为距离矩阵之类的东西,可以从 1:

    中减去它
    dist = 1 - similarityMatrix
    
  • linkage 不接受平方距离矩阵。它期望距离数据在 "condensed" form 中。你可以使用 scipy.spatial.distance.squareform:

    from scipy.spatial.distance import squareform
    
    dist = 1 - similarityMatrix
    condensed_dist = squareform(dist)
    Z_sim = sch.linkage(condensed_dist)
    

    (当你将形状为 (m, n) 的二维数组传递给 linkage 时,它将行视为 n 维 space 中的点,并在内部计算距离。 )