MDS(Multiple Dimensional Scaling)
关键思想:降维前后两点距离不变
假设 m 个 d 维样本在原始空间的距离矩阵为 D ∈ R m × m D\in \mathbb{R}^{m\times m} D∈Rm×m, 降维后的样本矩阵 Z ∈ R d ′ × m Z\in \mathbb{R}^{d'\times m} Z∈Rd′×m, 其中 d ′ ≪ d d'\ll d d′≪d, 每一列 z i z_i zi 表示一个降维后的样本。
令
B
=
Z
T
Z
∈
R
m
×
m
B=Z^TZ\in \mathbb{R^{m\times m}}
B=ZTZ∈Rm×m,
B
B
B 是降维后的内积矩阵,
B
i
j
=
z
i
T
z
j
B_{ij}=z_i^Tz_j
Bij=ziTzj,我们要求降维之后任意两点之间的距离仍然和原始空间一样,则
(1)
D
i
j
2
=
∥
z
i
−
z
j
∥
2
=
∥
z
i
∥
2
+
∥
z
j
∥
2
−
2
z
i
T
z
j
=
B
i
i
+
B
j
j
−
2
B
i
j
\begin{aligned} D_{ij}^2 = \left \| z_i - z_j\right \|^2 & =\left \| z_i \right \|^2 + \left \| z_j \right \|^2-2z_i^Tz_j \\ & = B_{ii}+B_{jj}-2B_{ij} \end{aligned} \tag{1}
Dij2=∥zi−zj∥2=∥zi∥2+∥zj∥2−2ziTzj=Bii+Bjj−2Bij(1)
为了方便,假设降维后的样本被中心化,即
∑
i
=
1
m
z
i
=
0
\sum_{i=1}^mz_i=0
∑i=1mzi=0,则
B
B
B 矩阵的行与列之和都为 0,比如第 i 行之和,以及第j列的和分别为:
∑
j
=
1
m
B
i
j
=
∑
j
=
1
m
z
i
T
z
j
=
z
i
T
∑
j
=
1
m
z
j
=
z
i
T
⋅
0
=
0
\sum_{j=1}^mB_{ij}=\sum_{j=1}^mz_i^Tz_j=z_i^T\sum_{j=1}^mz_j=z_i^T\cdot 0=0
j=1∑mBij=j=1∑mziTzj=ziTj=1∑mzj=ziT⋅0=0
∑
i
=
1
m
B
i
j
=
∑
i
=
1
m
z
i
T
z
j
=
(
∑
i
=
1
m
z
i
)
T
⋅
z
j
=
0
T
z
j
=
0
\sum_{i=1}^mB_{ij}=\sum_{i=1}^mz_i^Tz_j=(\sum_{i=1}^mz_i)^T\cdot z_j=0^Tz_j=0
i=1∑mBij=i=1∑mziTzj=(i=1∑mzi)T⋅zj=0Tzj=0
利用公式(1),可求矩阵 D 的第 j 列的平方和为:
(2)
∑
i
=
1
m
D
i
j
2
=
∑
i
=
1
m
(
B
i
i
+
B
j
j
−
2
B
i
j
)
=
∑
i
=
1
m
B
i
i
+
∑
i
=
1
m
B
j
j
−
2
∑
i
=
1
m
B
i
j
=
t
r
(
B
)
+
m
B
j
j
\begin{aligned} \sum_{i=1}^m D_{ij}^2 & = \sum_{i=1}^m (B_{ii}+B_{jj}-2B_{ij}) \\ & = \sum_{i=1}^mB_{ii}+\sum_{i=1}^mB_{jj}-2\sum_{i=1}^mB_{ij} \\ & = tr(B)+ mB_{jj} \\ \end{aligned} \tag{2}
i=1∑mDij2=i=1∑m(Bii+Bjj−2Bij)=i=1∑mBii+i=1∑mBjj−2i=1∑mBij=tr(B)+mBjj(2)
同理,矩阵 D 的第 i 行的平方和为:
(3)
∑
j
=
1
m
D
i
j
2
=
∑
j
=
1
m
(
B
i
i
+
B
j
j
−
2
B
i
j
)
=
∑
j
=
1
m
B
i
i
+
∑
j
=
1
m
B
j
j
−
2
∑
j
=
1
m
B
i
j
=
m
B
i
i
+
t
r
(
B
)
\begin{aligned} \sum_{j=1}^m D_{ij}^2 & = \sum_{j=1}^m (B_{ii}+B_{jj}-2B_{ij}) \\ & = \sum_{j=1}^mB_{ii}+\sum_{j=1}^mB_{jj}-2\sum_{j=1}^mB_{ij} \\ & = mB_{ii}+tr(B) \end{aligned} \tag{3}
j=1∑mDij2=j=1∑m(Bii+Bjj−2Bij)=j=1∑mBii+j=1∑mBjj−2j=1∑mBij=mBii+tr(B)(3)
矩阵 D 所有元素平方和为:
(4)
∑
i
=
1
m
∑
j
=
1
m
D
i
j
2
=
∑
i
=
1
m
(
m
B
i
i
+
t
r
(
B
)
)
=
m
∑
i
=
1
m
B
i
i
+
∑
i
=
1
m
t
r
(
B
)
=
m
⋅
t
r
(
B
)
+
m
⋅
t
r
(
B
)
=
2
m
⋅
t
r
(
B
)
\begin{aligned} \sum_{i=1}^m \sum_{j=1}^m D_{ij}^2 & = \sum_{i=1}^m(mB_{ii}+tr(B)) \\ & = m\sum_{i=1}^mB_{ii} +\sum_{i=1}^mtr(B) \\ & = m\cdot tr(B) + m\cdot tr(B) \\ & = 2m\cdot tr(B) \end{aligned} \tag{4}
i=1∑mj=1∑mDij2=i=1∑m(mBii+tr(B))=mi=1∑mBii+i=1∑mtr(B)=m⋅tr(B)+m⋅tr(B)=2m⋅tr(B)(4)
令
a
v
g
(
D
r
o
w
_
i
2
)
avg(D^2_{row\_i})
avg(Drow_i2) 表示 D 的第 i 行的平方和的平均值。即
a
v
g
(
D
r
o
w
_
i
2
)
=
1
/
m
∑
j
=
1
m
D
i
j
2
avg(D^2_{row\_i})=1/m\sum_{j=1}^m D_{ij}^2
avg(Drow_i2)=1/m∑j=1mDij2 , 同理,令
a
v
g
(
D
c
o
l
_
j
2
)
avg(D^2_{col\_j})
avg(Dcol_j2) 表示 D 的第 j 列的平方和的平均值,令
a
v
g
(
D
2
)
avg(D^2)
avg(D2) 表示 D 的所有元素平方和的平均值, 则由公式 (4) 分别可得:
t
r
(
B
)
=
∑
i
=
1
m
∑
j
=
1
m
D
i
j
2
2
m
=
m
2
⋅
∑
i
=
1
m
∑
j
=
1
m
D
i
j
2
m
2
=
m
2
a
v
g
(
D
2
)
tr(B)=\frac{\sum_{i=1}^m \sum_{j=1}^m D_{ij}^2}{2m}=\frac{m}{2}\cdot \frac{\sum_{i=1}^m \sum_{j=1}^m D_{ij}^2}{m^2} =\frac{m}{2}avg(D^2)
tr(B)=2m∑i=1m∑j=1mDij2=2m⋅m2∑i=1m∑j=1mDij2=2mavg(D2)
由上式和公式(2), (3) 分别可得:
B
i
i
=
∑
j
=
1
m
D
i
j
2
−
t
r
(
B
)
m
=
∑
j
=
1
m
D
i
j
2
m
−
t
r
(
B
)
m
=
a
v
g
(
D
r
o
w
_
i
2
)
−
t
r
(
B
)
m
=
a
v
g
(
D
r
o
w
_
i
2
)
−
1
2
a
v
g
(
D
2
)
B_{ii}= \frac{\sum_{j=1}^m D_{ij}^2-tr(B)}{m}=\frac{\sum_{j=1}^m D_{ij}^2}{m}-\frac{tr(B)}{m}=avg(D^2_{row\_i})-\frac{tr(B)}{m}=avg(D^2_{row\_i})-\frac{1}{2}avg(D^2)
Bii=m∑j=1mDij2−tr(B)=m∑j=1mDij2−mtr(B)=avg(Drow_i2)−mtr(B)=avg(Drow_i2)−21avg(D2)
B
j
j
=
∑
i
=
1
m
D
i
j
2
−
t
r
(
B
)
m
=
∑
i
=
1
m
D
i
j
2
m
−
t
r
(
B
)
m
=
a
v
g
(
D
c
o
l
_
j
2
)
−
t
r
(
B
)
m
=
a
v
g
(
D
c
o
l
_
j
2
)
−
1
2
a
v
g
(
D
2
)
B_{jj}= \frac{\sum_{i=1}^m D_{ij}^2-tr(B)}{m}=\frac{\sum_{i=1}^m D_{ij}^2}{m}-\frac{tr(B)}{m}=avg(D^2_{col\_j})-\frac{tr(B)}{m}=avg(D^2_{col\_j})-\frac{1}{2}avg(D^2)
Bjj=m∑i=1mDij2−tr(B)=m∑i=1mDij2−mtr(B)=avg(Dcol_j2)−mtr(B)=avg(Dcol_j2)−21avg(D2)
最后,根据公式(1)和上述两个式子,可以得出
B
i
j
B_{ij}
Bij 的计算公式:
(5)
B
i
j
=
B
i
i
+
B
j
j
−
D
i
j
2
2
=
a
v
g
(
D
r
o
w
_
i
2
)
−
1
2
a
v
g
(
D
2
)
+
a
v
g
(
D
c
o
l
_
i
2
)
−
1
2
a
v
g
(
D
2
)
−
D
i
j
2
2
=
a
v
g
(
D
r
o
w
_
i
2
)
+
a
v
g
(
D
c
o
l
_
j
2
)
−
a
v
g
(
D
2
)
−
D
i
j
2
2
\begin{aligned} B_{ij} & =\frac{B_{ii}+B_{jj}-D_{ij}^2}{2} \\ & =\frac{avg(D^2_{row\_i})-\frac{1}{2}avg(D^2)+avg(D^2_{col\_i})-\frac{1}{2}avg(D^2)-D_{ij}^2}{2} \\ & = \frac{avg(D^2_{row\_i})+avg(D^2_{col\_j})-avg(D^2)-D_{ij}^2}{2} \end{aligned} \tag{5}
Bij=2Bii+Bjj−Dij2=2avg(Drow_i2)−21avg(D2)+avg(Dcol_i2)−21avg(D2)−Dij2=2avg(Drow_i2)+avg(Dcol_j2)−avg(D2)−Dij2(5)
经过上述一系列的计算,我们便可以在已知样本在原始空间的距离信息(D矩阵)的情况下,由公式(5)计算得到降维之后的内积矩阵
B
=
Z
T
Z
B=Z^TZ
B=ZTZ。由公式(1)我们可以知道,只要内积矩阵 B 一确定,任意两点之间的距离
∥
z
i
−
z
j
∥
2
\left \| z_i - z_j\right \|^2
∥zi−zj∥2也就确定了。 现在我们只要找到一个矩阵
Z
Z
Z,使得其内积矩阵为
B
B
B , 即
Z
T
Z
=
B
Z^TZ=B
ZTZ=B, 我们就可以保证其距离
∥
z
i
−
z
j
∥
2
\left \| z_i - z_j\right \|^2
∥zi−zj∥2 是等于
D
i
j
2
D_{ij}^2
Dij2 的。
现在问题是如何找到满足
Z
T
Z
=
B
Z^TZ=B
ZTZ=B 的
Z
Z
Z ,只要利用特征值分解就能简单地做到。对矩阵
B
B
B 进行特征值分解,有
B
=
V
Λ
V
T
B=V\Lambda V^T
B=VΛVT, 其中
Λ
\Lambda
Λ 是特征值从大到小排列组成的对角矩阵,
V
V
V 是特征向量矩阵。
(6)
B
=
V
Λ
V
T
=
[
v
1
⋯
v
m
]
[
λ
1
⋯
0
⋮
⋱
⋮
0
⋯
λ
m
]
[
v
1
T
⋮
v
m
T
]
=
λ
1
v
1
v
1
T
+
λ
2
v
2
v
2
T
+
⋯
+
λ
m
v
m
v
m
T
B=V\Lambda V^T= \begin{bmatrix}v_1 \cdots v_m\end{bmatrix} \begin{bmatrix} \lambda_1 & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & \lambda_m \end{bmatrix} \begin{bmatrix} v_1^T \\ \vdots \\ v_m^T \end{bmatrix} = \lambda_1v_1v_1^T + \lambda_2v_2v_2^T+ \cdots + \lambda_mv_mv_m^T \tag{6}
B=VΛVT=[v1⋯vm]⎣⎢⎡λ1⋮0⋯⋱⋯0⋮λm⎦⎥⎤⎣⎢⎡v1T⋮vmT⎦⎥⎤=λ1v1v1T+λ2v2v2T+⋯+λmvmvmT(6)
从上式可以看出,若某个特征值
λ
i
\lambda_i
λi 为0,则其对应的项
λ
i
v
i
v
i
T
\lambda_iv_iv_i^T
λiviviT 也为 0,去掉这些项之后和仍然不变。假设
Λ
\Lambda
Λ 中有
k
k
k 个非零的特征值,
Λ
∗
=
d
i
a
g
(
λ
1
,
λ
2
,
.
.
.
,
λ
k
)
\Lambda_*=diag(\lambda_1,\lambda_2,...,\lambda_k)
Λ∗=diag(λ1,λ2,...,λk),
V
∗
V_*
V∗ 表示对应的特征向量矩阵,则
B
=
V
∗
Λ
∗
V
∗
T
B=V_*\Lambda_* V_*^T
B=V∗Λ∗V∗T, 可以得出
Z
Z
Z 为:
Z
=
Λ
∗
1
/
2
V
∗
T
Z=\Lambda_*^{1/2}V_*^T
Z=Λ∗1/2V∗T 可以很简单地验证,
Z
T
Z
=
(
Λ
∗
1
/
2
V
∗
T
)
T
Λ
∗
1
/
2
V
∗
T
=
V
∗
Λ
∗
1
/
2
Λ
∗
1
/
2
V
∗
T
=
V
∗
Λ
∗
V
∗
T
=
B
Z^TZ=(\Lambda_*^{1/2}V_*^T)^T\Lambda_*^{1/2}V_*^T=V_*\Lambda_*^{1/2}\Lambda_*^{1/2}V_*^T=V_*\Lambda_*V_*^T=B
ZTZ=(Λ∗1/2V∗T)TΛ∗1/2V∗T=V∗Λ∗1/2Λ∗1/2V∗T=V∗Λ∗V∗T=B, 至此,我们就找到了满足条件的
Z
Z
Z。这样得到的向量
z
i
∈
R
k
z_i \in \mathbb{R}^k
zi∈Rk 是 k 维的,有时候 k 还是很大。在实际中,为了有效地降维,不要求降维前后距离严格相等,只要距离大致接近即可。因此可以只取
d
′
d'
d′ 个最大的特征值,相当于在公式(6)中只取前面
d
′
d'
d′ 个项,将后面较小的项舍弃,其中
d
′
≪
d
d' \ll d
d′≪d。这样得到的
Z
T
Z
Z^TZ
ZTZ 和
B
B
B 虽然不能严格相等,但是差距不大,也就意味着距离与原空间也比较接近。
令
Λ
~
=
d
i
a
g
(
λ
1
,
λ
2
,
.
.
.
,
λ
d
′
)
\tilde{\Lambda}=diag(\lambda_1,\lambda_2,...,\lambda_{d'})
Λ~=diag(λ1,λ2,...,λd′),
V
~
\tilde{V}
V~ 表示对应的特征向量矩阵, 则
(7)
Z
=
Λ
~
1
/
2
V
~
T
Z = \tilde{\Lambda}^{1/2}\tilde{V}^T \tag{7}
Z=Λ~1/2V~T(7)
这得到的便是最终的结果,
z
i
,
⋯
 
,
z
m
∈
R
d
′
z_i, \cdots , z_m \in \mathbb{R}^{d'}
zi,⋯,zm∈Rd′ 是降维后的向量。
具体算法过程如下:
输入:距离矩阵 D, 降维后的维度 d'
过程:
1. 根据公式(5)计算出内积矩阵 B
2. 对矩阵 B 做特征值分解
3. 取 B 最大的 d' 个特征值及特征向量,按公式(7)计算出 Z
输出:Z, Z 的每一列为样本降维后的结果