外观
为什么更偏好马氏距离而非欧氏距离?
Why Prefer Mahalanobis Distance Over Euclidean distance?
在距离计算中,欧氏距离假设各坐标轴是相互独立的。

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

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

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

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

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

简而言之,目标是构造一个新的坐标系,使其各坐标轴相互独立且正交。步骤如下:
- 第一步:把各列变换成不相关的变量。
- 第二步:对新变量做缩放,使其方差等于 1。
- 第三步:在这个新坐标系中求欧氏距离。
所以最终我们用的还是欧氏距离。只不过我们先对数据做了变换,使其满足欧氏距离的假设。

马氏距离最常见的用途之一是异常值检测。重新考虑我们前面讨论过的数据集,其中 P3 显然是一个异常值。
如果我们把 P1 当作分布的中心,并使用欧氏距离,就会得出 P3 不是异常值的结论,因为 P2 和 P3 到 P1 等距。

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

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