多维尺度分析法MDS
参考链接:https://www.bilibili.com/video/BV11U4y1A71u
定义
PCA:从本身数据的分布角度去降维。只考虑了数据本身的分布特性,数据点之间的相对位置关系没有考虑。
MDS:多维尺度分析,基本原理是根据数据集的相似程度,计算各数据点在K维空间中的位置,要求将高维数据(d*m)转换为低维数据(d‘*m)后,样本点的相对位置关系不变。
但是上式没有唯一解:
- 对点做平移,点之间的距离不变
- 对点旋转,翻转,点之间的距离不变
但是直接求Z比较困难,转而求B=Z(转置)Z,Z(d’*m),B(m*m)
所以可以通过B去求Z,那么我们只需要求到B即可。
要使得求和(||Zi-Zj||-dij)的平方最小即
得到四个式子:
解方程可得:
MDS一般步骤
- 利用给定数据计算距离矩阵(不相似矩阵)D
- 计算降维后矢量z的互相关矩阵B
- 对B进行特征值分解,选取较大的若干特征值与特征矢量获取Z
案例
学科
C=[1 0.439 0.41 0.288 0.329 0.248;
0.439 1 0.351 0.354 0.32 0.329;
0.41 0.351 1 0.164 0.19 0.181;
0.288 0.354 0.164 1 0.595 0.47;
0.329 0.32 0.19 0.595 1 0.464;
0.248 0.329 0.181 0.47 0.464 1];
Language={'盖尔语','英语','历史','算术','代数','几何'};
n=size(C,1);
H=eye(n,n)-ones(n,1)*ones(1,n)/n;
B=H'*C*H;
[eigv,lamda]=eig(B);
MDS=-eigv(:,[1,5])*sqrt(lamda([1,5],[1,5]));
scatter(-MDS(:,1),MDS(:,2))
hold on;
for k=1:n
text(-MDS(k,1),MDS(k,2),Language{k});
end
可视化结果:
中国城市距离
d=xlsread('国内城市间距离里程表.xlsx','D3:BA52');
[d1,City]=xlsread('国内城市间距离里程表.xlsx','D2:BA2');
A=-d.^2/2;
n=size(A,1);
H=eye(n,n)-ones(n,1)*ones(1,n)/n;
B=H'*A*H;
[eigv,lamda]=eig(B);
MDS=-eigv(:,1:2)*sqrt(lamda(1:2,1:2));
scatter(MDS(:,2),MDS(:,1));
hold on;
for k=1:n
text(MDS(k,2),MDS(k,1),City{k});
end