返回介绍

11.5 多维标度法(MDS)

发布于 2024-01-30 22:34:09 字数 1998 浏览 0 评论 0 收藏 0

一方面,PCA试图对保留下来的数据方差进行优化,而另一方面,MDS在降低维度的时候试图尽可能保留样本间的相对距离。当我们有一个高维数据集,并希望获得一个视觉印象的时候,这是非常有用的。

MDS对数据点本身并不关心,相反,它对数据点间的不相似性却很感兴趣,并把这种不相似性解释为距离。因此,MDS算法第一件要做的事情就是,通过距离函数d 0 对所有Nk 维数据计算距离矩阵。它衡量的是原始特征空间中的距离(大多数时候都是欧氏距离)。

现在,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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文