通过 scipy 给定相似矩阵的树状图
Dendrogram through scipy given a similarity matrix
我用 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()
如果您 运行 这段代码,您将看到一个完全反向的树状图。无论我使用哪种链接类型,它都会生成相同的树状图。这在直觉上是不正确的!
这是解决方案。事实证明,SimMatrix 需要首先转换为压缩矩阵(该矩阵的对角线、右上角或左下角)。
您可以在下面的代码中看到这一点:
import scipy.spatial.distance as ssd
distVec = ssd.squareform(SimMatrix)
linkage = hcluster.linkage(1 - distVec)
dendro = hcluster.dendrogram(linkage)
show()
我用 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()
如果您 运行 这段代码,您将看到一个完全反向的树状图。无论我使用哪种链接类型,它都会生成相同的树状图。这在直觉上是不正确的!
这是解决方案。事实证明,SimMatrix 需要首先转换为压缩矩阵(该矩阵的对角线、右上角或左下角)。 您可以在下面的代码中看到这一点:
import scipy.spatial.distance as ssd
distVec = ssd.squareform(SimMatrix)
linkage = hcluster.linkage(1 - distVec)
dendro = hcluster.dendrogram(linkage)
show()