【问题标题】:Distance calculation in hierarchical clustering "complete" linkage层次聚类“完整”联动中的距离计算
【发布时间】: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) 没有帮助。

请解释一下。

【问题讨论】:

标签: python scipy hierarchical-clustering


【解决方案1】:

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

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

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

【讨论】:

  • 我们也鼓励您接受您自己的答案(如这里),因为这也可能对其他用户有所帮助!谢谢!
猜你喜欢
  • 2015-09-14
  • 2014-10-24
  • 2016-08-02
  • 2016-08-21
  • 1970-01-01
  • 2013-08-31
  • 2012-07-09
  • 2012-09-05
  • 2021-07-21
相关资源
最近更新 更多