作者|Andre Ye
编译|VK
起源|Analytics Indiamag

主成分剖析是一种弱小的办法,但它往往失败,因为它假如数据能够线性建模。PCA将新的特色示意为现有特色的线性组合,将每个特色乘以一个系数。

为了解决主成分剖析的局限性,人们通过对具备不同构造的数据进行利用而产生了各种各样的技术。然而,流形学习寻求一种能够推广到所有数据结构的办法。

不同的数据结构指的是数据中不同的属性。例如,它可能是线性可分的,也可能是十分稠密的。数据中的关系能够是相切的、平行的、包络的或正交的。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 #mnistfrom sklearn.manifold import IsomapX, _ = 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 LocallyLinearEmbeddingembedding = 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 TSNEembedding = 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散布来优先放弃部分间隔。

附加技术浏览

  • Isomap(http://web.mit.edu/cocosci/Pa...
  • Locally Linear Embedding(https://cs.nyu.edu/~roweis/ll...
  • t-SNE(https://www.jmlr.org/papers/v...

原文链接:https://towardsdatascience.co...

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

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

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