马氏距离——直观理解与公式推导

在开始之前先说一个我自己的观点,一个好的距离衡量方法应该可以很好地表示数据之间的相似性,即距离近点的数据拥有更高的相似性。而好的距离度量依赖于什么?好的数据表示。

当数据以向量进行表示,每个维度的值代表不同属性时,好的数据表示应该:1)消除量纲的影响,2)考虑不同纬度方差的影响,3)考虑不同维度之间的相关性。

前两个点通过标准化操作很容易做到,而第三点就相对复杂一点。接下来一步一步地基于第三个出发点,进行马氏距离的推导。

假设数据集的向量表示为 X \in \mathbb{R}^{m \times n} ,共n条数据,每条数据由一个m维向量表示。X 的协方差矩阵为 \Sigma_X ,均值为 u_X 。为了消除不同维度属性的相关性,通过一个矩阵 Q^T 对 X 进行坐标表换,将数据映射到新的坐标系下(Q^T中的行向量为新的坐标轴),记为 Y=Q^TX ,在新的坐标系下,Y 的向量表示中,不同维度之间是相互独立的,因此 Y 的协方差矩阵应该是一个对角矩阵(除对角线元素外,其余元素均为0)。我们先求解 Y 的均值,很显然,应该是 u_Y=Q^Tu_X,接着求 Y 的协方差矩阵:

\begin{align} \Sigma_Y&=\frac{1}{n}[Y-u_Y][y-u_Y]^T \\ &= \frac{1}{n}[Q^T(X-u_x)][Q^T(X-u_X)]^T \\ &=Q^T\frac{1}{n}(X-u_X)(X-u_X)^TQ \\ &=Q^T\Sigma_XQ \end{align} (1)

从这里可以发现,当 Q 是 \Sigma_X 的特征向量组成的矩阵时, \Sigma_Y 一定是对角矩阵。由于\Sigma_X是对称矩阵,因此肯定可以通过特征分解得到 Q ,且 Q 是正交矩阵。正交矩阵有一个很好的性质,即 Q^{-1}=Q^T ,在后续的推导中会用到。

到目前为止,我们已经完成了第三点,即考虑数据中不同维度之间的相关性,接着我们通过对变量 y 进行标准化来实现第一点和第二点。

\begin{align} y^{'}&=\Sigma_Y^{-\frac{1}{2}}(y-u_Y) \\ &=(Q^T\Sigma_XQ)^{-\frac{1}{2}}Q^T(x-u_X) \end{align} (2)

终于,我们得到了一个“完美”的数据表示 y^{'} ,接着可以通过向量内积来衡量距离了。y^{'}到原点的距离为:

\begin{align} \sqrt{y^{'T}y^{'}}&=\sqrt{(x-u_X)^TQ(Q^T\Sigma_XQ)^{-\frac{1}{2}}(Q^T\Sigma_XQ)^{-\frac{1}{2}}Q^T(x-u_X)} \\ &=\sqrt{(x-u_X)^TQ(Q^T\Sigma_XQ)^{-1}Q^T(x-u_X)} \\ &=\sqrt{(x-u_X)^TQQ^{-1}\Sigma_X^{-1}QQ^T(x-u_X)} \\ &=\sqrt{(x-u_X)^T\Sigma_X^{-1}(x-u_X)}=D_M(x) \end{align}(3)

这就是马氏距离。要计算两个数据点之间的马氏距离也很简单,设两个点为 x_1, x_2 ,首先将他们映射到新的坐标系,并完成标准化,得到

\begin{align} y_1&=(Q^T\Sigma_XQ)^{-\frac{1}{2}}Q^T(x_1-u_X) \\ y_2&=(Q^T\Sigma_XQ)^{-\frac{1}{2}}Q^T(x_2-u_X) \\ \end{align} (4)

两者之差为, y_d=(Q^T\Sigma_XQ)^{-\frac{1}{2}}Q^T(x_1-x_2) , 根据(3),可以得到任意两点x_1, x_2之间的马氏距离为:

D_M(x_1, x_2)=\sqrt{(x_1-x_2)^TQ(Q^T\Sigma_XQ)^{-1}Q^T(x_1-x_2)} (5)

其实从(3)中我们惊讶的发现,这不就是高斯分布中的指数部分吗?后续将完善两者之间的联系。

发布于 2020-02-26 22:26