其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。
数据降维问题
在很多应用中,数据的维数会很高。以图像数据为例,我们要识别32x32的手写数字图像,如果将像素按行或者列拼接起来形成向量,这个向量的维数是1024。高维的数据不仅给机器学习算法带来挑战,而且导致计算量大,此外还会面临维数灾难的问题(这一问题可以直观的理解成特征向量维数越高,机器学习算法的精度反而会降低)。人所能直观看到和理解的空间最多是3维的,为了数据的可视化,我们也需要将数据投影到低维空间中,因此就需要有数据降维这种算法来完成此任务。
例如,下图是将0-9这10个手写数字投影到3维空间中后的结果(来自SIGAI云端实验室)。从图中我们可以清晰的看到这些手写数字在3维空间中的分布,每一个类一般聚集在某一区域内。例如7位于空间的左上角,而6则位于右下角。
在机器学习算法中,数据降维算法是一个大家族,既有有监督学习的版本,也有无监督学习的版本;既有线性的降维算法,也有非线性的降维算法。
最经典的数据降维算法要数PCA(主成分分析),这是一种线性降维算法,而且是无监督的,它通过线性变换将样本投影到低维空间中:
y = Wx
其中,x是输入向量,为n为向量,W是m行n列的投影矩阵,将x左乘它,可以得到一个m维的结果向量y。一般情况下,m远小于n,这样就将一个向量变换成另外一个更低维的向量,从而完成数据降维。PCA的矩阵W是通过样本学习得到的,其依据是最小化重构误差。
PCA是一种线性降维技术,对于非线性数据具有局限性,而在实际应用中很多时候数据是非线性的。此时可以采用非线性降维技术,它们都通过一个非线性的映射函数将输入向量x映射成一个更低维的向量y:
问题的关键是这个非线性映射函数如何得到,一般来说,它要使得数据降维之后保持之前的某些结构信息。非线性降维算法的典型代表有核PCA(KPCA,核主成分分析),神经网络(如自动编码器),流形学习等。在本文中我们重点介绍流形学习算法。
什么是流形?
流形(manifold)是几何中的一个概念,它是高维空间中的几何结构,即空间中的点构成的集合。可以简单的将流形理解成二维空间的曲线,三维空间的曲面在更高维空间的推广。下图是三维空间中的一个流形,这是一个卷曲面:
2维空间中的曲线,3维空间中的曲线可以看做是2维和3维空间中的1维流形,因为曲线是1维的。而3维空间中的曲面可以看做是2维的流形,因为曲面是2维的。n维空间中的m维流形就是具有m维几何形状的一个子集,在这里,m小于n。
在一般的流形学习算法中,我们并没有过多的用到微分几何,拓扑等复杂的数学理论,因此在本文中我们不对流形的数学理论做过多的阐述。
什么是流形学习?
很多应用问题的数据在高维空间中的分布具有某种几何形状,即集中在某个低维的流形附近。对于前面所说的32x32的手写数字图像,数字7的图像在1024维空间中应该聚集在某一个形状的几何体周围(如带状区域,球面),其他的类别也是如此。
流形学习(manifold learning)假设数据在高维空间的分布位于某一更低维的流形上,基于这个假设来进行数据的分析。对于降维,要保证降维之后的数据同样满足与高维空间流形有关的几何约束关系。除此之外,流形学习还可以用实现聚类,分类以及回归算法。
假设有一个N维空间中的流形M,即M为N维欧氏空间的一个真子集:
流形学习降维算法要实现的是如下映射:
其中n<<N。即将N维空间中流形M上的点映射为n维空间中的点。下面介绍几种典型的流形降维算法,包括局部线性映射,拉普拉斯特征映射,局部保持投影,等距映射。
局部线性嵌入
局部线性嵌入[1](简称LLE)的核心思想是每个样本点都可以由与它相邻的多个点的线性组合(体现了局部线性)来近似重构,这相当于用分段的线性面片近似代替复杂的几何形状,样本投影到低维空间之后要保持这种线性重构关系,即有相同的重构系数。
假设数据集由l个D维向量组成,它们分布在D维空间中的一个流形附近。每个数据点和它的邻居位于或者接近于流形的一个局部线性片段(平面,体现了线性,类似于微积分中的以直代曲的思想)上,即可以用邻居点的线性组合来重构,组合系数刻画了局部面片的几何特性:
权重