在scipy中,层次聚类中使用的两个不同的距离函数有什么意义?

In scipy, what's the point of the two different distance functions used in hierarchical clustering?

我可以将一个距离函数传递给 pdist,用于创建提供给 linkage 的距离矩阵。我可以将第二个距离函数作为度量传递给 linkage

为什么有两种可能的距离函数?

如果它们不同,它们是如何使用的?例如,链接是否使用距离矩阵中的距离进行初始迭代,即查看是否应将任何两个原始观察值组合成一个簇,然后使用度量函数进行进一步组合,即两个簇或一个簇有原始观察?

只用过一个距离函数。

如果将一维压缩距离矩阵(即 pdist 的输出)传递给 linkage,则 linkage 将忽略其 metric 参数。 (请参阅 source code here,其中 scipy 调用相关的底层 Cython 链接函数,而无需使用 metric 参数。)

另一方面,如果您传入二维矩阵,linkage 会将此矩阵视为观察值并使用 metric 参数为您调用此矩阵的 pdist作为距离函数。 (参见 source code here。)

参数'method'用于通过层次聚类过程来衡量聚类之间的相似性。参数'metric'用于测量数据集中两个对象之间的距离。

'metric' 与数据的性质密切相关(例如,您可能希望对具有相同特征数量的对象使用 'euclidean' 距离,或者对时间序列使用动态时间扭曲具有不同的持续时间)。

关键是有两种使用联动功能的方法。第一个参数是y,它可以是数据本身,也可以是之前给定度量产生的距离矩阵。

如果您选择为 'linkage' 提供距离矩阵,那么您将不需要 'metric' 参数,因为您已经计算了所有对象之间的所有距离。