马氏距离(Mahalanobis Distance)推导及几何意义

article/2025/8/30 17:03:02

看了一些博客对马氏距离的解释,似乎没有讲到本质的地方,本文从欧氏距离存在的问题开始入手,一步步推导出马氏距离,并得出结论:原始空间中的马氏距离等于坐标旋转变换及缩放后的空间中的欧氏距离
假设数据集 X ∈ R N × F X\in R^{N\times F} XRN×F x 1 , x 2 ∈ R F x_1,x_2\in R^{F} x1,x2RF为数据集中的两个样本,则 x 1 x_1 x1 x 2 x_2 x2的马氏距离是
D i s m a h a l a n o b i s ( x 1 , x 2 ) = ( x 1 − x 2 ) Σ − 1 ( x 1 − x 2 ) T Dis_{mahalanobis}(x_1,x_2)=\sqrt{(x_1-x_2)\Sigma^{-1}(x_1-x_2)^T} Dismahalanobis(x1,x2)=(x1x2)Σ1(x1x2)T

其中Σ是X的协方差矩阵。与欧式距离的最大区别是公式中多了协方差矩阵的逆 Σ − 1 Σ^{-1} Σ1,它的作用是:排除变量之间相关性的干扰,并且排除测量量纲的影响。下面推导马氏距离的公式由来及 Σ − 1 Σ^{-1} Σ1的物理意义。

问题引入:考虑图1所示二维数据集,可以发现两个维度间存在很强的相关性,其中红点和绿点到中心点(黑点)的欧式距离是一样的,但是从图中可以发现,红点更像是异常点,因此这种情况下用欧氏距离来判断效果不好。而马氏距离通过将数据进行坐标旋转、缩放到另一个空间后可以直接使用欧氏距离区分开红点和绿点

图1
  • 消除相关性(坐标旋转): 首先考虑消除各个维度之间的相关性。这里需要一些PCA算法的基础知识,如果了解PCA算法就会知道PCA降维后各个维度间是独立的,而PCA本质上就是对数据集进行坐标旋转,旋转后就消除了各个维度之间的相关性。PCA对数据集X的协方差矩阵Σ进行特征分解 Σ = U T Q U Σ=U^T QU Σ=UTQU,U是特征向量组成的矩阵,并且是一个正交矩阵(即 U T U = I U^T U=I UTU=I,因为Σ是实对称的,所以正交),即U是一组正交基组成的矩阵,随后PCA将数据集X投影到这组正交基上便消除了各维度间的相关性,PCA会取前k个维度来达到降维的目的,但这里我们不降维,因此保留所有维度直接投影到U上即可,投影和旋转变换是一样的意思,投影的方法是将数据集乘以基矩阵U(矩阵相乘实际上就是一种坐标变换),得到消除相关性后的数据集Y Y = X U Y=XU Y=XU
图2
  • 排除量纲影响(缩放): 如图2所示,可以看到坐标旋转变换后两个维度之间相关性已经很小了,但是样本之间的相对位置不变,红点和绿点到黑点的欧氏距离还是一样,仍然无法区分开,此时还需要进行缩放处理,从图2可以看到数据在横向的方差比较大,而在纵向的方差比较小,这会造成量纲的不统一,例如现在有两个类别,第一个类别均值为0,方差为0.1,第二个类别均值为5,方差为5。那么一个值为2的点属于第一类的概率大还是第二类的概率大?距离上说应该是第一类,但是直觉上显然是第二类,因为第一类不太可能到达2这个位置(参考)。因此还需要对每个维度进行缩放,即每个维度除以对应维度的标准差(为了跟马氏距离的公式对上应该是除以标准差而不是方差),这里的标准差是Y每个维度的标准差而不是X。假设σ_i 是第i个维度的方差,Z是缩放后的数据集,则

    如图3所示为Y进行缩放后的数据集,可以看到此时就可以直接用欧氏距离把红点和绿点区分开了。
图3

通过以上分析就可以推导马氏距离的公式了,设 z 1 , z 2 ∈ R F z_1,z_2∈R^F z1,z2RF是Z中的两个样本,则 z 1 z_1 z1 z 2 z_2 z2的欧式距离是
D i s E u c l i d e a n ( z 1 , z 2 ) = ( z 1 − z 2 ) ( z 1 − z 2 ) T = ( y 1 Λ − y 2 Λ ) ( y 1 Λ − y 2 Λ ) T = ( x 1 U Λ − x 2 U Λ ) ( x 1 U Λ − x 2 U Λ ) T = ( x 1 − x 2 ) U Λ Λ U T ( x 1 − x 2 ) T = ( x 1 − x 2 ) Σ − 1 ( x 1 − x 2 ) T ( 这 个 等 号 推 导 见 下 方 ) = D i s m a h a l a n o b i s ( x 1 , x 2 ) \begin{aligned} Dis_{Euclidean}(z_1,z_2)&=\sqrt{(z_1-z_2)(z_1-z_2)^T} \\ &=\sqrt{(y_1\Lambda-y_2\Lambda)(y_1\Lambda-y_2\Lambda)^T}\\ &=\sqrt{(x_1U\Lambda-x_2U\Lambda)(x_1U\Lambda-x_2U\Lambda)^T}\\ &=\sqrt{(x_1-x_2)U\Lambda\Lambda U^T(x_1-x_2)^T}\\ &=\sqrt{(x_1-x_2)\Sigma^{-1}(x_1-x_2)^T} (这个等号推导见下方)\\ &=Dis_{mahalanobis}(x_1,x_2) \end{aligned} DisEuclidean(z1,z2)=(z1z2)(z1z2)T =(y1Λy2Λ)(y1Λy2Λ)T =(x1UΛx2UΛ)(x1UΛx2UΛ)T =(x1x2)UΛΛUT(x1x2)T =(x1x2)Σ1(x1x2)T ()=Dismahalanobis(x1,x2)
懒得打公式了,直接截图上来吧,上面那个等号的推导

也就是说在原始空间中的马氏距离等于坐标旋转变换及缩放后的空间中的欧氏距离, Σ − 1 Σ^{-1} Σ1的作用就是对数据进行坐标旋转和缩放。整个过程见下图

实验代码

from scipy.spatial.distance import pdist
from numpy import array, cov, diag, mean, sqrt, vstack
from numpy.random import multivariate_normal
from numpy.linalg import eig
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt"""生成二维正太分布数据`X` 两个维度间的协方差为0.8(强相关).
在X的尾部加入点A和点B,点B属于数据集X而点A为异常点,且点A和B到原点(0,0)的`欧式距离`相等.
本次实验旨在通过坐标旋转和缩放后通过欧式距离将点A和B区分开,理解马氏距离中sigma的物理意义."""
N = 4  # 数据集大小
X = multivariate_normal(mean=[0, 0],size=N,cov=[[1, 0.8],[0.8, 1]])point_A = array([-3, 2])  # 异常点
point_B = array([3, 2])# 添加点A和B到尾部
X = vstack((X, point_A))
X = vstack((X, point_B))# 旋转
Q, U = eig(cov(X, rowvar=False))
Y = X.dot(U)
# 缩放
Cov_Y = cov(Y, rowvar=False)  # 求Y的协方差矩阵
diag_Y = diag([sqrt(1/Cov_Y[i][i]) for i in range(len(Cov_Y))])  # 取协方差矩阵对角线元素的倒数
Z = Y.dot(diag_Y)  # 缩放后的特征print(pdist(X, 'mahalanobis')) # 原始数据X的马氏距离
print(pdist(Z)) # 旋转缩放后的欧氏距离def plot_point(data, N, plt_temp):plt_temp.scatter(data[:N, 0], data[:N, 1], c='b')plt_temp.scatter(data[N, 0], data[N, 1], c='r')  # 点Aplt_temp.scatter(data[N+1, 0], data[N+1, 1], c='g')plt_temp.scatter(0, 0, c='k')  # 原点plt_temp.xlim([-8, 8])plt_temp.ylim([-8, 8])return plt_tempplt.subplot(1, 3, 1)
plt = plot_point(X, N, plt)
plt.subplot(1, 3, 2)
plt = plot_point(Y, N, plt)
plt.subplot(1, 3, 3)
plt = plot_point(Z, N, plt)
plt.show()

http://chatgpt.dhexx.cn/article/bQoRF1L7.shtml

相关文章

直观理解--马氏距离

首先我们很了解欧氏距离了,就是用来计算欧式空间(就是我们常见的坐标系)中两个点的距离的。 比如点 x ( x 1 , … , x n ) x (x_1,…,x_n) x(x1​,…,xn​) 和 y ( y 1 , … , y n ) y (y_1,…,y_n) y(y1​,…,yn​) 的欧氏距离为&…

Mahalanobis距离(马氏距离)的“哲学”解释

讲解教授:赵辉 (FROM : UESTC) 课程:《模式识别》 整理:PO主 基础知识: 假设空间中两点x,y,定义: 欧几里得距离, Mahalanobis距离, 不难发现,如果去掉…

六大距离:欧式距离、街道距离、马氏距离等

文章目录 1 简 介2 距离特征2.1 Euclidean距离2.2 Cosine距离2.3 manhattan距离2.4 chebyshev距离2.5 minkowski距离2.6 mahalanobis距离 3 代 码实现 1 简 介 数值向量是数据建模问题中最为常见的一类特征,例如: 在一些涉及图片,文本信息等…

马氏距离例题详解(全网最详细)

马氏距离例题详解 定义 马哈拉诺比斯距离是由印度统计学家马哈拉诺比斯 (英语)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧氏距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带…

浅谈马氏距离【Mahalonobis Distance】

浅谈马氏距离【Mahalonobis Distance】 1. Introduction2. 欧式距离对于多元数据会存在一些什么问题?3 .什么是马氏距离4.马氏距离背后的数学和intuition5. 利用python来计算马氏距离6. Case1: 使用马氏距离进行多元异常值检测7. Case 2: 对分类问题应用马氏距离8. …

距离度量之马氏距离

马氏距离 用来度量一个样本点P与数据分布为D的集合的距离。 假设样本点为: 数据集分布的均值为: 协方差矩阵为S。 则这个样本点P与数据集合的马氏距离为: 马氏距离也可以衡量两个来自同一…

马氏距离(Mahalanobis Distance)介绍与实例

本文介绍马氏距离(Mahalanobis Distance),通过本文,你将了解到马氏距离的含义、马氏距离与欧式距离的比较以及一个通过马氏距离进行异常检测的例子(基于Python的sklearn包)。 目的 计算两个样本间的距离时…

马氏距离-Mahalanobis Distance

一、学习目的 在训练one-shoting learning 的神经网路的时候,由于采用的是欧式距离,欧氏距离虽然很有用,但也有明显的缺点。它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实…

欧氏距离与马氏距离

Preface 之前在写《Multi-view CNNs for 3D Objects Recognition》的阅读笔记的时候,文章中的一个创新点便是将MVCNN网络提取到的3D Objects的形状特征描述符,投影到马氏距离(Mahalanobis Distance)上,“这样的话&…

马氏距离 Mahalanobis Distance

马氏距离 Mahalanobis Distance 1. 马氏距离定义2. 马氏距离实际意义2.1 欧氏距离近就一定相似?2.2 归一化后欧氏距离就一定相似?2.3 算上维度的方差就够了? 3. 马氏距离的几何意义4. 马氏距离的推导5. 马氏距离限制 Reference: 马氏距离(Mah…

马氏距离概念

马氏距离 一、基本概念: 方差:方差是标准差的平方,而标准差的意义是数据集中各个点到均值点距离的平均值。反应的是数据的离散程度。 协方差:标准差与方差是描述一维数据的,当存在多维数据时,我们通常需要知…

马氏距离通俗理解

基础知识: 假设空间中两点x,y,定义: 欧几里得距离, Mahalanobis距离, 不难发现,如果去掉马氏距离中的协方差矩阵,就退化为欧氏距离。那么我们就需要探究这个多出来的因子究竟有什么含…

马氏距离Mahalanobis Distance实例

简介 如果按照欧氏距离去理解马氏距离,一定会迷惑一段时间。因为欧氏距离可以计算两个点之间的距离,而马氏距离是计算一个点距离一个聚类的距离。如果想通过马氏距离去计算某两个点之间的距离是行不通的。下面按照一般的套路介绍一下欧氏距离与马氏距离…

马氏距离详解

马氏距离详解 一、理性认知二、感性认知第一个例子第二个例子 三、实例认知四、公式推导推导过程 致谢 一、理性认知 马氏距离(Mahalanobis distance)是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示点与一个分布之间的距离。它是一种有效的计算两个未…

马氏距离(Mahalanobis Distance)

马氏距离(Mahalanobis Distance)是度量学习中一种常用的距离指标,同欧氏距离、曼哈顿距离、汉明距离等一样被用作评定数据之间的相似度指标。但却可以应对高维线性分布的数据中各维度间非独立同分布的问题。 什么是马氏距离 马氏距离(Mahalanobis Distance)是一种距离的度量,…

马氏距离详解(数学原理、适用场景、应用示例代码)

看了很多关于马氏距离(Mahalanobis Distance)的介绍,但是总感觉有一些地方不太清晰,所以结合数学公式、机器学习中的应用案例,从头梳理一下。 马氏距离实际上是欧氏距离在多变量下的“加强版”,用于测量点…

linux 配置swoole环境

linux 配置swoole环境 安装PHP wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh --php_option 6 --phpcache_option 1 --reboot vim /usr/local/php/etc/php.ini 删除对exec函数…

ppp开启pap/chap认证

什么是pap? PAP 是 PPP 协议集中的一种链路控制协议,通过2次握手建立认证,对等结点持续重复发送 ID/ 密码(明文)给验证者。 什么是chap? CHAP通过三次握手验证被认证方的身份,在初始链路建立…

Ensp配置PPP CHAP认证

如图配置IP地址 启用 CHAP 认证&#xff0c;用户名/密码为&#xff1a;HuaWei/123456 确保RAR20-A和RAR20-B之间可以互通 按照如下步骤进行。 1&#xff09;配置IP地址&#xff0c;确保设备互通 <Huawei>system-view [Huawei]sysname RAR20-A [RAR20-A]in…

思科模拟器启用CHAP协议

chap使用密文格式发送chap认证信息&#xff0c;相比较pap的明文格式&#xff0c;更具有安全性。 添加s端口&#xff1a;先将路由器关闭&#xff0c;将HWIC-2T模块拖入卡槽&#xff0c;再将路由器开启 单向CHAP&#xff1a;R2为认证方 R1&#xff1a; hostname R1 …