假设现在有数据集 X ∈ R N × F X\in R^{N\times F} X∈RN×F,而 x 1 , x 2 ∈ R F x_{1},x_{2}\in R^{F} x1,x2∈RF为数据集中的两个样本,则 x 1 x_{1} x1与 x 2 x_{2} x2的马氏距离为: D M ( x 1 , x 2 ) = ( x 1 − x 2 ) Σ − 1 ( x 1 − x 2 ) T D_{M}(x_{1},x_{2})=\sqrt{(x_{1}-x_{2})\Sigma^{-1}(x_{1}-x_{2})^{T}} DM(x1,x2)=(x1−x2)Σ−1(x1−x2)T其中, Σ \Sigma Σ是数据集 X X X的协方差矩阵(对于高维数据,协方差可以表示两个特征之间的相关性,协方差矩阵的计算回顾其他算法-PCA主成分分析),如果我们令协方差矩阵 Σ \Sigma Σ是一个单位阵,此时的马氏距离就等价于欧氏距离,马氏距离相比欧氏距离有两个好处:
- 排除变量之间相关性的干扰;
- 消除特征之间量纲的影响;
下面将对马氏距离的两个优点进行分析,首先引入问题,我们考虑以下数据,这是一个二维数据:
发现两个维度间存在很强的相关性,其中红点和绿点到中心点(黑点)的欧式距离是一样的,但是从图中可以发现,红点更像是异常点,因此这种情况下用欧氏距离来判断效果不好。而马氏距离通过将数据进行坐标旋转、缩放到另一个空间后可以直接使用欧氏距离区分开红点和绿点。
首先进行坐标旋转,目的是消除各个维度之间的相关性,PCA降维后得到的各个维度是独立的,因为PCA本质就是坐标旋转。PCA对数据
X
X
X的协方差矩阵
Σ
\Sigma
Σ分解:
Σ
=
U
T
Q
U
\Sigma=U^{T}QU
Σ=UTQU其中,
U
U
U是特征向量组成的矩阵,并且是一个正交矩阵(
U
T
U
=
I
U^{T}U=I
UTU=I),即
U
U
U是一组正交基构成的矩阵,然后我们把
X
X
X投影到这组正交基上便能够消除维度间的相关性,PCA取前
k
k
k个维度实现降维,此处我们不降维,我们保留所有维度得到消除相关性的数据:
Y
=
X
U
Y=XU
Y=XU数据可视化如下:
可以看到坐标旋转变换后两个维度之间相关性已经很小了,但是样本之间的相对位置不变,红点和绿点到黑点的欧氏距离还是一样,仍然无法区分开,此时还需要进行缩放处理;
下一步,对数据进行缩放,消除量纲影响;我们只需让
Y
Y
Y的每个维度除以
Y
Y
Y对应维度的标准差(
σ
i
\sigma_{i}
σi是第
i
i
i维的方差),得到缩放后的数据
Z
Z
Z:
Z
=
Y
[
1
σ
1
⋯
0
⋱
0
⋯
1
σ
F
]
=
Y
Λ
Z=Y \begin{bmatrix} \frac{1}{\sqrt{\sigma_{1}}} & \cdots & 0 \\ & \ddots & \\ 0 & \cdots & \frac{1}{\sqrt{\sigma_{F}}} \end{bmatrix}=Y\Lambda
Z=Y⎣⎢⎡σ110⋯⋱⋯0σF1⎦⎥⎤=YΛ
下图是缩放后的数据:
假设
z
1
,
z
2
∈
R
F
z_{1},z_{2}\in R^{F}
z1,z2∈RF是
Z
Z
Z中的两个样本,现在计算
z
1
,
z
2
z_{1},z_{2}
z1,z2的欧式距离即为
x
1
,
x
2
x_{1},x_{2}
x1,x2的马氏距离;
证明:
D
(
z
1
,
z
2
)
=
(
z
1
−
z
2
)
(
z
1
−
z
2
)
T
D(z_{1},z_{2})=\sqrt{(z_{1}-z_{2})(z_{1}-z_{2})^{T}}
D(z1,z2)=(z1−z2)(z1−z2)T
=
(
y
1
Λ
−
y
2
Λ
)
(
y
1
Λ
−
y
2
Λ
)
T
=
(
x
1
U
Λ
−
x
2
U
Λ
)
(
x
1
U
Λ
−
x
2
U
Λ
)
T
=\sqrt{(y_{1}\Lambda-y_{2}\Lambda)(y_{1}\Lambda-y_{2}\Lambda)^{T}}=\sqrt{(x_{1}U\Lambda-x_{2}U\Lambda)(x_{1}U\Lambda-x_{2}U\Lambda)^{T}}
=(y1Λ−y2Λ)(y1Λ−y2Λ)T=(x1UΛ−x2UΛ)(x1UΛ−x2UΛ)T
=
(
x
1
−
x
2
)
U
Λ
Λ
U
T
(
x
1
−
x
2
)
T
=
(
x
1
−
x
2
)
Σ
−
1
(
x
1
−
x
2
)
T
=\sqrt{(x_{1}-x_{2})U\Lambda \Lambda U^{T}(x_{1}-x_{2})^{T}}=\sqrt{(x_{1}-x_{2})\Sigma^{-1}(x_{1}-x_{2})^{T}}
=(x1−x2)UΛΛUT(x1−x2)T=(x1−x2)Σ−1(x1−x2)T
补充:
Λ
Λ
=
[
1
σ
1
⋯
0
⋱
0
⋯
1
σ
F
]
\Lambda \Lambda=\begin{bmatrix} \frac{1}{\sigma_{1}} & \cdots & 0 \\ & \ddots & \\ 0 & \cdots & \frac{1}{\sigma_{F}} \end{bmatrix}
ΛΛ=⎣⎡σ110⋯⋱⋯0σF1⎦⎤这就是
Y
Y
Y的协方差矩阵的逆
D
(
Y
)
−
1
D(Y)^{-1}
D(Y)−1,所以:
U
Λ
Λ
U
T
=
U
D
(
Y
)
−
1
U
T
=
U
(
U
Σ
U
T
)
−
1
U
T
=
U
U
T
Σ
−
1
U
U
T
=
Σ
−
1
U\Lambda \Lambda U^{T}=UD(Y)^{-1} U^{T}=U(U\Sigma U^{T})^{-1}U^{T}=UU^{T}\Sigma^{-1}UU^{T}=\Sigma^{-1}
UΛΛUT=UD(Y)−1UT=U(UΣUT)−1UT=UUTΣ−1UUT=Σ−1