【问题标题】:How do I plug distance data into scipy's agglomerative clustering methods?如何将距离数据插入 scipy 的凝聚聚类方法?
【发布时间】:2015-08-05 18:18:22
【问题描述】:
所以,我想对一组文本进行聚类分析。我在每个文本之间都使用了Normalized Compression Distance,现在我基本上已经构建了一个带有加权边的完整图形,看起来像这样:
text1, text2, 0.539
text2, text3, 0.675
我很难找出将这些数据插入 scipy 层次聚类方法的最佳方法。我大概可以将距离数据转换成一个类似this page 的表格。如何格式化这些数据,以便可以轻松地将其插入到 scipy 的 HAC 代码中?
【问题讨论】:
标签:
numpy
machine-learning
scipy
hierarchical-clustering
【解决方案1】:
您将数据转换为类似于链接页面上的表格(冗余距离矩阵)的表格是正确的。根据文档,您应该能够将其直接传递给scipy.cluster.hierarchy.linkage 或相关函数,例如scipy.cluster.hierarchy.single 或scipy.cluster.hierarchy.complete。相关函数明确指定应如何计算集群之间的距离。 scipy.cluster.hierarchy.linkage 允许您指定所需的任何方法,但默认为单链接(即两个集群之间的距离是它们最近点之间的距离)。所有这些方法都将返回一个表示凝聚聚类的多维数组。然后,您可以使用 scipy.cluster.hierarchy 模块的其余部分对此集群执行各种操作,例如对其进行可视化或展平。
但是,有一个问题。在编写this question 时,您实际上不能使用冗余距离矩阵,尽管文档说您可以。基于github issue 仍然开放的事实,我认为这还没有解决。正如链接问题的答案中所指出的,您可以通过将完整的距离矩阵传递给 scipy.spatial.distance.squareform 函数来解决此问题,该函数会将其转换为实际接受的格式(包含上三角的平面数组距离矩阵的一部分,称为压缩距离矩阵)。然后,您可以将结果传递给scipy.cluster.hierarchy 函数之一。