数据可视化的最重要的目标之一就是获得一些点的远近的直观感觉。通常,我们通过画散点图来做这样的事情。对于某些分析而言,可能不能得到这些数据的点的形式,只是能得到它们之间的相似或不相似。当然就没有点可画。
即使数据是点的形式而不是距离,这些数据对于散点图可能也是无用的。对于某些类型的数据,测量两个点靠近程度的方室可能不是欧几里得距离。尽管散点图对于比较欧氏距离是方便的,但对于比较其它类型的点间距离或更为一般的相异度量,比如棋盘距离,就不是很有用。还有对于变量个数比较大的情况更是如此,除非可以用较小的维度表示。因此某种维度消减通常是必需的。
多维标度变换(multidimensional scaling,MDS)就是处理这类问题的一套方法。MDS并不需要原始数据,仅需要提供成对距离或相异度量构成的矩阵。
例1 随机产生四维空间中的10个点,得到它们之间的欧式距离矩阵,然后借助这个距离矩阵分别在2维,3维和4维空间重构10个点,保证尽可能它们之间的距离接近原始给定的距离。
X = [ normrnd(0,1,10,3), normrnd(0,.1,10,1) ];
D = pdist(X,'euclidean');
[Y,eigvals] = cmdscale(D);
[eigvals eigvals/max(abs(eigvals))]
maxerr4 = max(abs(D - pdist(Y))) % 精确重构
% 在3维空间中较好的重构
maxerr3 = max(abs(D - pdist(Y(:,1:3))))
% 在2维空间中较差的重构
maxerr2 = max(abs(D - pdist(Y(:,1:2))))
ans =
16.6355 1.0000
13.6867 0.8227
5.4325 0.3266
0.0106 0.0006
0.0000 0.0000
0.0000 0.0000
-0.0000 -0.0000
-0.0000 -0.0000
-0.0000 -0.0000
-0.0000 -0.0000
maxerr4 =
4.4409e-015
maxerr3 =
0.0114
maxerr2 =
2.2709