14.降维
14 降维
14.1 降维的动机一:数据压缩
下面介绍第二种无监督学习问题:降维。降维的一个作用是数据压缩,可以减小数据占用内存和磁盘的空间,还可以加快算法速度。
例如:假设我们用两个特征来描述同一个物体的长度,

将数据从三维降至二维:观察数据点的分布大都集中在一个二维平面上,我们可以将三维向量投影到一个二维平面上,降至二维的特征向量。

事实工作中,不同的团队可能会给你几百或成千上万的特征,其中很容易出现冗余特征。这时候就可以使用降维减少特征冗余。
14.2 降维的动机二:数据可视化
降维的另一个作用是数据可视化,可以帮助我们优化学习算法。
例如:我们有关于每个国家的数据,特征向量


将数据降维至低维度,这样我们就可以将数据进行可视化,并更好的理解这些数据。但这样做新特征的意义通常需要由我们自己去发现。

14.3 PCA问题的公式描述
对于降维算法,比较常见的是主成分分析方法(PCA)。
例如,我们有二维的特征向量,我们想把它降维至一维。即我们要找一条投影直线完成降维。PCA做的就是找一个低维的直线/平面/其他维的子空间,然后将数据投影在上面,使蓝色线段长度平方最小。这些蓝色线段长度也被称为投影误差。如图:PCA会更倾向于找到红色的直线,因为相比于粉色直线,红色线的投影误差更小。

PCA问题:将n维数据降至k维,目标是找到向量

PCA 与 线性回归 的比较:
PCA最小化的是投射误差(垂直距离),不作任何预测。线性回归最小化的是预测误差(竖直距离),目的是预测结果。如图:左边的是线性回归的误差(垂直于横轴投影,预测值与真实标签的差值),右边则是主要成分分析的误差(垂直于斜线投影)。

14.4 PCA算法
在进行PCA算法之前,需要数据预处理,进行特征缩放/均值归一化。
1)均值归一化
计算出所有特征的均值,然后令

对于PCA算法,我们需要找到一个低维子空间,用来投影数据。那么如何找到低维子空间的向量

2)计算协方差矩阵sigma
这里协方差矩阵

3)计算协方差矩阵
我们可以利用奇异值分解(singular value decomposition)来得到特则向量矩阵 U,调用方式为 [U, S,V] = svd(sigma) 。我们想要从n维降至k维,那么就取矩阵U的前k列作为一个新的矩阵


14.5 重建原始特征
如何从压缩后的低维表示
例如:原始数据

14.6 选择主成分的数量k
主成分分析最小化投射的平均均方误差,怎么选择适当降维目标 k 值(即主成分的数量)呢?我们的目标是:在『平均均方误差与总变差的比例尽可能小』的情况下,选择尽可能小的 k 值。
我们定义平均均方投影误差,总变差(也可以理解为样本和全零点之间的距离)如下:如果希望比例小于 1%, 就意味着原本数据的偏差有 99% 都保留下来了。
通常95%到99%是最常用的取值范围。(注:对于许多数据集,通常可以在保留大部分差异性的同时大幅降低数据的维度。这是因为大部分现实数据的许多特征变量都是高度相关的。)

具体的做法是:
我们可以从k=1开始,然后进行主成分分析,计算得到
但上面的方法是低效的。还有更好的方法,我们进行奇异值分解时返回了一个矩阵


14.7 PCA的应用建议
假设我们有m张100*100像素的图片,即特征向量
注意:映射关系只能在训练集上运行PCA学习得到,验证集和测试集也采用对训练集学习得来的

正确用法:下图总结了PCA的应用以及在各应用上如何选择k的值:

补充:PCA可以加快算法运行速度。
错误用法:
1.使用PCA减少特征的数量,从而用于减少过拟合。
这样做非常不好的,不如使用正则化处理。原因在于 PCA 只是近似地丢弃掉一些特征,它并不考虑任何与结果变量

2.在项目开始时,就将PCA考虑在项目计划中。
最好还是从所有原始特征开始,只在有必要的时候(算法运行太慢或者占用太多内存)才考虑采用 PCA。因为PCA会影响模型精确度。
