在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' 参数,因为您已经计算了所有对象之间的所有距离。
我可以将一个距离函数传递给 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' 参数,因为您已经计算了所有对象之间的所有距离。