11.5 多维标度法(MDS)
一方面,PCA试图对保留下来的数据方差进行优化,而另一方面,MDS在降低维度的时候试图尽可能保留样本间的相对距离。当我们有一个高维数据集,并希望获得一个视觉印象的时候,这是非常有用的。
MDS对数据点本身并不关心,相反,它对数据点间的不相似性却很感兴趣,并把这种不相似性解释为距离。因此,MDS算法第一件要做的事情就是,通过距离函数d 0 对所有N 个k 维数据计算距离矩阵。它衡量的是原始特征空间中的距离(大多数时候都是欧氏距离)。
现在,MDS试图在低维空间中放置数据点,使得新的距离尽可能与原始空间中的距离相似。由于MDS经常用于数据可视化,所以低维空间的维度大多数时候都是2或3。
让我们看看下面这个在五维空间中包含三个样本的简单数据。其中两个数据非常接近,而另外一个明显不同。我们希望在三维和二维空间中把它们可视化展现出来,如下所示:
>>> X = np.c_[np.ones(5), 2 * np.ones(5), 10 * np.ones(5)].T >>> print(X) [[ 1. 1. 1. 1. 1.] [ 2. 2. 2. 2. 2.] [ 10. 10. 10. 10. 10.]]
采用scikit-learn的manifold 包中的MDS 类,我们先指定要把X 转换到一个三维空间中,如下所示:
>>> from sklearn import manifold >>> mds = manifold.MDS(n_components=3) >>> Xtrans = mds.fit_transform(X)
要想在二维空间中可视化,我们需要使用n_components 。
在下面这两个图里可以看到结果。三角形点和圆形点比较接近,而星形点则离得很远:
来看一下更复杂一点的Iris数据集。我们之后会用它来对PCA和LDA进行比较。在Iris数据集里每个花朵都包含4个属性。采用之前的代码,我们可以把它映射到一个三维空间中,同时尽可能保留每个花朵之间的相对距离。在前面那个例子里,我们并没有指定任何距离衡量方法,所以MDS会默认使用欧氏距离。这意味着,根据这4个属性判定的不同花朵,在MDS尺度下的三维空间中也应该相互远离。而相似的花朵应该距离较近,如下图所示:
相反,用PCA把维度归约到三维和二维的时候,我们可以看到属于同一类别的花朵,会有更大范围的扩散,如下图所示:
当然,要使用MDS,我们需要理解每一个特征;或许我们所使用的特征并不能用欧式距离进行比较。例如,一个类别变量,即使它被编码为一个整数(0=红色圆圈、1=蓝色星形、3=绿色三角形),也无法用欧氏距离比较(红色离蓝色的距离比离绿色更近?)。
我们了解这个问题之后,就会发现MDS是一个揭示数据相似性的有用工具,这在原始特征空间中很难看到。
深入了解MDS后,我们发现它并不是一个算法,而是一类不同的算法,我们只是使用了其中的一个而已。PCA也是如此。如果你发现无论PCA还是MDS都不能解决你的问题,那就要看一下其他流形的学习算法了,可以在Scikit-lean包中找到它们。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论