层次聚类中的距离计算"完成"连锁

时间:2014-11-11 11:59:28

标签: python scipy hierarchical-clustering

我无法理解SciPy Hierarchical Clustering如何计算树状图中原始点或簇之间的距离。

import scipy.cluster.hierarchy as hclus
import numpy
import cPickle

distmatrix = cPickle.load(open("mydistmatrix.pkl", "rb"))
print distmatrix

dendogram = hclus.linkage(distmatrix, method="complete")
numpy.savetxt("mydendogram.txt", dendogram, fmt='%.1f')

DistMatrix如下,正确打印。我还打印mydendogram.txt,这是我无法理解的。

距离矩阵 - 我已将i-作为行号附加,这不是矩阵的一部分。

0- [[ 0 11 68 60 60 60 61  7 17 73]
1- [11  0 68 52 52 51 55 17  6 73]
2- [68 68  0 90 90 91 94 73 73  6]
3- [60 52 90  0 10 11 36 62 55 92]
4- [60 52 90 10  0  2 36 63 55 92]
5- [60 51 91 11  2  0 36 63 54 93]
6- [61 55 94 36 36 36  0 63 57 96]
7- [ 7 17 73 62 63 63 63  0 11 68]
8- [17  6 73 55 55 54 57 11  0 68]
9- [73 73  6 92 92 93 96 68 68  0]]

树状图 - 为了便于阅读,我在步骤中添加了步骤编号i和新节点n + i,而不是树形图的一部分。

0 - 4.0 5.0 3.6 2.0 - 10
1 - 2.0 9.0 13.7 2.0 - 11
2 - 1.0 8.0 15.0 2.0 - 12
3 - 0.0 7.0 15.7 2.0 - 13
4 - 3.0 10.0 17.6 3.0 - 14
5 - 12.0 13.0 33.1 4.0 - 15
6 - 6.0 14.0 66.9 4.0 - 16
7 - 15.0 16.0 148.1 8.0 - 17
8 - 11.0 17.0 208.9 10.0 - 18

现在,我可以理解节点4和5将首先合并,因为它们之间的距离在距离矩阵中最小,但矩阵中的距离是2但在树形图中是3.6。类似地,节点2和9之间的距离是6,但是树状图显示13.7。即使距离矩阵中的最大数是96,最大距离也是208.9。看起来合并的顺序是正确的,但我不明白距离是如何计算的,这对我来说很重要。树获取集群。文档(http://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.linkage.html#scipy.cluster.hierarchy.linkage)没有帮助。

请解释。

1 个答案:

答案 0 :(得分:1)

这有助于 - Use Distance Matrix in scipy.cluster.hierarchy.linkage()?

import scipy.spatial.distance as ssd
distmatrix = ssd.squareform(distmatrix + distmatrix.T)

(不确定是否应删除问题,或保留为方便参考)