本文使用markdown编写,如有公式显示异常,可将正文复制到markdown编辑器查看
马氏距离就是用于度量两个坐标点之间的距离关系,表示数据的协方差距离。与尺度无关的(scale-invariant),即独立于测量尺度。
基本思想(intuition)
如下图的过程(以两个维度作为例子),此例的数据重心为原点,P1,P2到原点的欧氏距离相同,但点P2在y轴上相对原点有较大的变异,而点P1在x轴上相对原点有较小的变异。所以P1点距原点的直观距离是比P2点的小的。
马氏距离就是解决这个问题,它将直观距离和欧式距离统一。它先将数据不同维度上的方差统一(即各维度上的方差相同),此时的欧式距离就是直观距离。
如图:统一方差后的图,P1到原点的距离小于P2。P1’到原点的欧式距离和P2的相同。** 以上所说的直观距离就是马氏距离 **。但是,如果不同维度之间具有相关性,则压缩的效果就不好了。如下图只在横向和纵向上压缩,则达不到上图的压缩效果。
所以在F1方向和F2方向上压缩数据才能达到较好的效果。所以需要将原始的在X坐标系中的坐标表示在F坐标系中。然后再分别沿着坐标轴压缩数据。
所以,计算样本数据的马氏距离分为两个步骤:
- 坐标旋转
- 数据压缩
坐标旋转的目标:使旋转后的各个维度之间线性无关,所以该旋转过程就是主成分分析的过程。
数据压缩的目标:所以将不同的维度上的数据压缩成为方差都是1的的数据集。
推导过程
有一个原始的多维样本数据 Xn×m (m列,n行):
其中每一行表示一个测试样本(共n个);
协方差矩阵是在具有一组样本后,表示数据的各维度之间的关系的。其中n是样本的数量
假设将原始数据集 X 通过坐标旋转矩阵 U 旋转到新的坐标系统中得到一个新的数据集 F 。(其实 X 和 F 表示的是同一组样本数据集,只是由于其坐标值不同,为了易于区分用了两个字母表示)
新数据集 F 的均值记为 μF=(μF1,μF2⋯μFm) , μF=UμX
由于将数据集旋转后数据的各维度之间是不相关的,所以新数据集
F
的协方差矩阵
ΣF
应该为对角阵。
由于:
所以:
每个 λi−−√ 就是每个维度值方差。
由于 ΣX 是实对角阵,所以 U 是一个正交矩阵,
以上是准备知识,下面推导一个样本点 x=(x1,x2⋯xm) 到重心 μX=(μX1,μX2⋯μXm) 的马氏距离。等价于求点 f=(f1,f2⋯fm) 压缩后的坐标值到数据重心压缩后的坐标值 μF=(μF1,μF2⋯μFm) 的欧式距离。
这就是马氏距离的的计算公式了。
如果
x
是列向量
如果并把上文的重心点
μX=(μX1,μX2⋯μXm)
改为任意一个样本点
y
,则可以得到
x
和
y
两个样本点之间的马氏距离公式为: