我同意https://stackoverflow.com/users/1167475/mortonjt https://stackoverflow.com/users/1167475/mortonjt该文档没有完全解释中间集群的索引,虽然我确实同意https://stackoverflow.com/users/1354844/dkar https://stackoverflow.com/users/1354844/dkar格式另有明确解释。
使用此问题中的示例数据:scipy.cluster.hierarchy 教程 https://stackoverflow.com/questions/21638130/tutorial-for-scipy-cluster-hierarchy
A = np.array([[0.1, 2.5],
[1.5, .4 ],
[0.3, 1 ],
[1 , .8 ],
[0.5, 0 ],
[0 , 0.5],
[0.5, 0.5],
[2.7, 2 ],
[2.2, 3.1],
[3 , 2 ],
[3.2, 1.3]])
可以使用单个(即最接近的匹配点)构建链接矩阵:
z = hac.linkage(a, method="single")
array([[ 7. , 9. , 0.3 , 2. ],
[ 4. , 6. , 0.5 , 2. ],
[ 5. , 12. , 0.5 , 3. ],
[ 2. , 13. , 0.53851648, 4. ],
[ 3. , 14. , 0.58309519, 5. ],
[ 1. , 15. , 0.64031242, 6. ],
[ 10. , 11. , 0.72801099, 3. ],
[ 8. , 17. , 1.2083046 , 4. ],
[ 0. , 16. , 1.5132746 , 7. ],
[ 18. , 19. , 1.92353841, 11. ]])
正如文档所解释的,n 以下的簇(此处:11)只是原始矩阵 A 中的数据点。接下来的中间簇将连续索引。
因此,聚类 7 和 9(第一次合并)合并为聚类 11,聚类 4 和 6 合并为 12。然后观察第三行,合并聚类 5(来自 A)和 12(来自未显示的中间聚类 12),结果为簇内距离 (WCD) 为 0.5。单一方法要求新的 WCS 为 0.5,这是 A[5] 与聚类 12 中最近点 A[4] 和 A[6] 之间的距离。让我们检查:
In [198]: norm([a[5]-a[4]])
Out[198]: 0.70710678118654757
In [199]: norm([a[5]-a[6]])
Out[199]: 0.5
该簇现在应该是中间簇 13,随后与 A[2] 合并。因此,新距离应该是点 A[2] 和 A[4,5,6] 之间最近的距离。
In [200]: norm([a[2]-a[4]])
Out[200]: 1.019803902718557
In [201]: norm([a[2]-a[5]])
Out[201]: 0.58309518948452999
In [202]: norm([a[2]-a[6]])
Out[202]: 0.53851648071345048
可以看出,其中也检查并解释了新簇的中间格式。