马氏距离以及其推导过程

在欧式距离中,我们默认各个维度均值为0,方差为1,且相互独立。但是在实际情况中,会出现以下两类大问题:
- 纲(尺度)不同:比如身高(m)和体重(kg),数值范围完全不同。

  • 特征相关性:比如身高和体重往往高度正相关。

如果直接算欧氏距离,数据在概率密度高的方向(相关性方向)上的距离会被放大。马氏距离的本质,就是先将原始数据进行旋转和缩放(去相关和标准化),在这个新空间中再计算欧氏距离

数学推导过程

假设我们有一个随机向量 \(X = [x_1, x_2, \dots, x_d]^T\),其均值为 \(\mu = [\mu_1, \mu_2, \dots, \mu_d]^T\),协方差矩阵为 \(\Sigma\)。我们的目标是计算 \(X\) 到均值 \(\mu\) 的马氏距离。

步骤一:去中心化

首先,将数据减去均值,移动到原点:

\[Y = X - \mu \]

步骤二:消除相关性(线性变换)

因为特征之间存在相关性,协方差矩阵 \(\Sigma\) 不是对角矩阵。根据线性代数,协方差矩阵 \(\Sigma\) 是一个实对称矩阵,我们对其进行特征分解(Eigendecomposition)

\[\Sigma = P \Lambda P^T \]

其中:

  • \(P\) 是正交矩阵(\(P^T P = I\)),其列向量是 \(\Sigma\) 的特征向量。它代表了一个旋转变换
  • \(\Lambda\) 是对角矩阵,对角线上的元素 \(\lambda_i\) 是特征值(代表数据在特征向量方向上的方差)。

为了消除相关性,我们通过正交矩阵 \(P^T\) 对去中心化的数据 \(Y\) 进行旋转(等距变换),得到新坐标系下的向量 \(Z\)

\[Z = P^T Y = P^T (X - \mu) \]

此时,新变量 \(Z\) 的各个维度之间已经互不相关了,其协方差矩阵变成了对角阵 \(\Lambda\)

步骤三:标准化(消除方差影响)

虽然 \(Z\) 的各维度互不相关,但它们在各个方向上的方差(即特征值 \(\lambda_i\))依然不同。为了让每个方向的标准差都变为 1,我们需要对每个维度除以其标准差 \(\sqrt{\lambda_i}\)

在线性代数中,这相当于左乘 \(\Lambda^{-1/2}\)

\[W = \Lambda^{-1/2} Z = \Lambda^{-1/2} P^T (X - \mu) \]

此时,新向量 \(W\) 的每个维度不仅互不相关,而且方差均为 1(即 \(\Sigma_W = I\))。

步骤四:计算新空间中的欧氏距离

在经过“去相关”和“标准化”后的完美空间(\(W\) 空间)中,我们直接计算 \(W\) 到原点的普通欧氏距离。

欧氏距离的平方为:

\[D^2 = W^T W \]

现在,我们将前面步骤中 \(W\) 的表达式代入:

\[D^2 = \left[ \Lambda^{-1/2} P^T (X - \mu) \right]^T \left[ \Lambda^{-1/2} P^T (X - \mu) \right] \]

根据矩阵转置的性质 \((AB)^T = B^T A^T\),展开左半部分:

\[D^2 = (X - \mu)^T P (\Lambda^{-1/2})^T \Lambda^{-1/2} P^T (X - \mu) \]

因为 \(\Lambda\) 是对角阵,所以 \((\Lambda^{-1/2})^T = \Lambda^{-1/2}\),且 \(\Lambda^{-1/2} \Lambda^{-1/2} = \Lambda^{-1}\)

\[D^2 = (X - \mu)^T P \Lambda^{-1} P^T (X - \mu) \]

回想一下步骤二中 \(\Sigma = P \Lambda P^T\),我们求它的逆矩阵:

\[\Sigma^{-1} = (P \Lambda P^T)^{-1} = (P^T)^{-1} \Lambda^{-1} P^{-1} \]

因为 \(P\) 是正交阵,所以 \(P^{-1} = P^T\)\((P^T)^{-1} = P\)。因此:

\[\Sigma^{-1} = P \Lambda^{-1} P^T \]

正好对应了公式中间的部分!我们将其替换掉:

\[D^2 = (X - \mu)^T \Sigma^{-1} (X - \mu) \]

这就是马氏距离的平方公式。

3. 最终公式

因此,向量 \(X\) 与均值 \(\mu\) 之间的马氏距离定义为:

\[D_M(X, \mu) = \sqrt{(X - \mu)^T \Sigma^{-1} (X - \mu)} \]

如果是计算两个样本点 \(X_i\)\(X_j\) 之间的马氏距离,公式同理为:

\[D_M(X_i, X_j) = \sqrt{(X_i - X_j)^T \Sigma^{-1} (X_i - X_j)} \]

4. 总结

  • \(\Sigma = I\)(单位矩阵)时:意味着数据各个维度独立且方差均为 1,此时马氏距离退化为普通的欧氏距离

  • \(\Sigma\) 是对角阵时:意味着数据各维度独立但方差不同,此时马氏距离就是标准化欧氏距离(Normalized Euclidean Distance)。

一句话理解马氏距离的推导:

它通过协方差矩阵的逆 \(\Sigma^{-1}\),默默地对原始数据做了一次旋转(消除相关性)缩放(消除方差尺度),使得原本呈椭圆状分布的数据变成了正圆状分布,从而能用欧氏距离进行公平的测量。

posted @ 2026-05-25 10:54  potatso  阅读(49)  评论(0)    收藏  举报