MDS 多维标度法

       现在有一些点,把他们表示成矩阵X,然后很容易就能求出他们的距离矩阵D。反过来,给出距离矩阵求点,就不是那么容易的事。这个问难我初中就觉得很难,最近机器学习课上,老师意外的讲到了一个算法CMDS,解决了我的问题。

      Multidimensional scaling (MDS), 说白了就是给你距离矩阵算点,我们知道这有无数个解(如果有解)。matlab和octave都有内置算法,cmdscale。因为我最讨厌只讲理论不实践的人,当然没办法实验的除外,比如爱因斯坦偶像。所以我就使用octave实现了一下mds。

      具体算法以及为何这么算,见github。我没有办法,在这里把公式全部打出来。下面是算法核心:

       另外这个算法不局限于从距离算点。而且不一定是欧式距离。在机器学习中,有这样一种情形:有很多数据,都是关于某些物体的相似度(距离),我们抽取一些特征,把这些特征在低维空间表示。比如有100种酒,品酒师给出两酒之间的相似程度,然后使用mds算法,算出向量矩阵,一般维数都会降低不少(也就是可以用作降维)。在此基础上统计研究,就方便多了。

      来看一个结果,多么美丽! 刚开始我以为得出的结果只会旋转,没想到还会镜像。。mds_mirror

 

链接:

  1. 台湾清华大学课程