降维的意义
许多机器学习问题涉及训练实例的几千甚至上百万个特征,这不仅导致训练非常缓慢, 也让我们更加难以找到好的解决方案。 这个问题通常被称为维度的诅咒,所以有效的减少特征的数量会提高效率,加快训练。降维对于数据可视化也是非常有用的。 将维度降到两个(或三个) , 就可以在图形上绘制出高维训练集,所以降维是必要的。
综合上述,在训练模型之前降低训练集的维度,肯定可以加快训练速度,但这并不总是会导致更好或更简单的解决方案,它取决于数据集。
降维不可逆转,会损失一定的信息量
数据降维方法
投影
高维空间的所有训练实例实际上(或近似于)受一个低得多的低维子空间所影响,所以可以通过投影来改变特征空间。但在在许多情况下, 子空间可能会弯曲或转动,此时投影不是一个好的选择,可以选择流形学习。
流形学习
2D流形就是一个能够在更高维空间里面弯曲和扭转的2D形状。 更概括地说, d维流形
就是n(其中, d<n) 维空间的一部分, 局部类似于一个d维超平面。
许多降维算法是通过对训练实例进行流形建模来实现的, 这被称为流形学习。 它依赖于流形假设, 也称为流形假说, 认为大多数现实世界的高维度数据集存在一个低维度的流形来重新表示。
数据降维主要技术
PCA
PCA可以用来对线性数据进行显著降维,属于一种线性、 非监督、 全局的降维算法, 即便是高度非线性的数据集, 因为它至少可以消除无用的维度。 但是如果不存在无用的维度 , 那么使用PCA降维将会损失太多信息。
PCA假设数据集围绕原点集中,将数据投影到新的坐标轴,选择保留最大差异性(方差最大)的轴即可,新的第i条轴的单位向量就叫作第i个主成分。
两种方法
- 基于SVD分解协方差矩阵实现PCA算法
- 基于特征值分解协方差矩阵实现PCA算法
sklearn实现PCA,并求得主成分
参数:
- n_components代表新的特征空间维度
- whiten判断是否对降维后的数据的每个特征进行归一化,默认为False
- svd_solver即指定奇异值分解SVD的方法,有4个可以选择的值:{‘auto’, ‘full’, ‘arpack’, ‘randomized’}。randomized一般适用于数据量大,数据维度多同时