理论推导可以参看图像降维之MDS特征抽取方法 样例来自Multidimensional scaling
MDS的理论推导已经有很多了,基本上来自周志华老师的西瓜书,但其中的细节还有许多不明白,因此希望通过matlab实例来理清所有脉络。
输入数据是距离矩阵D,而不是原始的m个d维向量,说明有数据的信息量缺失,但它们的相对位置关系是明确的。实例中的距离矩阵如下: 也就是有4组数据,但它们的维度不知道,姑且认为较大吧,我们的任务是找4组二维的数据 Z 4 × 2 Z_{4\times 2} Z4×2,让它们间的距离和上述距离相等。
通过两者距离相等的关系,我们希望可以求出Z的内积矩阵 B = Z Z T B=ZZ^T B=ZZT的各个元素(这里和西瓜书不一样,因为这里的Z由行向量组成,每行表示一组数据),具体的公式有点复杂: b i j = − 1 2 ( d i s t t i j 2 − d i s t t 2 i . − d i s t t 2 . j + d i s t 2 ) b_{ij}=-\frac{1}{2}(distt^2_{ij}-distt^2{i.}-distt^2{.j}+dist^2) bij=−21(disttij2−distt2i.−distt2.j+dist2) 但幸运的是,这都是纸老虎,在matlab具体计算的时候,其实各部分很简单,详见后面matal代码部分。
因为 B m × m B_{m\times m} Bm×m是是对称阵,可以得到m个特征值和特征向量(这里西瓜书写的是原数据的维度d,应该是不对的),特征向量从大到小排序: B = V Λ V T = V Λ 1 / 2 ( V Λ 1 / 2 ) T = Z Z T B=V \Lambda V^T=V \Lambda ^{1/2} (V\Lambda ^{1/2})^T=ZZ^T B=VΛVT=VΛ1/2(VΛ1/2)T=ZZT 所以 Z m × m = V Λ 1 / 2 Z_{m\times m}=V\Lambda^{1/2} Zm×m=VΛ1/2。 为了实现降维,我们提取前d’个特征值和特征向量,即: V ∗ = V m × d ′ V_*=V_{m\times d'} V∗=Vm×d′, Λ ∗ = Λ d ′ × d ′ \Lambda_*=\Lambda_{d'\times d'} Λ∗=Λd′×d′。得到 Z m × d ′ = V ∗ Λ ∗ 1 / 2 Z_{m\times d'}=V_*\Lambda_*^{1/2} Zm×d′=V∗Λ∗1/2
结果如下:
Z剔除了部分信息后,内积矩阵与B是有差距的,但总体可以接受,最后再比较Z的4组样本间的两两距离:
可以看出,整体效果还是很好的!