机器学习笔记之——降维(一)MDS

MDS(Multiple Dimensional Scaling)


关键思想:降维前后两点距离不变

假设 m 个 d 维样本在原始空间的距离矩阵为 D ∈ R m × m D\in \mathbb{R}^{m\times m} DRm×m, 降维后的样本矩阵 Z ∈ R d ′ × m Z\in \mathbb{R}^{d'\times m} ZRd×m, 其中 d ′ ≪ d d'\ll d dd, 每一列 z i z_i zi 表示一个降维后的样本。

B = Z T Z ∈ R m × m B=Z^TZ\in \mathbb{R^{m\times m}} B=ZTZRm×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=zizj2=zi2+zj22ziTzj=Bii+Bjj2Bij(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=1mBij=j=1mziTzj=ziTj=1mzj=ziT0=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=1mBij=i=1mziTzj=(i=1mzi)Tzj=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=1mDij2=i=1m(Bii+Bjj2Bij)=i=1mBii+i=1mBjj2i=1mBij=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=1mDij2=j=1m(Bii+Bjj2Bij)=j=1mBii+j=1mBjj2j=1mBij=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=1mj=1mDij2=i=1m(mBii+tr(B))=mi=1mBii+i=1mtr(B)=mtr(B)+mtr(B)=2mtr(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/mj=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)=2mi=1mj=1mDij2=2mm2i=1mj=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=mj=1mDij2tr(B)=mj=1mDij2mtr(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=mi=1mDij2tr(B)=mi=1mDij2mtr(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+BjjDij2=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 zizj2也就确定了。 现在我们只要找到一个矩阵 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 zizj2 是等于 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=[v1vm]λ100λmv1TvmT=λ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ΛVT, 可以得出 Z Z Z 为:
Z = Λ ∗ 1 / 2 V ∗ T Z=\Lambda_*^{1/2}V_*^T Z=Λ1/2VT 可以很简单地验证, 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/2VT)TΛ1/2VT=VΛ1/2Λ1/2VT=VΛVT=B, 至此,我们就找到了满足条件的 Z Z Z。这样得到的向量 z i ∈ R k z_i \in \mathbb{R}^k ziRk 是 k 维的,有时候 k 还是很大。在实际中,为了有效地降维,不要求降维前后距离严格相等,只要距离大致接近即可。因此可以只取 d ′ d' d 个最大的特征值,相当于在公式(6)中只取前面 d ′ d' d 个项,将后面较小的项舍弃,其中 d ′ ≪ d d' \ll d dd。这样得到的 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,,zmRd 是降维后的向量。

具体算法过程如下:

输入:距离矩阵 D, 降维后的维度 d'
过程:
    1. 根据公式(5)计算出内积矩阵 B
    2. 对矩阵 B 做特征值分解
    3. 取 B 最大的 d' 个特征值及特征向量,按公式(7)计算出 Z
输出:Z, Z 的每一列为样本降维后的结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值