无监督学习:邻域嵌入方法(Neighbor Embedding)
1. 流形学习 (Manifold Learning)
流形学习(manifold learning)是机器学习、模式识别中的一种方法,在维数约简方面具有广泛的应用。它的主要思想是将高维的数据映射到低维,使该低维的数据能够反映原高维数据的某些本质结构特征。流形学习的前提是有一种假设,即某些高维数据,实际是一种低维的流形结构嵌入在高维空间中。流形学习的目的是将其映射回低维空间中,揭示其本质[1]。
如下图所示为一种形象的解释。
因为只有在同一维度中,欧氏距离才具有比较好的比较的意义,在上面这样的高维空间中用欧式距离并不能将不同的点进行很好的区别。在流形学习中认为上面这种情况实际上是将高维的数据硬塞进了一个低维的空间,所以这个时候我们应该将这个高维数据摊平,以便于后面的聚类或者接下来的有监督学习,更常用的是将它们进行可视化。
接下来将介绍局部线性嵌入(Locally Linear Embedding,LLE),拉普拉斯特征映射(Laplacian Eigenmaps)和t分布随机邻居嵌入(T-distributed Stochastic Neighbor Embedding,t-SNE)三种方法,这三种都是对高维数据进行降维的方法,。
2. 局部线性嵌入(Locally Linear Embedding,LLE)
如下图所示,首先对于某一个数据点
在这个式子中,对于某一个数据点
在找到了
需要注意的是在这里对于整个降维过程并没有一个显式的表达,加入我们不知道
当选择邻域的点数过少时,降维的效果并不好,可能因为无法表达点之间的关系;当邻域的点数过多时降维效果也不好,主要是因为这个方法的假设是基于局部线性的假设,当选择的邻域过大时,很有可能不满足局部线性的假设。
3. 拉普拉斯特征映射(Laplacian Eigenmaps)
这是一种基于图的方法,与之前无监督学习中的平滑性假设比较像。首先根据数据点之间的相似性建立一个图,比如说相似性大于某一个值就连接在一起,小于某个值就不连接。这个时候如下图所示
这个时候,两个点之间的距离就可以根据图上的连接来近似。
回顾之前的半监督学习,在这里我们的损失函数定义为如下图所示的形式
这里使用有标签的数据和无标签的数据,其中无标签的数据的那一项更像是一个正则项,它刻画了标签到底有多平滑。将它应用到我们这里
但是仅仅有这个表达式是不够的,因为我们只需要将所有的
4. t分布随机邻居嵌入(T-distributed Stochastic Neighbor Embedding,t-SNE)
上面的方法确实可以对高维的非线性数据进行降维,但是它们只强调了要将相似的数据放在一起,并没有强调要将不相关的数据之间彼此分开,所以常常会出现如下的现象
可以看到,相似的数据已经聚集在一起了,但是不同的数据也已经聚在了一起,所以性能有局限性,这个时候就需要 t-SNE 了。
具体的做法如下所示
对于降维之前的数据,这里计算量两点之间的相似度,并将相似度进行归一化,对于降维之后(要求的)数据点也是一样的。之后通过将两个之间的 KL 散度最小化得到降维之后的点的向量。
这里相似度的计算方法主要根据下面这种方式
其中原高维数据的相似性仍然根据 RBF 函数进行计算,这种距离的计算方式可以保证距离比较远的点之间的相似性可以快速下降;在介绍 t-SNE 的相似性计算方法之前首先介绍SNE相似性的计算方法。SNE的相似性的计算法与之前的高维数据间的相似性的计算法相同,但是 t-SNE 改用了下面的T分布的一种表达式,将两种计算相似性的方法的曲线进行比较我们可以知道,对于距离比较近的数据之间,它们经过计算相似性之后仍保持着较为相近的距离,但是距离较远的点会变得更远,所以在保证将相似的点放在一起的同时将不相识的点区分的较好。实验结果如下图所示
从上图可以看到不同数据之间区分的很开。
注意很少直接对高维数据进行t-SNE降维,因为计算高维数据之家你得相似性是十分困难的,因此首先利用常用的线性降维方法降维进行降维(如PCA),之后再利用t-SNE进行降维。
参考文献
[1]作者:Jason Gu https://www.zhihu.com/question/24015486/answer/26524937 知乎