参考url:
https://jakevdp.github.io/PythonDataScienceHandbook/05.10-manifold-learning.html
流形学习是一种无监督评估器,它试图将一个低维度流形嵌入到一个高维度空间来描述数据集。
1、流形学习:‘HELLO’
2、多维标度法(MDS)
通过观察这个数据集,可以看到数据集中选中的x值和y值并不是对数据的最基本描述:即使放大、缩小或旋转数据,‘HELLO’仍然会很明显。
这说明x和y的值并不是数据间关系的必要基础特征。
这个例子中真正的基础特征是每个点与数据集中其他点的距离,表示这种关系的常用方法是关系(距离)矩阵:对于N个点,构建一个NxN的矩阵,元素(i,j)是点i和点j之间的距离。
多维标度法,可以将一个数据集的距离矩阵还原成一个D维坐标来表示数据集。
3、将MDS用于流形学习
既然距离矩阵可以从数据的任意维度进行计算,那么多维度标度法绝对非常实用。
以上就是使用流行学习评估器希望达成的基本目标:给定一个高维嵌入数据,寻找数据的一个低维表示,并保留数据间的特定关系。
在MDS的示例中,保留的数据是每队数据点之间的距离。
4、非线性嵌入:当MDS失败时
当嵌入为非线性时,即超越简单的操作集合时,MDS算法就会失效。
虽然数据点间基本的关系仍然存在,但是这次数据以非线性的方式进行了变换:它被包囊成了'S'形
如果尝试用一个简单的MDS算法来处理这个数据,就无法展示数据非线性嵌入的特征,进而导致我们丢失了这个嵌入式流形的内部基本关系特性
将MDS算法应用于非线性数据时无法还原其内部结构
即使是最优的二维线性嵌入也不能破解S曲线的谜题,而且还丢失了原始数据的y轴信息
5、非线性流形:局部线性嵌入
MDS算法构建嵌入时,总是期望保留相距很远的数据点之间的距离,但是如果修改算法,让它只保留比较接近的点之间的距离呢?
其中的每一条细小的线都表示在嵌入时会保留的距离。
左图是用MDS算法生成的嵌入模型,它会试图保留数据集中每对数据点间的距离,右图使用流行学习算法局部线性嵌入(LLE)生成的嵌入模型,该方法不保留所有的距离,而是仅保留邻节点间的距离——本例选择与每个点最近的100个邻节点。
在左图中,显然不可能在展开数据的同时,保证每条线段的长度完全不变,所以MDS算法会失效。
在右图中,通过某种方式将卷曲的数据展开,并且线段的长度基本保持不变,这是LLE算法的工作原理,它通过对成本函数的全局优化来反映这个逻辑。
6、关于流形方法的一些思考
由于流形学习在实际应用中的要求非常严格,因此除了在对高维数据进行简单的定向可视化之外,流形学习很少被正式使用。
流形学习与PCA算法的比较:
(1)在流形学习中,并没有好的框架来处理缺失值。相比之下,PCA算法中有一个用于处理缺失值的迭代方法。
(2)在流形学习中,数据中噪音的出现将造成流形‘短路’,并且严重影响嵌入结果。相比之下,PCA可以自然地从最重要的成分中滤除噪音。
(3)流形嵌入的结果通常高度依赖于所选取的邻节点的个数,并且通常没有确定的定量方式来选择最优的邻节点个数。相比之下,PCA算法中并不存在这样的问题。
(4)在流形学习中,全局最优的输出维度数很难确定。相比之下,PCA可以基于解释方差来确定输出的维度数。
(5)在流形学习中,嵌入维度的含义并不总是很清楚,而在PCA算法中,主成分有非常明确的含义。
(6)在流形学习中,流形方法的计算复杂度为O[N2]或O[N3],而PCA可以选择随机方法,通常速度更快。
流形学习有一个明显的优点,就是它具有保留数据中的非线性关系的能力。
可以先用PCA探索数据的线性特征,再用流形方法探索数据的非线性特征。