我无法理解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)没有帮助。
请解释。
答案 0 :(得分:1)
这有助于 - Use Distance Matrix in scipy.cluster.hierarchy.linkage()?
import scipy.spatial.distance as ssd
distmatrix = ssd.squareform(distmatrix + distmatrix.T)
(不确定是否应删除问题,或保留为方便参考)