马氏距离(Mahalanobis Distance)介绍与实例

本文介绍马氏距离(Mahalanobis Distance),经过本文,你将了解到马氏距离的含义、马氏距离与欧式距离的比较以及一个经过马氏距离进行异常检测的例子(基于Python的sklearn包)。html

目的

计算两个样本间的距离时,须要考虑样本所在的分布形成的影响。影响包括两个方面:web

  • 不一样维度上的方差不一样,进而不一样维度在计算距离时的重要性不一样;
  • 不一样维度间可能存在相关性,干扰距离计算。

当数据的分布已知时,咱们一般会用马氏距离代替欧氏距离,或者选择另外一种方法:对数据进行转换(如PCA)。app

定义

  1. 度量样本到样本分布间的距离
    d = ( x μ ) T S 1 ( x μ ) d = \sqrt{(\vec x - \vec \mu)^T S^{-1} (\vec x - \vec \mu)} 其中 μ \vec \mu 是样本分布的均值, S S 是样本分布的协方差矩阵
  2. 度量一个分布下,两个样本之间的距离
    d = ( x y ) T S 1 ( x y ) d = \sqrt{(\vec x - \vec y)^TS^{-1}(\vec x - \vec y)}

直观理解

下面是一个二维空间中距离度量的例子(戳这里查看实例来源)。ide

图中,圆圈表示样本分布的中心点 c c ,两个叉分别表示两个样本点 x , y x, y ,从图中能够看出,在二维空间中两个叉到样本分布的中心点间的欧氏距离相等。可是很明显,绿叉应该是分布内的点,红叉是分布外的点,因此绿叉距离分布中心点的距离应该更近才合理。svg

使用马氏距离,就等同于经过数据转换的方法,消除样本中不一样特征维度间的相关性和量纲差别,使的欧式距离在新的分布上能有效度量样本到分布间的距离。spa

  • 第一步,端详一下原始数据分布的特色。
    这些样本的特征维度即为横坐标轴和纵坐标轴,且两个特征维度呈现明显的正相关性。orm

  • 第二步,消除不一样维度之间的相关性。
    消除特征维度间的相关性后,样本分布图以下所示,还存在的一个问题是两个特征维度间的量纲不一致。xml

  • 第三步,消除不一样维度之间的量纲差别。

通过以上三步,如今的样本分布下,样本间的距离能够用欧氏距离来衡量。htm

性质

马氏距离消除了样本不一样维度之间的方差差别和相关性,是一个无量纲的度量方式。blog

与欧式距离的关系

  • 若是协方差矩阵是单位矩阵 \rightarrow 样本的特征维度间相关性(协方差)为0,量纲一致 \rightarrow 马氏距离等同于欧氏距离。
  • 若是协方差矩阵是对角矩阵 \rightarrow 样本的特征维度间的量纲一致 \rightarrow 马氏距离等同于标准化后的欧氏距离。

实例——用马氏距离进行异常检测

实例来自sklearn官方文档
在这里插入图片描述