我们知道,缓解“维度灾难”的一个重要方法就是降维,即通过某种数学变换将原始高维属性空间转变为一个低维空间。而多维度缩放,就是其中的一个经典算法。
简介
多维度缩放,英文全称为Multiple Dimension Scaling,简称为MDS。其基本想法是: 降维后的低维空间 d ′ d^{'} d′的欧式距离等于原始空间 d d d的欧式距离。然而,它又是如何实现的呢?
数学推导
假定 m m m个样本在原始空间的距离矩阵为 D ∈ R m × m D \in \mathbb{R}^{m \times m} D∈Rm×m,其第 i i i行 j j j列的元素 d i j d_{ij} dij为样本 x i \mathbf{x}_i xi和 x j \mathbf{x}_j xj的距离。我们的目标是获得样本在 d ′ d^{'} d′维空间的表示 Z ∈ R d ′ × m , d ′ ≤ d Z \in \mathbb{R}^{d^{'} \times m}, d^{'} \le d Z∈Rd′×m,d′≤d,且任意两个样本在 d ′ d^{'} d′维空间的欧式距离等于原始空间中的距离,即 ∣ ∣ z i − z j ∣ ∣ = d i j ||\mathbf{z}_i - \mathbf{z}_j|| = d_{ij} ∣∣zi−zj∣∣=dij。是不是很神奇?!
令 B = Z T Z ∈ R m × m B = Z^{T}Z \in \mathbb{R}^{m \times m} B=ZTZ∈Rm×m,其中 B B B为降维后样本的内积矩阵, b i j = z i z j b_{ij} = \mathbf{z}_i\mathbf{z}_j bij=zizj,有
d i 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} &= ||\mathbf{z}_i||^{2} + ||\mathbf{z}_j||^{2} - 2\mathbf{z}_i^T\mathbf{z}_j \\ &= b_{ii} + b_{jj} - 2b_{ij}\\ \end{aligned} dij2=∣∣zi∣∣2+∣∣zj∣∣2−2ziTzj=bii+bjj−2bij
此外,为便于讨论,我们令降维后的样本 Z Z Z被中心化,即 ∑ i = 1 m z i = 0 \sum_{i = 1}^{m} \mathbf{z_i} = 0 ∑i=1mzi=0。显然,矩阵 B B B的行与列之和均为零,即 ∑ i = 1 m b i j = ∑ j = 1 m b i j = 0 \sum_{i = 1}^{m}b_{ij} = \sum_{j = 1}^{m}b_{ij} = 0 ∑i=1mbij=∑j=1mbij=0。因此,可有
∑ i = 1 m d i j 2 = t r ( B ) + m b j j ∑ j = 1 m d i j 2 = t r ( B ) + m b i i ∑ i = 1 m ∑ j = 1 m d i j 2 = 2 m t r ( B ) \begin{aligned} \sum_{i = 1}^{m} d_{ij}^{2} &= tr(B) + mb_{jj} \\ \sum_{j = 1}^{m} d_{ij}^{2} &= tr(B) + mb_{ii} \\ \sum_{i = 1}^{m}\sum_{j = 1}^{m} d_{ij}^{2} &= 2m\ tr(B) \\ \end{aligned} i=1∑mdij2j=1∑mdij2i=1∑mj=1∑mdij2=tr(B)+mbjj=tr(B)+mbii=2m tr(B)
其中, t r ( ⋅ ) tr(\cdot) tr(⋅)表示矩阵的迹, t r ( B ) = ∑ i = 1 m ∣ ∣ z i ∣ ∣ 2 tr(B) = \sum_{i = 1}^{m}||\mathbf{z}_i||^{2} tr(B)=∑i=1m∣∣zi∣∣2。令,
d i ⋅ 2 = 1 m ∑ j = 1 m d i j 2 d ⋅ j 2 = 1 m ∑ i = 1 m d i j 2 d ⋅ ⋅ 2 = 1 m 2 ∑ i = 1 m ∑ j = 1 m d i j 2 \begin{aligned} d_{i\cdot}^{2} &= \frac{1}{m}\sum_{j = 1}^{m}d_{ij}^{2} \\ d_{\cdot j}^{2} &= \frac{1}{m}\sum_{i = 1}^{m}d_{ij}^{2} \\ d_{\cdot \cdot}^{2} &= \frac{1}{m^2}\sum_{i = 1}^{m}\sum_{j = 1}^{m}d_{ij}^{2} \\ \end{aligned} di⋅2d⋅j2d⋅⋅2=m1j=1∑mdij2=m1i=1∑mdij2=m21i=1∑mj=1∑mdij2
因此,综合上式,可得,
b i j = − 1 2 ( d i j 2 − d i ⋅ 2 − d j ⋅ 2 + d ⋅ ⋅ 2 ) b_{ij} = -\frac{1}{2}(d_{ij}^{2} - d_{i \cdot}^{2} - d_{j \cdot}^{2} + d_{\cdot \cdot}^{2}) bij=−21(dij2−di⋅2−dj⋅2+d⋅⋅2)
由此即可通过降维前后保持不变的距离矩阵 D D D求取内积矩阵 B B B。那么,我们又如何求取降维后的样本点呢?答案是特征值分解。
对矩阵 B B B做特征值分解,
B = V Λ V T B = V \Lambda V^{T} B=VΛVT
其中, Λ = d i a g ( λ 1 , λ 2 , … , λ d ′ ) \Lambda = diag(\lambda_1, \lambda_2, \dots, \lambda_{d^{'}}) Λ=diag(λ1,λ2,…,λd′)为特征值构成的对角矩阵, λ 1 ≥ λ 2 ≥ ⋯ ≥ λ d ′ \lambda_1 \ge \lambda_2 \ge \dots\ge \lambda_{d^{'}} λ1≥λ2≥⋯≥λd′, V V V表示特征向量矩阵。假定其中有 d ∗ d^{*} d∗个非零特征值,它们构成对角矩阵 Λ ∗ = d i a g ( λ 1 , λ 2 , … , λ d ∗ ) \Lambda_{*} = diag(\lambda_1, \lambda_2, \dots, \lambda_{d^{*}}) Λ∗=diag(λ1,λ2,…,λd∗),令 V ∗ V_{*} V∗表示相应的特征向量矩阵,则 Z Z Z可表达为
Z = Λ ∗ 1 2 V ∗ T Z = \Lambda_{*}^{\frac{1}{2}}V_{*}^{T} Z=Λ∗21V∗T
在现实生活中,为了有效降维,往往仅需降维后的距离与原始空间中的距离尽可能接近,而不必严格相等。此时,可取 d ′ ≪ d d^{'} \ll d d′≪d个最大特征值构成对角矩阵 Λ ~ = d i a g ( λ 1 , λ 2 , … , λ d ′ ) \tilde{\Lambda} = diag(\lambda_1, \lambda_2, \dots, \lambda_{d^{'}}) Λ~=diag(λ1,λ2,…,λd′),令 V ~ \tilde{V} V~表示相应的特征向量矩阵,则 Z Z Z可表达为
Z = Λ 1 2 V T ∈ R d ′ × m Z = \Lambda^{\frac{1}{2}}V^{T} \in \mathbb{R}^{d^{'} \times m} Z=Λ21VT∈Rd′×m
参考文献
周志华,《机器学习》
郭嘉丰,《无监督学习 —— 维度约简》