scipy.cluster.hierarchy.linkage 的返回值是什么意思?

Duo*_*hia 4 python hierarchical-clustering scipy

假设我们有 X 矩阵如下:

[[9 0]
[1 4]
[2 3]
[8 5]]
Run Code Online (Sandbox Code Playgroud)

然后,

from scipy.cluster.hierarchy import linkage
Z = linkage(X, method="ward")
print(Z)
Run Code Online (Sandbox Code Playgroud)

返回矩阵如下:

[[  1.           2.           1.41421356   2.        ]
 [  0.           3.           5.09901951   2.        ]
 [  4.           5.          10.           4.        ]]
Run Code Online (Sandbox Code Playgroud)

返回值的含义是什么?

and*_*rew 8

虽然这之前已经回答过,但这是一个“阅读文档”的答案。我认为解释一下文档很有用。

从文档中,我们读到:

返回一个 (n?1) x 4 矩阵 Z。在第 i 次迭代中,索引为 Z[i, 0] 和 Z[i, 1] 的簇被组合成簇 n + i。索引小于 n 的聚类对应于 n 个原始观测值之一。簇 Z[i, 0] 和 Z[i, 1] 之间的距离由 Z[i, 2] 给出。第四个值 Z[i, 3] 表示新形成的聚类中原始观察的数量。

我认为令人困惑的部分是前 n 个集群是单例(“原始观察”)。所以 Z 中的第一个值实际上是第 n+1 个簇。它是第一个组合两个单例的集群。

所以在你的例子中, Z[0] 是第 4+1 个集群。我们有

 Z[0] = [  1.           2.           1.41421356   2.        ]
Run Code Online (Sandbox Code Playgroud)

前两个值告诉我们哪些集群用于创建集群 Z[0]。它们是 cluster_1,单例 [1,4] 和 cluster_2,单例 [2, 3]。

第三个值为我们提供了集群之间的距离。我们可以验证 sqrt((2-1)^2 + (3-4)^2)) = 1.41...

第四个值告诉我们集群 Z[0] 中有多少单例。

所以看看你的最后一个集群 Z[2],我们看到它组合了 Z 中的前两个集群。每个集群都包含两个独特的单例,所以 Z[2,3] = 4。