通过 Mahalanobis 距离使用距离矩阵进行聚类

Posted

技术标签:

【中文标题】通过 Mahalanobis 距离使用距离矩阵进行聚类【英文标题】:Clustering with a Distance Matrix via Mahalanobis distance 【发布时间】:2014-07-09 08:00:31 【问题描述】:

我想要聚类的对象之间有一组成对距离(在矩阵中)。我目前使用 k-means 聚类(计算从质心到给定聚类所有成员的平均距离,因为我没有坐标),其中 k 由一个区间内的最佳 Davies-Bouldin 指数选择。

但是,我有三个单独的指标(未来可能会更多)来描述数据之间的差异,每个指标在幅度和分布方面都存在很大差异。目前,我用欧几里得距离计算三个度量之间的距离矩阵,但我相当确定度量之间的差异正在搞砸(例如,最大的一个压倒了其他的)。

我认为解决这个问题的一个好方法是使用马氏距离来组合指标。但是,我显然无法计算坐标之间的协方差矩阵,但我可以计算距离度量。这有意义吗?也就是说,如果我得到两个对象 ij 之间的距离为:

D(i,j) = sqrt( dt S^-1 d )

其中 d 是 i 和 j 之间的不同距离度量的 3 向量,dt 是 d 的转置,S 是 距离 的协方差矩阵,D 是一个好的,用于聚类的标准化指标?

我还考虑过对指标进行归一化(即减去均值并除以方差),然后简单地保持欧几里得距离(实际上,这似乎本质上是马氏距离,至少在某些情况下),或者切换到 DBSCAN 或 EM 之类的东西,并且没有排除它们(尽管 MDS 集群可能有点过度)。作为旁注,任何能够完成所有这些工作的软件包都将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

考虑使用 k-medoids (PAM) 而不是破解的 k-means,它可以与任意距离函数一起使用;而 k-means 旨在最小化方差,而不是任意距离。

EM 也会遇到同样的问题 - 它需要能够计算出有意义的中心。

您还可以使用层次链接聚类。它只需要一个距离矩阵。

【讨论】:

以上是关于通过 Mahalanobis 距离使用距离矩阵进行聚类的主要内容,如果未能解决你的问题,请参考以下文章

opencv中机器学习常用算法简述

马氏距离(Mahalanobis distance)

马氏距离(Mahalanobis distance)

paper 114:Mahalanobis Distance(马氏距离)

超过2组的R上的马氏距离

Python返回数组中的平方Mahalanobis距离函数 - 为什么?