理解前提:


侠肝义胆陈浩天:理解向量空间变化:(半)正定矩阵zhuanlan.zhihu.com


侠肝义胆陈浩天:理解向量空间变化:PCAzhuanlan.zhihu.com



马氏距离的目的就是为了解决不同维度之间的方差(covariance)与相关性(correlation). 复习一下相关定义:

  • covariance: ,均值 就是期望的无偏估计;
  • correlation:

Mahalanobis Distance

先看定义。Denote that 协方差矩阵



, 均值



.



单个样本的马氏距离





两个样本(维度)之间的马氏距离,显然如果两个样本是独立同分布,马氏距离就变成了欧氏距离。





Covariance

首先我们看两个独立的分布,水平线上的分布的方差为



,垂直线上的分布的方差为



. 假设两个聚类中心为



.Intuitively, 有一个数据点



我们想计算它到聚类中心的距离,


因为横纵分布不同,所以说横纵坐标的权重肯定不一样!我们除以方差来进行标准化(variance-normalized),来解决维度分布差异/量纲不同(different variances)的问题。或者简单理解成参数权重不一样的问题,那么就相当于


中的


几何间隔,固定了几何间隔,函数间隔就不会变了。函数距离


就是未进行归一化的距离。





python 向量马氏距离 两个向量的马氏距离_无向图中两点之间的距离


如图所示,那么



注意,这两个分布是独立的,也就是说它们之间没有covariance. (多元高斯分布使用马氏距离进行衡量:https:///wiki/Multivariate_normal_distribution#Non-degenerate_case)

显然它们的协方差矩阵为:


python 向量马氏距离 两个向量的马氏距离_python 向量马氏距离_02


上面的等式


就可以写成一般形式了


python 向量马氏距离 两个向量的马氏距离_马氏距离计算实例_03


Correlation

variance-normalized解决了维度权重不一样的问题。但是如果两个维度分布之间有关联,怎么解决?


python 向量马氏距离 两个向量的马氏距离_方差_04


图中圆圈为聚类中心点,直观看起来红色


是离群点。事实上


, 也就说,

就算已经进行了variance-normalized, 相对距离还是不变的。因此,我们必须考虑加上 correlation.

(事实告诉我们)协方差矩阵包含着correlation的相关信息,但是我们很难直观地弄明白它是怎么做的。我们换个角度:我们通过旋转数据,来去掉variance和correlation.

加上还有协方差矩阵,我们马上会联想到PCA. (相信看完我的笔记,你已经十分了解向量的旋转了)那么旋转后的数据如下图。


python 向量马氏距离 两个向量的马氏距离_python 向量马氏距离_05


但是还没结束,因为这个时候仍然是


. 接下来就是对主元除以标准差来进行标准化了,这里也是为了消除

量纲差异,所以同样需要除以方差。

python 向量马氏距离 两个向量的马氏距离_方差_06


这个时候就能把离群点真正分离出来了。

为什么PCA可以?

根据我的前两篇笔记,谈谈我的理解。

如果两个特征之间是有联系的,那么它们的向量肯定不会正交。既然我们要去除correlation和covariance, 那么肯定是希望每个特征都是相互正交的,也就是相互独立。PCA就可以达到这个效果。

那为什么是


?

显然我们知道



的特征向量


是一样的,只不过特征值是


. 既然特征向量不变,那么旋转的方向是一样的,不影响相互正交;倒数的话就是为了除以方差(

variance-normalized),消除量纲差异. 所以这样改变。

求解的过程中,如果协方差矩阵


是非奇异的,那么就先考虑PCA.