流形学习t-SNE,LLE,Isomap

做者|Andre Ye
编译|VK
来源|Analytics Indiamagpython

主成分分析是一种强大的方法,但它每每失败,由于它假设数据能够线性建模。PCA将新的特征表示为现有特征的线性组合,将每一个特征乘以一个系数。git

为了解决主成分分析的局限性,人们经过对具备不一样结构的数据进行应用而产生了各类各样的技术。然而,流形学习寻求一种能够推广到全部数据结构的方法。web

不一样的数据结构指的是数据中不一样的属性。例如,它多是线性可分的,也多是很是稀疏的。数据中的关系能够是相切的、平行的、包络的或正交的。PCA在很是特定的数据结构子集上工做得很好,由于它是在线性假设下工做的。算法

为了把事情放在上下文中,考虑300×300像素的头像。在完美的条件下,每一个图像都会完美地居中,但实际上,还须要考虑许多额外的自由度,例如灯光或脸部倾斜。若是咱们把一个头像看成90000维空间中的一个点,改变各类效果,好比倾斜头部或朝不一样的方向看,会使它在空间中非线性移动,即便它是同一类的同一个物体。网络

这种数据常常出如今现实世界的数据集中。除此以外,当PCA呈现倾斜分布、极值时,PCA可能会变得很糟糕(参见非线性PCA以得到解决方案)。咱们须要一种可推广的降维方法。数据结构

流形学习就是指这个任务。流形学习中有许多方法多是之前见过的,例如t-SNE和局部线性嵌入(LLE)。有许多文章和论文深刻到这些算法的技术和数学细节,但这篇文章将集中在通常的直觉和实现上。机器学习

注意,虽然有一些维度缩减的变体是有监督的(例如线性/二次判别分析),流形学习一般指的是无监督的降维,其中类别没有提供给算法(虽然可能存在)。函数

PCA试图建立几个线性超平面来表示维度,就像多元回归构造做为数据的估计,流形学习尝试学习流形,流形是多维空间中光滑的曲面。以下图所示,这些一般是经过对图像进行细微的变换而造成的。工具

而后,local linear patches能够提取与流形相切的部分。这些patches(补丁)一般有足够的数量,所以能够准确地表示流形。性能

这些流形不是由任何一个数学函数建模的,而是由几个小的线性补丁,因此这些线性邻域能够建模任何流形。虽然这可能不是明确的某些算法如何接近建模的流形,基本思想是很是类似的。

如下是流形学习算法的基本假设或方面:

  • 数据中存在着能够经过流形建模的非线性关系—曲面跨越多个维度,平滑,且不太“摇摆”(太复杂)。

  • 保持数据的多维形状并不重要。与其用特定的方向来“展开”或“投影”数据(如PCA)来保持数据的通常形状,不如执行更复杂的操做,如展开一个卷曲的条带或将球体从内向外翻转。

  • 流形建模的最佳方法是将曲面视为由几个邻域组成的曲面。若是每一个数据点都设法保持与全部其余点之间的距离,而只保留与它相邻的点之间的距离,则能够在数据中保持几何关系。

经过研究分解这个螺旋状数据集之间的不一样方法,能够很好地理解这个想法。左侧是一种更像PCA的方法,用于保存数据的形状,其中每一个点彼此链接。然而,右边是一种只计算数据点邻域之间的距离的方法。

这种对邻域以外的点的相对忽视会致使有趣的结果。例如,考虑这个瑞士轧辊数据集,它被卷绕在三维空间中,并被简化为二维的条形图。在某些状况下,这种效果并不理想。然而,若是这条曲线是图像中摄像机倾斜或音频质量受到外部影响的结果,流形学习经过巧妙地解开这些复杂的非线性关系给咱们带来了巨大的帮助。

在瑞士Roll数据集上,PCA甚至像Kernel-PCA这样的特殊变体都没法捕捉值的梯度。另外一方面,流形学习算法局部线性嵌入(LLE)也可以作到。

让咱们更详细地了解三种流行的流形学习算法:IsoMap、局部线性嵌入和t-SNE。

流形学习的最先探索之一是Isomap算法,即等距映射的缩写。Isomap寻求一种低维表示,以保持点之间的“距离”。距离是曲面距离的推广。所以,Isomap不是用毕达哥拉斯定理导出的距离公式来测量纯欧几里德距离,而是沿着发现的流形优化距离。

当在MNIST数据集上训练时,Isomap的性能优于PCA,显示了不一样类型的数字的正确分割。某些数字组之间的接近和距离揭示了数据的结构。例如,距离较近的“5”和“3”(在左下角)看起来确实很类似。

下面是Isomap在Python中的实现。因为MNIST是一个很是大的数据集,因此你可能只想在前100个训练示例中使用.fit_transform(X[:100])训练Isomap。

from sklearn.datasets import load_digits #mnist
from sklearn.manifold import Isomap
X, _ = load_digits(return_X_y=True) #加载数据

embedding = Isomap(n_components=2) #结果数据有2个维度,即“成分”
X_transformed = embedding.fit_transform(X) #拟合模型及变换

局部线性嵌入使用各类切线线性面片(如上图所示)来建模流形。它能够被认为是对每一个邻域进行局部PCA,生成一个线性超平面,而后全局比较结果以找到最佳的非线性嵌入。LLE的目标是以扭曲的方式“展开”或“解包”数据的结构,所以LLE一般会在中心具备更高密度。

注意,LLE在MNIST数据集上的性能相对较差。这极可能是由于MNIST数据集由多个流形组成,而LLE被设计用于处理更简单的数据集(如Swiss Roll)。它将一个函数表示为几个小的线性函数的策略可能没法很好地处理大型复杂的数据集结构。

假设数据集(X)已经加载,LLE的实现以下所示。

from sklearn.manifold import LocallyLinearEmbedding
embedding = LocallyLinearEmbedding(n_components=2) #2维
X_transformed = embedding.fit_transform(X)

t-SNE是高维可视化中最流行的选择之一,是t分布随机邻居嵌入的表明。该算法将原始空间中的关系转化为t分布,即小样本和相对未知标准差的正态分布。这使得t-SNE对流形学习中常见的局部结构很是敏感。因为它具备许多优势,所以被认为是一种可行的可视化方法。优势以下:

  • 它可以在多个尺度上揭示数据的结构。

  • 它揭示了存在于多个流形和簇中的数据

  • 在中心汇集点的趋势较小。

Isomap和LLE是展开单个、连续、低维流形的最佳工具。另外一方面,t-SNE关注数据的局部结构,试图汇集局部,而不是试图“展开”。这使得t-SNE在用多个流形去拟合高维数据方面占据了上风。它使用梯度降低法训练,并试图最小化分布之间的熵。从这个意义上讲,它几乎就像一个简化的、无监督的神经网络。

t-SNE很是强大,Isomap和LLE尝试展开数据,而t-SNE尝试汇集数据。对于像MNIST这样的高维多流形数据集,旋转和移位致使非线性关系,t-SNE的性能甚至比LDA更好,LDA还须要标签信息。

然而,t-SNE也有一些缺点:

  • t-SNE在计算上很是昂贵(比较上面图表中的运行时)。对于一百万个样本数据集,它可能须要几个小时,而PCA能够在几秒钟或几分钟内完成。

  • 该算法利用随机性(随机性)选取种子,若是种子放置不当,会增长算法的运行时间,下降性能。

  • 全局结构没有被显式地保留(即更强调聚类而不是展现全局结构)。然而,在sklearn的实现中,这个问题能够经过使用PCA初始化点来解决,PCA是专门为保持全局结构而构建的。

t-SNE也可在sklearn中实现:

from sklearn.manifold import TSNE
embedding = TSNE(n_components=2) ##2维
X_transformed = embedding.fit_transform(X)

t-SNE的做者Laurens van der Maaten说,当t-SNE结果很差时,应考虑如下几点:

做为健全性检查,尝试对数据运行PCA以将其减小到二维。若是这也给出了糟糕的结果,那么也许你的数据在一开始就没有很好的结构。若是PCA很好,但t-SNE不行,我很确定你作错了什么。

他为何这么说?流形学习不是PCA的另外一种变体,而是一种泛化。在PCA中表现良好的东西几乎能够保证在t-SNE或其余流形学习技术中表现良好,由于它们是泛化。

就像一个苹果也是一个水果(泛化)的对象同样,若是某个事物不能产生与它的泛化类似的结果,那么一般就是错误的。另外一方面,若是这两种方法都失败了,数据极可能很难建模。

关键点

  • 因为PCA是线性的,因此不能对非线性关系进行建模。

  • 非线性关系经常出如今数据集中,由于像光照或倾斜能够在欧几里德空间中非线性移动同一类的数据点。

  • 流形学习试图将PCA推广到各类数据集结构上进行降维,其主要思想是流形或连续曲面的建模应保持局部距离优先于全局距离。

  • Isomap试图保持流形曲面测量的距离,即不是在欧几里德空间的距离。

  • 局部线性嵌入能够看做是将流形表示为若干个线性块,其中PCA在其中执行。

  • t-SNE采用了更多的“聚类”方法,而不是“展开”方法,但仍然像其余流形学习算法同样,经过使用几率和t分布来优先保持局部距离。

附加技术阅读

原文连接:https://towardsdatascience.com/manifold-learning-t-sne-lle-isomap-made-easy-42cfd61f5183

欢迎关注磐创AI博客站:
http://panchuang.net/

sklearn机器学习中文官方文档:
http://sklearn123.com/

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/

相关文章
相关标签/搜索