Mahalanobis Distance (马氏距离)

本文详细介绍了马氏距离的概念及其计算方法。马氏距离是一种衡量样本间相似度的有效方式,能够考虑变量间的相关性且不受量纲影响。文章还讨论了在不同条件下马氏距离的应用限制及优缺点。

 

 

 

 

S为样本协方差矩阵 马氏距离是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧式距离不同的是它考虑到各种特性之间的联 系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的),并且是尺度无关的(scale-invariant),即独立于测量尺 度。

 

 1)马氏距离的计算是建立在总体样本的基础上的,这一点可以从上述协方差矩阵的解释中可以得出,也就是说,如果拿同样的两个样本,放入两个不同的总体中,最后计算得出的两个样本间的马氏距离通常是不相同的,除非这两个总体的协方差矩阵碰巧相同;

 

2)在计算马氏距离过程中,要求总体样本数大于样本的维数,否则得到的总体样本协方差矩阵逆矩阵不存在,这种情况下,用欧式距离计算即可。 S = D1 * D1' (D1为m*n矩阵,m > n, m为特征维数,n为样本数) rank(S) <= n 故 S 不可逆。 [if A=BC, then rank(A) <= min(rank(B), rank(C)).]

 

3)还有一种情况,满足了条件总体样本数大于样本的维数,但是协方差矩阵的逆矩阵仍然不存在,比如三个样本点(3,4),(5,6)和(7,8),这种情况是因为这三个样本在其所处的二维空间平面内共线。这种情况下,也采用欧式距离计算。 (均值向量为[5, 6], D1 = [-2 0 2; -2 0 2], S显然不可逆)

 

4)在实际应用中“总体样本数大于样本的维数”这个条件是很容易满足的,而所有样本点出现3)中所描述的情况是很少出现的,所以在绝大多数情况下,马氏距 离是可以顺利计算的,但是马氏距离的计算是不稳定的,不稳定的来源是协方差矩阵,这也是马氏距离与欧式距离的最大差异之处。

 

 优点:它不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关;由标准化数据和中心化数据(即原始数据与均值之差)计算出的二点之间的马氏距离相同。马氏距离还可以排除变量之间的相关性的干扰。

 

缺点:它的缺点是夸大了变化微小的变量的作用。

 

 ——————————————————————————————————————

 

 Matlab函数 d = mahal(Y,X) —— 计算Y中每个样本到X数据集中心的马氏距离。 即:d(I) = (Y(I,:)-mu)*inv(SIGMA)*(Y(I,:)-mu)',其中mu、SIGMA分别为X的均值和方差。 X的行数必须大于列数(样本数多于维数)。

——————————————————————————————————————

 

 

 

 

 

 

Points 1 and 2 are at the same euclidian distance from the origin, but point 1 is very far away from the bulk of the cloud.

 

 

参考: http://zh.wikipedia.org/wiki/%E9%A9%AC%E6%B0%8F%E8%B7%9D%E7%A6%BB http://rogerdhj.blog.sohu.com/39020502.html http://topic.youkuaiyun.com/u/20090819/15/4d4ccbe6-f186-48e6-a150-61c1f41dc4d2.html http://zoonek2.free.fr/UNIX/48_R/06.html http://www.jennessent.com/arcview/mahalanobis_description.htm http://www.aiaccess.net/English/Glossaries/GlosMod/e_gm_mahalanobis

### Mahalanobis 距离的概念 Mahalanobis 距离是一种用于衡量两个点之间差异的方法,它考虑了数据分布中的协方差结构。与欧几里得距离不同的是,Mahalanobis 距离能够捕捉到变量之间的相关性以及它们的变化程度[^3]。 具体来说,对于一个多维随机向量 \( \mathbf{x} = (x_1, x_2, ..., x_p)^T \),其均值为 \( \boldsymbol{\mu} = (\mu_1, \mu_2, ..., \mu_p)^T \),协方差矩阵为 \( \Sigma \),那么任意一点 \( \mathbf{y} \) 到均值的距离可以定义为: \[ D_M(\mathbf{y}) = \sqrt{(\mathbf{y} - \boldsymbol{\mu})^T \Sigma^{-1} (\mathbf{y} - \boldsymbol{\mu})} \] 其中,\( D_M(\mathbf{y}) \) 表示点 \( \mathbf{y} \)Mahalanobis 距离。这种度量方式特别适用于检测异常值(outliers),因为它不仅依赖于单个维度上的偏差,还综合考虑了多维空间内的相互关系[^4]。 ### 实现方法 以下是基于 Python 和 NumPy 库的一个简单实现例子: ```python import numpy as np def mahalanobis_distance(y, mu, sigma_inv): """ 计算给定点 y 对应的马氏距离。 参数: y: ndarray, 测试样本的数据点 mu: ndarray, 数据集的均值向量 sigma_inv: ndarray, 协方差矩阵的逆 返回: float, 马氏距离的结果 """ delta = y - mu m_dist = np.sqrt(np.dot(delta.T, np.dot(sigma_inv, delta))) return m_dist # 示例数据 data = np.array([[1, 2], [3, 4], [5, 6]]) point_to_test = np.array([7, 8]) # 计算均值和协方差矩阵及其逆 mean_vector = np.mean(data, axis=0) cov_matrix = np.cov(data, rowvar=False) inv_cov_matrix = np.linalg.inv(cov_matrix) # 使用函数计算马氏距离 distance_result = mahalanobis_distance(point_to_test, mean_vector, inv_cov_matrix) print(f"The Mahalanobis Distance is {distance_result}") ``` 上述代码展示了如何利用已知数据集来估计均值和协方差矩阵,并进一步求解目标测试点相对于这些统计特性的 Mahalanobis 距离[^5]。 ### 结论 通过以上介绍可以看出,在实际应用中,当面对具有复杂关联模式的数据集合时,采用 Mahalanobis 距离往往能提供更为精确有效的分析手段。这尤其体现在诸如异常探测等领域之中[^6]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值