流型学习
流形学习方法(Manifold Learning),简称流形学习,简单的讲,流形学习方法可以用来对高维数据降维,如果将维度降到2维或3维,我们就能将原始数据可视化,从而对数据的分布有直观的了解,发现一些可能存在的规律。
流型学习分类
目前,我们可以将流形学习方法分为线性的和非线性的两种。
- 线性的流形学习方法,如我们熟知的主成份分析(PCA)
- 非线性的流形学习方法,如等距映射(Isomap),拉普拉斯特征映射(Laplacian eigenmaps,LE),局部线性嵌入(Locally-linear embedding,LLE)。
t-SNE(t-distributed Stochastic Neighbor Embedding)
- t-SNE 是目前来说效果最好的数据降维与可视化方法。
- 应用场景:当我们想要对高维数据进行分类,又不清楚这个数据集有没有很好的可分性(即同类之间间隔小,异类之间间隔大),可以通过 t-SNE 投影到 2 维或者 3 维的空间中观察一下。如果在低维空间中具有可分性,则数据是可分的;如果在高维空间中不具有可分性,可能是数据不可分,也可能仅仅是因为不能投影到低维空间。
- 缺点:
- t-SNE 的计算复杂度很高,在数百万个样本数据集中可能需要几个小时,而 PCA 可以在几秒钟或几分钟内完成;
- Barnes-Hut t-SNE 方法(下面讲)限于二维或三维嵌入。
算法是随机的,具有不同种子的多次实验可以产生不同的结果。虽然选择 loss 最小的结果就行,但可能需要多次实验以选择超参数; - 全局结构未明确保留。这个问题可以通过 PCA 初始化点(使用
init ='pca'
)来缓解。
- Barnes-Hut t-SNE
Barnes-Hut t-SNE 主要是对传统 t-SNE 在速度上做了优化,是现在最流行的 t-SNE 方法,同时它与传统 t-SNE 还有一些不同:- Barnes-Hut 仅在目标维度为 3 或更小时才起作用。以 2D 可视化为主。
- Barnes-Hut 仅适用于密集的输入数据。稀疏数据矩阵只能用特定的方法嵌入,或者可以通过投影近似,例如使用
sklearn.decomposition.TruncatedSVD
Barnes-Hut 是一个近似值。使用 angle 参数对近似进行控制,因此当参数method="exact"
时,TSNE()使用传统方法,此时 angle 参数不能使用。 - Barnes-Hut 可以处理更多的数据。 Barnes-Hut 可用于嵌入数十万个数据点。
为了可视化的目的(这是 t-SNE 的主要用处),强烈建议使用 Barnes-Hut 方法。method="exact"
时,传统的 t-SNE 方法尽管可以达到该算法的理论极限,效果更好,但受制于计算约束,只能对小数据集的可视化。
sklearn TSNE参数
函数参数表:
parameters | 描述 |
---|---|
n_components | 嵌入空间的维度 |
perpexity | 混乱度,表示t-SNE优化过程中 |