马氏距离是考虑数据分布特性的距离度量,通过协方差矩阵捕捉特征间相关性。

定义

与欧氏距离的对比

特性马氏距离欧氏距离
尺度不变性
相关性考虑
分布感知

几何解释

相当于先通过 线性变换使数据协方差矩阵为单位矩阵,再计算欧氏距离。

应用场景

场景说明
异常检测识别偏离整体分布的样本
分类算法Fisher线性判别分析
聚类分析考虑特征相关性的聚类

Python 实现

import numpy as np
from scipy.linalg import inv
 
def mahalanobis_distance(x, mu, sigma):
    diff = x - mu
    return np.sqrt(diff.T @ inv(sigma) @ diff)
 
# 示例
data = np.random.multivariate_normal(mean=[0,0], cov=[[1,0.5],[0.5,1]], size=100)
mu = np.mean(data, axis=0)
sigma = np.cov(data, rowvar=False)
distance = mahalanobis_distance(data[0], mu, sigma)

实践技巧

问题解决方案
小样本收缩估计或正则化
数值不稳定检查协方差矩阵条件数
高维问题降维或稀疏估计