马氏距离

原文地址

https://www.cnblogs.com/Weirping/articles/6613013.html


马氏距离与其推导

本文使用markdown编写,如有公式显示异常,可将正文复制到markdown编辑器查看

马氏距离就是用于度量两个坐标点之间的距离关系,表示数据的协方差距离。与尺度无关的(scale-invariant),即独立于测量尺度。

基本思想(intuition)

如下图的过程(以两个维度作为例子),此例的数据重心为原点,P1,P2到原点的欧氏距离相同,但点P2在y轴上相对原点有较大的变异,而点P1在x轴上相对原点有较小的变异。所以P1点距原点的直观距离是比P2点的小的。

Mahalanobis distance img 1

马氏距离就是解决这个问题,它将直观距离和欧式距离统一。它先将数据不同维度上的方差统一(即各维度上的方差相同),此时的欧式距离就是直观距离

Mahalanobis distance img 2

如图:统一方差后的图,P1到原点的距离小于P2。P1’到原点的欧式距离和P2的相同。** 以上所说的直观距离就是马氏距离 **。但是,如果不同维度之间具有相关性,则压缩的效果就不好了。如下图只在横向和纵向上压缩,则达不到上图的压缩效果。

Mahalanobis distance img 3

所以在F1方向和F2方向上压缩数据才能达到较好的效果。所以需要将原始的在X坐标系中的坐标表示在F坐标系中。然后再分别沿着坐标轴压缩数据。

所以,计算样本数据的马氏距离分为两个步骤:

  1. 坐标旋转
  2. 数据压缩
    坐标旋转的目标:使旋转后的各个维度之间线性无关,所以该旋转过程就是主成分分析的过程。
    数据压缩的目标:所以将不同的维度上的数据压缩成为方差都是1的的数据集。

推导过程

有一个原始的多维样本数据 Xn×m Xn×m(m列,n行):

x11x21xn1x12x22xn2x1mx2mxnm x11x12⋯x1mx21x22⋯x2m⋮⋮⋱⋮xn1xn2⋯xnm

其中每一行表示一个测试样本(共n个);

Xi Xi
表示样本的第i个维度(共m个) Xi=(x1ix2ixni)T Xi=(x1ix2i⋯xni)T,以上多为样本数据记为 X=(X1,X2Xm) X=(X1,X2⋯Xm)。样本的总体均值为
μX=(μX1,μX2μXm) μX=(μX1,μX2⋯μXm)
。其协方差为:

ΣX=E{(XμX)T(XμX)}=1n(XμX)T(XμX) ΣX=E{(X−μX)T(X−μX)}=1n(X−μX)T(X−μX)

协方差矩阵是在具有一组样本后,表示数据的各维度之间的关系的。其中n是样本的数量

假设将原始数据集 X X通过坐标旋转矩阵 U U旋转到新的坐标系统中得到一个新的数据集 F F。(其实 X X F F表示的是同一组样本数据集,只是由于其坐标值不同,为了易于区分用了两个字母表示)

FT=(F1,F2Fm)T=UXT FT=(F1,F2⋯Fm)T=UXT

新数据集 F F的均值记为 μF=(μF1,μF2μFm) μF=(μF1,μF2⋯μFm), μF=UμX μF=UμX

由于将数据集旋转后数据的各维度之间是不相关的,所以新数据集 F F的协方差矩阵 ΣF ΣF应该为对角阵。
由于:

(FμF)T=U(XμX)T (F−μF)T=U(X−μX)T

(FμF)=(XμX)UT (F−μF)=(X−μX)UT

所以:
ΣF=E{(FμF)T(FμF)}=1n(FμF)T(FμF)=1nU(XμX)T(XμX)UT=UΣXUT=λ1λ2λm ΣF=E{(F−μF)T(F−μF)}=1n(F−μF)T(F−μF)=1nU(X−μX)T(X−μX)UT=UΣXUT=(λ1λ2⋱λm)

每个 λi λi就是每个维度值方差。

由于 ΣX ΣX是实对角阵,所以 U U是一个正交矩阵,

UT=U1 UT=U−1
。( 005-正交变化,EVD,SVD,PCA-原理详解及推导

以上是准备知识,下面推导一个样本点 x=(x1,x2xm) x=(x1,x2⋯xm)到重心 μX=(μX1,μX2μXm) μX=(μX1,μX2⋯μXm)的马氏距离。等价于求点 f=(f1,f2fm) f=(f1,f2⋯fm) 压缩后的坐标值到数据重心压缩后的坐标值 μF=(μF1,μF2μFm) μF=(μF1,μF2⋯μFm)的欧式距离。

d2(f,μF)=(f1μF1λ1)2+(f2μF2λ2)2++(fmμFmλm)2=(f1μF1,f2μF2fmμFm)1λ11λ21λmf1μF1f2μF2fmμFm=(fμF)(UΣXUT)1(fμF)T=(xμX)UT(UΣXUT)1U(xμX)T=(xμX)UTUΣX1UTU(xμX)T=(xμX)ΣX1(xμX)T d2(f,μF)=(f1−μF1λ1)2+(f2−μF2λ2)2+⋯+(fm−μFmλm)2=(f1−μF1,f2−μF2⋯fm−μFm)(1λ11λ2⋱1λm)(f1−μF1f2−μF2⋮fm−μFm)=(f−μF)(UΣXUT)−1(f−μF)T=(x−μX)UT(UΣXUT)−1U(x−μX)T=(x−μX)UTUΣX−1UTU(x−μX)T=(x−μX)ΣX−1(x−μX)T

这就是马氏距离的的计算公式了。

如果 x x是列向量

d2=(xμX)TΣX1(xμX) d2=(x−μX)TΣX−1(x−μX)

如果并把上文的重心点 μX=(μX1,μX2μXm) μX=(μX1,μX2⋯μXm)改为任意一个样本点 y y,则可以得到 x x y y两个样本点之间的马氏距离公式为:

d2=(xy)TΣX1(xy)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值