MDS,中文名叫“多维缩放”,是一种经典的降维方法,同时也是数据可视化的一种手段。最早起源于当我们仅能获得物体之间的相似性矩阵时,如何由此来重构它们的欧几里得坐标,如对一个国家的许多城市而言,假如我们不知道它们的经纬度信息,却知道所有城市两两之间的距离,就可以通过MDS方法重现它们的空间信息。MDS的基本思想很简单,要求原始空间中样本之间的距离在低维空间中得到保持。下面我们将对MDS的原理进行学习。
实对称矩阵的特征分解性质
任意的 N × N N\times N N×N实对称矩阵都有N个线性无关的特征向量,并且可以正交单位化。实对称矩阵A可被分解成:
A = Q Λ Q T A=Q\Lambda Q^T A=QΛQT
其中Q为正交矩阵, Λ \Lambda Λ为实对角矩阵。
给定 m m m个样本 X = { x 1 , x 2 , ⋅ ⋅ ⋅ , x m } ∈ R d × m \boldsymbol X=\{x_1,x_2, \cdot\cdot\cdot,x_m\} \in R^{d \times m} X={x1,x2,⋅⋅⋅,xm}∈Rd×m的距离矩阵 D ∈ R m × m \boldsymbol D \in R^{m \times m} D∈Rm×m,其中第i行第j列的元素 d i s t i j dist_{ij} distij为样本 x i x_i xi到 x j x_j xj的距离。目标是获得低维表示 Z = { z 1 , z 2 , ⋅ ⋅ ⋅ , z m } ∈ R d ′ × m \boldsymbol Z=\{z_1,z_2,\cdot\cdot\cdot,z_m\} \in R^{d' \times m} Z={z1,z2,⋅⋅⋅,zm}∈Rd′×m,其中 d ′ < d d'<d d′<d,且保持任意两个样本在 d ′ d' d′维空间的欧氏距离不变。
从已知的条件中,我们唯一能够得到降维后的样本与未降维前的样本之间的关系如下(1)式:
∥ z i − z j ∥ 2 = d i s t i j ( 1 ) \| z_i-z_j \|_{2}=dist_{ij}(1) ∥zi−zj∥2=distij(1)
为了更清晰地观察 z i z_i zi、 z j z_j zj与 d i s t i j dist_{ij} distij的关系,将(1)式左边平方,得(2)式:
∥ z i − z j ∥ 2 2 = ∥ z i ∥ 2 2 + ∥ z j ∥ 2 2 − 2 z i T z j = z i T z i + z j T z j − 2 z i T z j ( 2 ) \| z_i-z_j \|_2^2=\|z_i\|^2_2+\|z_j\|^2_2-2z_i^Tz_j=z_i^Tz_i+z^T_jz_j-2z_i^Tz_j(2) ∥zi−zj∥22=∥zi∥22+∥zj∥22−2ziTzj=ziTzi+zjTzj−2ziTzj(2)
从(2)式可以看出, d i s t i j 2 dist_{ij}^2 distij2与 z i z_i zi、 z j z_j zj各自的模以及内积有关,为了能够统一表示这种关系,这里引入内积矩阵 B = Z T Z ∈ R m × m \boldsymbol B=\boldsymbol Z^T\boldsymbol Z\in R^{m \times m} B=ZTZ∈Rm×m,其中 b i j = z i T z j b_{ij}=z_i^Tz_j bij=ziTzj,(2)式变换成(3)式:
d i s t i j 2 = ∥ z i − z j ∥ 2 2 = b i i + b j j − 2 b i j ( 3 ) dist_{ij}^2=\|z_i-z_j\|^2_2=b_{ii}+b_{jj}-2b_{ij}(3) distij2=∥zi−zj∥22=bii+bjj−2bij(3)
显然,我们接下来的目标是得到B中任一元素 b i j b_{ij} bij的解析解。在不影响结果正确性的前提下,为了方便后续计算,令降维后的样本Z被中心化,即 ∑ i = 1 m z i = 0 \sum^{m}_{i=1}\boldsymbol z_i=\boldsymbol0 ∑i=1mzi=0,可以得到 ∑ i = 1 m b i j = ∑ i = 1 m z i T z j = ( ∑ i = 1 m z i T ) z j = 0 \sum^m_{i=1}b_{ij}=\sum^m_{i=1}z^T_iz_j=(\sum^m_{i=1}z_i^T)z_j=0 ∑i=1mbij=∑i=1mziTzj=(∑i=1mziT)zj=0,同理 ∑ j = 1 m b i j = 0 \sum^m_{j=1}b_{ij}=0 ∑j=1mbij=0。则由(3)式可以得到式(4)(5)(6):
∑ i = 1 m d i s t i j 2 = ∑ 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 ( 4 ) \sum^m_{i=1}dist^2_{ij}=\sum^m_{i=1}b_{ii}+\sum^m_{i=1}b_{jj}-2\sum^m_{i=1}b_{ij}=tr(B)+mb_{jj}(4) i=1∑mdistij2=i=1∑mbii+i=1∑mbjj−2i=1∑mbij=tr(B)+mbjj(4)
同理,
∑ j = 1 m d i s t i j 2 = t r ( B ) + m b i i ( 5 ) \sum^m_{j=1}dist^2_{ij}=tr(B)+mb_{ii}(5) j=1∑mdistij2=tr(B)+mbii(5)
∑ i = 1 m ∑ j = 1 m d i s t i j 2 = 2 m t r ( B ) ( 6 ) \sum^m_{i=1}\sum^m_{j=1}dist^2_{ij}=2mtr(B)(6) i=1∑mj=1∑mdistij2=2mtr(B)(6)
其中 t r ( ⋅ ) tr(\cdot) tr(⋅)表示矩阵的迹(trace)。
由(4)(5)(6)式得, b i i = 1 m ( ∑ j = 1 m d i s t i j 2 − t r ( B ) ) b_{ii}=\frac{1}{m}(\sum^m_{j=1}dist^2_{ij}-tr(B)) bii=m1(∑j=1mdistij2−tr(B)), b j j = 1 m ( ∑ i = 1 m d i s t i j 2 − t r ( B ) ) b_{jj}=\frac{1}{m}(\sum^m_{i=1}dist^2_{ij}-tr(B)) bjj=m1(∑i=1mdistij2−tr(B)), t r ( B ) = 1 2 m ∑ i = 1 m ∑ j = 1 m d i s t i j 2 tr(B)=\frac{1}{2m}\sum^m_{i=1}\sum^m_{j=1}dist^2_{ij} tr(B)=2m1∑i=1m∑j=1mdistij2。
为了表述清晰,令
d i s t i ⋅ 2 = 1 m ∑ j = 1 m d i s t i j 2 ( 7 ) dist^2_{i\cdot}=\frac{1}{m}\sum^m_{j=1}dist^2_{ij}(7) disti⋅2=m1j=1∑mdistij2(7)
d i s t ⋅ j 2 = 1 m ∑ i = 1 m d i s t i j 2 ( 8 ) dist^2_{\cdot j}=\frac{1}{m}\sum^m_{i=1}dist^2_{ij}(8) dist⋅j2=m1i=1∑mdistij2(8)
d i s t ⋅ ⋅ 2 = 1 m 2 ∑ i = 1 m ∑ j = 1 m d i s t i j 2 ( 9 ) dist^2_{\cdot \cdot}=\frac{1}{m^2}\sum^m_{i=1}\sum^m_{j=1}dist^2_{ij}(9) dist⋅⋅2=m21i=1∑mj=1∑mdistij2(9)
联合(3)和(4) ∼ \sim ∼(9)式,得(10)式:
b i j = − 1 2 ( d i s t i j 2 − d i s t i ⋅ 2 − d i s t ⋅ j 2 + d i s t ⋅ ⋅ 2 ) ( 10 ) b_{ij}=-\frac{1}{2}(dist^2_{ij}-dist^2_{i\cdot}-dist^2_{\cdot j}+dist^2_{\cdot\cdot})(10) bij=−21(distij2−disti⋅2−dist⋅j2+dist⋅⋅2)(10)
至此,已得到B和D的全部关系。接下来便是由B得到最终目标Z。
首先,我们可以判断出B是实对称矩阵,由实对称矩阵性质可知, B = V Λ V T B=V \Lambda V^T B=VΛVT,其中 Λ = d i a g ( λ 1 , λ 2 , ⋅ ⋅ ⋅ , λ m ) \Lambda=diag(\lambda_1,\lambda_2,\cdot\cdot\cdot,\lambda_m) Λ=diag(λ1,λ2,⋅⋅⋅,λm)为特征值构成的对角矩阵, λ 1 ≥ λ 2 ≥ ⋅ ⋅ ⋅ ≥ λ m \lambda_1\ge \lambda_2\ge \cdot\cdot\cdot \ge\lambda_m λ1≥λ2≥⋅⋅⋅≥λm,V是特征向量矩阵。
B = Z T Z = V Λ V T = V Λ 1 2 Λ 1 2 V T = ( Λ 1 2 V T ) T ( Λ 1 2 V T ) B=Z^TZ=V\Lambda V^T=V\Lambda^\frac{1}{2} \Lambda^\frac{1}{2}V^T=(\Lambda^\frac{1}{2}V^T)^T(\Lambda^\frac{1}{2}V^T) B=ZTZ=VΛVT=VΛ21Λ21VT=(Λ21VT)T(Λ21VT)
Z = Λ 1 2 V T ( 11 ) Z=\Lambda^\frac{1}{2}V^T(11) Z=Λ21VT(11)
一般降维任务总是取 d ′ ≪ d d'\ll d d′≪d作为目标维度,所以取d’个最大特征值构成对角矩阵 Λ ~ \widetilde\Lambda Λ ,对应的特征向量矩阵为 V ~ \widetilde V V ,则
Z = Λ ~ 1 2 V ~ T ∈ R d ′ × m ( 12 ) Z=\widetilde\Lambda^\frac{1}{2}\widetilde V^T \in R^{d' \times m}(12) Z=Λ 21V T∈Rd′×m(12)
输入:距离矩阵 D ∈ R m × m D\in R^{m\times m} D∈Rm×m,其元素 d i s t i j dist_{ij} distij为样本 x i x_i xi到 x j x_j xj的距离;低维空间维数 d ′ d' d′。
过程:
1: 根据(7) ∼ \sim ∼(9)式计算 d i s t i ⋅ 2 dist^2_{i\cdot} disti⋅2, d i s t ⋅ j 2 dist^2_{\cdot j} dist⋅j2, d i s t i j 2 dist^2_{ij} distij2;
2: 根据(10)式计算内积矩阵B;
3: 对B做特征值分解;
4: 取 Λ ~ \widetilde\Lambda Λ 为 d ′ d' d′个最大特征值所构成的对角矩阵, V ~ \widetilde V V 为相应的特征向量矩阵。
输出: Z = Λ ~ 1 2 V ~ T Z=\widetilde\Lambda^\frac{1}{2}\widetilde V^T Z=Λ 21V T
"""
MDS : Multi-dimensional Scaling
Refercences :
[1]周志华.机器学习[M].清华大学出版社,2016:425.
[2]http://scikit-learn.sourceforge.net/dev/modules/generated/sklearn.manifold.MDS.html
Author : Ggmatch
Date : 2019/4/7
"""
from time import time
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.ticker import NullFormatter
from sklearn import manifold, datasets
# 制造样本
n_points = 1000
X, color = datasets.samples_generator.make_s_curve(n_points, random_state=0)
n_neighbors = 10
fig = plt.figure(figsize=(5, 5)) #画板
gs = fig.add_gridspec(1,2) #共2副子图
ax1 = fig.add_subplot(gs[0,0], projection='3d') #第一幅子图表示原始样本分布
ax1.scatter(X[:, 0], X[:, 1], X[:, 2], c=color, cmap=plt.cm.Spectral)
# MDS降维
n_components = 2
t0 = time() #计时开始
mds = manifold.MDS(n_components, max_iter=100, n_init=1) #建立MDS模型
Y = mds.fit_transform(X)
t1 = time() #计时结束
ax2 = fig.add_subplot(gs[0,1])
ax2.scatter(Y[:, 0], Y[:, 1], c=color, cmap=plt.cm.Spectral) #第2副子图表示降维后样本分布
ax2.set_title("MDS (%.2g sec)" % (t1 - t0))
ax2.xaxis.set_major_formatter(NullFormatter())
ax2.yaxis.set_major_formatter(NullFormatter())
plt.show()
1)高维空间中对两个样本用欧式距离求直线距离,很多时候并不可取(如实验案例取得是流形空间),两点之间应该用“测地线”距离。改进算法为Isomap(Isomatric Mapping)。
2)MDS其实分为Metric MDS与Non-Metric MDS,本文讲述的是Metric MDS,通过样本之间的欧氏距离来近似代表相似度的思路,而Non-Metric MDS是通过点与点之间距离的单调映射来近似原有的距离。实际应用中,样本之间的距离越近,相似度越大,反之亦然。
[1]https://baike.baidu.com/item/特征分解/12522621?fr=aladdin
[2]周志华.机器学习[M].清华大学出版社,2016:425.
[3]http://scikit-learn.sourceforge.net/dev/modules/generated/sklearn.manifold.MDS.html
[4]Cox, T.F., Cox, M.A.A. (2001). Multidimensional Scaling. Chapman and Hall.
[5]http://blog.sina.com.cn/s/blog_501162be0102v37l.html