给出相似矩阵的树状图通过scipy

时间:2015-03-12 23:48:13

标签: python scipy dendrogram hcluster

我用Python计算了一个jaccard相似度矩阵。我想将最高相似性聚类到最低,但是,无论我使用什么连接函数,它都会生成相同的树形图!我觉得该函数假设我的矩阵是原始数据,但我已经计算了第一个相似性矩阵。有没有办法将这个相似性矩阵传递给树形图,以便正确绘制?或者我将不得不输出矩阵并简单地用R来完成。传递原始原始数据是不可能的,因为我正在计算单词的相似性。谢谢你的帮助!

以下是一些代码:

SimMatrix = [[ 0.,0.09259259,  0.125     ,  0.        ,  0.08571429],
   [ 0.09259259,  0.        ,  0.05555556,  0.        ,  0.05128205],
   [ 0.125     ,  0.05555556,  0.        ,  0.03571429,  0.05882353],
   [ 0.        ,  0.        ,  0.03571429,  0.        ,  0.        ],
   [ 0.08571429,  0.05128205,  0.05882353,  0.        ,  0.        ]]

linkage = hcluster.complete(SimMatrix) #doesnt matter what linkage...
dendro  = hcluster.dendrogram(linkage) #same plot for all types?
show()

如果运行此代码,您将看到完全向后的树形图。无论我使用什么样的链接类型,它都会产生相同的树状图。这直觉上不正确!

1 个答案:

答案 0 :(得分:3)

这是解决方案。事实证明,需要首先将SimMatrix转换为浓缩矩阵(此矩阵的对角线,右上角或左下角)。 您可以在下面的代码中看到这一点:

import scipy.spatial.distance as ssd
distVec = ssd.squareform(SimMatrix)
linkage = hcluster.linkage(1 - distVec)
dendro  = hcluster.dendrogram(linkage)
show()