Skip to content

为什么更偏好马氏距离而非欧氏距离?

Why Prefer Mahalanobis Distance Over Euclidean distance?

在距离计算中,欧氏距离假设各坐标轴是相互独立的。

ds p162 1

因此,如果你的特征之间存在相关性,欧氏距离就会给出误导性的结果。例如,考虑下面这个虚拟数据集:

ds p162 2

显然,这些特征是相关的。这里,我们在该数据集中标出三个点 P1、P2 和 P3。

ds p162 3

考虑到数据分布,直觉告诉我们 P2 比 P3 更靠近 P1。这是因为 P2 比 P3 更落在数据分布之内。

ds p163 1

然而欧氏距离无视了这一点,结果 P2 和 P3 到 P1 是等距的,如下图所示:

ds p163 2

马氏距离弥补了这一局限。它是一种把数据分布纳入考量的距离度量。因此,它能度量一个数据点离分布有多远,而欧氏距离做不到。再看回前面的数据集,用马氏距离时,P2 比 P3 更靠近 P1。

ds p164 1

简而言之,目标是构造一个新的坐标系,使其各坐标轴相互独立且正交。步骤如下:

  • 第一步:把各列变换成不相关的变量。
  • 第二步:对新变量做缩放,使其方差等于 1。
  • 第三步:在这个新坐标系中求欧氏距离。

所以最终我们用的还是欧氏距离。只不过我们先对数据做了变换,使其满足欧氏距离的假设。

ds p164 2

马氏距离最常见的用途之一是异常值检测。重新考虑我们前面讨论过的数据集,其中 P3 显然是一个异常值。

如果我们把 P1 当作分布的中心,并使用欧氏距离,就会得出 P3 不是异常值的结论,因为 P2 和 P3 到 P1 等距。

ds p165 1

而使用马氏距离则给出了更清晰的图景:

ds p165 2

这在高维场景下更为有用,因为高维下无法可视化。另一个我们平时不太常听到、但确实存在的用例,是用马氏距离实现的 kNN 变体。Scipy 实现了马氏距离,可在此查看:https://bit.ly/3LjAymm。

本站内容仅供学习交流,版权归原作者所有。