如何将距离数据插入到scipy的凝聚聚类方法中?

时间:2015-05-23 23:16:05

标签: numpy machine-learning scipy hierarchical-clustering

所以,我有一套文本,我想做一些聚类分析。我在每个文本之间都有一个Normalized Compression Distance,现在我基本上构建了一个带有加权边的完整图形,看起来像这样:

text1, text2, 0.539
text2, text3, 0.675

我很难找到将这些数据插入scipy层次聚类方法的最佳方法。我可以将距离数据转换为类似this page上的表格。如何格式化这些数据,以便可以轻松插入到scipy的HAC代码中?

1 个答案:

答案 0 :(得分:1)

您正在将数据转换为类似于链接页面上的表格(冗余距离矩阵)的正确轨道。根据文档,您应该可以将其直接传递到scipy.cluster.hierarchy.linkage或相关功能,例如scipy.cluster.hierarchy.singlescipy.cluster.hierarchy.complete。相关函数明确指定应如何计算簇之间的距离。 scipy.cluster.hierarchy.linkage允许您指定所需的任何方法,但默认为单链接(即两个群集之间的距离是其最近点之间的距离)。所有这些方法都将返回表示凝聚聚类的多维数组。然后,您可以使用scipy.cluster.hierarchy模块的其余部分对此群集执行各种操作,例如可视化或展平它。

然而,有一个问题。截至编写this question时,您无法实际使用冗余距离矩阵,尽管文档说您可以。基于github issue仍然开放的事实,我认为这个问题尚未解决。正如在链接问题的答案中所指出的,您可以通过将完整的距离矩阵传递到scipy.spatial.distance.squareform函数来解决此问题,该函数将其转换为实际接受的格式(包含上部的平面数组) - 距离矩阵的三角形部分,称为压缩距离矩阵)。然后,您可以将结果传递给scipy.cluster.hierarchy函数之一。