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