马氏距离

马氏距离


用来度量一个样本点P与数据分布为D的集合的距离。 
假设样本点为: 


马氏距离


数据集分布的均值为: 


马氏距离 

协方差矩阵为S。


则这个样本点P与数据集合的马氏距离为: 


马氏距离


马氏距离也可以衡量两个来自同一分布的样本x和y的相似性: 


马氏距离


当样本集合的协方差矩阵是单位矩阵时,即样本的各个维度上的方差均为1.马氏距离就等于欧式距离相等。 

当协方差矩阵是对角矩阵时,即样本数据在各个维度上的方差可能不为1.此时, 


马氏距离


可以看做是标准化了的欧氏距离。其中,si为样本数据在第i个维度上的标准差。

思考

1.为什么马氏距离是尺度无关的?


想判断一个点是否属于一个集合,首先计算出这个集合的中心点(通过计算这个集合中所有样本的均值向量可以得到),然后求出这个点到中心点的距离,若大于一个阈值则认为不属于这个集合。但是这样有个问题,有的集合包含的范围比较大,待分类样本虽然离此集合中心点较其他集合的中心点远,但实际上属于这个集合,这就是尺度对分类结果的影响。为了消除这个影响,计算出集合中所有数据点到中心点的平均距离,这样,范围大的集合计算出来的平均距离就会较范围小的集合平均距离大,这个平均距离就是下式中的分母:标准差。 


马氏距离


上式使得马氏距离具有尺度不变性。 
但是这样还有问题,上面的式子只适合集合是圆形区域分布的,如下图: 


马氏距离


对于下面的椭圆形例子,A点距离中心点更近,但是A点离集合边缘更近,更危险,一不小心就不属于这个集合了。所以仅仅通过上式得到的距离来衡量一个点属于一个集合的概率是不准确的。 


马氏距离


假设一个样本集合的维度是N,数据在各个维度上的方差已知(方差较大的方向是数据主要的变化方向),可以把方差看做各个方向上的轴长,方差越大,轴越长,数据点在这个方向上就越不容易掉下悬崖,也就越安全。如果待测样本在各个维度上与集合中心的距离都远远小于这个维度上的轴长,那么这个样本属于集合的概率就越大。协方差矩阵的对角线元素就代表了各个维度上的方差。 


马氏距离 

再次看上式,可以认为,对每一个待测样本,都计算一下其与集合中心的距离,接着,在各个方向上均除以轴长(协方差矩阵求逆),最后再乘起来,整个结果越小则说明样本越靠近集合的中心。 

2.那么协方差矩阵的非对角线是干嘛的?


这个我也不太清楚,我猜是它们的存在使得马氏距离可以将样本不同纬度特征的相关性关联起来。 

参考网址: 

https://en.wikipedia.org/wiki/Mahalanobis_distance


一、学习目的

    在训练one-shoting learning 的神经网路的时候,由于采用的是欧式距离,欧氏距离虽然很有用,但也有明显的缺点。它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求所以效果并不明显。经过一番查阅资料发现马氏距离广泛的被应用在人脸识别的损失函数上面,而且较欧拉距离取得了更好的效果。故对马氏距离进行了解和学习,并将其应用Siamese Network的损失函数定义以及特征空间距离的衡量上面。

二、关于马氏距离

马氏距离(Mahalanobis distance)是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧氏距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度。对于一个均值为μ,协方差矩阵为Σ的多变量向量,其马氏距离为(x-μ)'Σ^(-1)(x-μ)。如果协方差矩阵为 单位矩阵,那么马氏距离就简化为欧式距离,如果协方差矩阵为 对角阵,则其也可称为正规化的 欧氏距离'.

马氏距离

X与 Y的协方差定义如下,可以看到其形式类似与最小方差的无偏估计量。采用方差的无偏估计量可以使得较小的样本集更好的趋近与总体的方差。

马氏距离

关于马氏距离中S(协方差矩阵)可逆(非奇异)的条件为:样本的个数应该要大于每个样本自身的维度。

标准差和方差一般是用来描述一维数据的,但现实生活中我们常常会遇到含有多维数据的数据集,最简单的是大家上学时免不了要统计多个学科的考试成绩。面对这样的数据集,我们当然可以按照每一维独立的计算其方差,但是通常我们还想了解更多,比如,一个男孩子的猥琐程度跟他受女孩子的欢迎程度是否存在一些联系。协方差就是这样一种用来度量两个随机变量关系的统计量,我们可以仿照方差的定义:

马氏距离

来度量各个维度偏离其均值的程度,协方差可以这样来定义:

马氏距离

协方差的结果有什么意义呢?如果结果为正值,则说明两者是正相关的(从协方差可以引出“相关系数”的定义),也就是说一个人越猥琐越受女孩欢迎。如果结果为负值, 就说明两者是负相关,越猥琐女孩子越讨厌。如果为0,则两者之间没有关系,猥琐不猥琐和女孩子喜不喜欢之间没有关联,就是统计上说的“相互独立”。

从协方差的定义上我们也可以看出一些显而易见的性质,如:

马氏距离

马氏距离

 

三、协方差矩阵

前面提到的猥琐和受欢迎的问题是典型的二维问题,而协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,比如n维的数据集就需要计算马氏距离个协方差,那自然而然我们会想到使用矩阵来组织这些数据。给出协方差矩阵的定义:

马氏距离

这个定义还是很容易理解的,我们可以举一个三维的例子,假设数据集有三个维度,则协方差矩阵为:

马氏距离

可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度的方差。

 

四、Matlab协方差实战

必须要明确一点,协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。以下的演示将使用Matlab,为了说明计算原理,不直接调用Matlab的cov函数:

首先,随机生成一个10*3维的整数矩阵作为样本集,10为样本的个数,3为样本的维数。

马氏距离

图 1 使用Matlab生成样本集

根据公式,计算协方差需要计算均值,前面特别强调了,协方差矩阵是计算不同维度之间的协方差,要时刻牢记这一点。样本矩阵的每行是一个样本,每列是一个维度,因此我们要按列计算均值。为了描述方便,我们先将三个维度的数据分别赋值:

马氏距离

图 2 将三个维度的数据分别赋值

计算dim1与dim2,dim1与dim3,dim2与dim3的协方差:

马氏距离

图 3 计算三个协方差

协方差矩阵的对角线上的元素就是各个维度的方差,下面我们依次计算这些方差:

马氏距离

图 4 计算对角线上的方差

这样,我们就得到了计算协方差矩阵所需要的所有数据,可以调用Matlab的cov函数直接得到协方差矩阵:

马氏距离

图 5 使用Matlab的cov函数直接计算样本的协方差矩阵

计算的结果,和之前的数据填入矩阵后的结果完全相同。

 

五、总结

理解协方差矩阵的关键就在于牢记它的计算是不同维度之间的协方差,而不是不同样本之间。拿到一个样本矩阵,最先要明确的就是一行是一个样本还是一个维度,心中明确整个计算过程就会顺流而下,这么一来就不会迷茫了。