【发布时间】:2015-01-07 23:21:03
【问题描述】:
我无法理解 SciPy 层次聚类如何计算树状图中原始点或聚类之间的距离。
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) 没有帮助。
请解释一下。
【问题讨论】:
-
在其他地方找到解决方案,在相关问题(搜索中没有出现)--stackoverflow.com/questions/18952587/…
标签: python scipy hierarchical-clustering