笔者在写【几种常见的距离计算公式】时,提到了马氏距离,当时困惑了很久,没搞清楚协方差矩阵具体的内容,通过查阅很多资料,在此总结一下,感谢网络上的贡献者。
-
马氏距离
马氏距离就是用于度量两个坐标点之间的距离关系,表示数据的协方差距离。与尺度无关的(scale-invariant),即独立于测量尺度。 -
那么为什么要提出协方差呢?
标准差和方差一般是用来描述一维数据的,但现实生活我们常常遇到含有多维数据的数据集。面对这样的数据集,当然,可以按照每一维(feature)独立的计算其方差,但是,通常我们还想了解每个样本中各维度(feature)之间的关系,我们可以仿照方差的定义:
来度量各个维度(feature)之间的相关性,协方差可以这么来定义:
即:
其中,X,Y表示两个维度(特征),n表示样本的个数。 -
协方差的结果有什么意义呢?
如果结果为正值,则说明两者是正相关的(从协方差可以引出“相关系数”的定义),结果为负值就说明负相关的,如果为0,也是就是统计上说的“相互独立”。在PCA的求解过程中,正是要求协方差为0,保证特征之间相互独立。
比如有两个变量X,Y(马氏距离中的两个维度,也可以理解为机器学习、深度学习中提到的feature),观察t1-t7(7个时刻,即7个样本)他们的变化情况。分别用蓝色和红色表示X、Y,横轴是时间。可以看到X,Y均围绕各自的均值运动,并且很明显是同向变化的。
我们发现每一时刻它们的值做同向运动,它们的维度正相关。
如果反向运动呢?
- 协方差的性质(X、Y代表两个维度)
- 协方差矩阵
遇到一个样本有多个随机变量(feature、维度),可以将协方差表示为:
公式定义如下:
其中,
X
n
X_n
Xn表示第n个特征,显然,协方差矩阵是一个对称阵。
- 总结
上面的内容看起来似乎很简单,但实战起来就很容易让人迷茫了。计算协方差需要计算均值,那是按行计算均值还是按列呢,必须要明确一点,协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的协方差。所以,所计算的平均值是同一维度的均值,在计算之前一定要弄清楚一列到底是代表一个样本还是一个维度。
1)马氏距离的计算是建立在总体样本的基础上的,这一点可以从上述协方差矩阵的解释中可以得出,也就是说,如果拿同样的两个样本,放入两个不同的总体中,最后计算得出的两个样本间的马氏距离通常是不相同的,除非这两个总体的协方差矩阵碰巧相同;
2)在计算马氏距离过程中,要求总体样本数大于样本的维数,否则得到的总体样本协方差矩阵逆矩阵不存在,这种情况下,用欧式距离计算即可;
3)还有一种情况,满足了条件总体样本数大于样本的维数,但是协方差矩阵的逆矩阵仍然不存在,比如三个样本点(3,4),(5,6)和(7,8),这种情况是因为这三个样本在其所处的二维空间平面内共线。这种情况下,也采用欧式距离计算;
4)在实际应用中“总体样本数大于样本的维数”这个条件是很容易满足的,而所有样本点出现3)中所描述的情况是很少出现的,所以在绝大多数情况下,马氏距离是可以顺利计算的,但是马氏距离的计算是不稳定的,不稳定的来源是协方差矩阵,这也是马氏距离与欧式距离的最大差异之处。