【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 14—Dimensionality Reduction 降维

Lecture 14 Dimensionality Reduction 降维

14.1 降维的动机一:数据压缩 Data Compression

现在讨论第二种无监督学习问题:降维。 降维的一个作用是数据压缩,允许我们使用较少的内存或磁盘空间,也加快算法速度。

举例:
假设用两个特征描述同一个物品的长度,x1单位是厘米cm,x2单位是英寸inches。这将导致高度冗余,所以需要减到一维。


将数据从三维降至二维: 将三维向量投射到一个二维的平面上,强迫使得所有的数据都在同一个平面上,降至二维的特征向量。


这个过程可以用于把任何维度的数据降到任何想要的维度。事实工作中,不同的团队可能会给你几百或成千上万的特征,其中很容易出现冗余特征。

14.2 降维的动机二:数据可视化 Visualization

降维可以帮助我们将高维数据可视化。
假使有关于许多不同国家的数据,每一个特征向量都有 50 个特征(如 GDP,人均 GDP,平均寿命等)。如果要将这个 50 维的数据可视化是不可能的。将其降至 2 维,便可将其可视化了。

 

 

这样做的问题在于,降维算法只负责减少维数,新产生的特征的意义就必须由我们自己去发现了。 

14.3 PCA问题的公式描述 Principal Component Analysis Problem Formulation

主成分分析(PCA)是最常见的降维算法。PCA 要做的是找到一个方向向量(Vector direction),当把所有的数据都投射到该向量上时,投射平均均方误差尽可能小。方向向量是一个经过原点的向量,投射误差是从特征向量向该方向向量所作垂线的长度。如下图:


主成分分析问题,要将n维数据降至k维,目标是找到向量u(1) ,u(2) ,...,u(k) 使得总的投射误差 Projected Error 最小:


主成分分析与线性回归的比较:

主成分分析最小化的是投射误差,不作任何预测。

线性回归最小化的是预测误差,目的是预测结果。
上图中,左边的是线性回归的误差(垂直于横轴投影),右边则是主要成分分析的误差(垂直于斜线投影)。

PCA 将n个特征降维到k个,可以用来进行数据压缩,如果 100 维的向量最后可以用 10维来表示,那么压缩率为 90%。同样图像处理领域的 KL 变换使用 PCA 做图像压缩。但 PCA 要保证降维后数据的特性损失最小。


PCA 的一大好处是对数据进行降维处理。我们可以对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度保持原有数据的信息

PCA 的一个很大的优点是,它是完全无参数限制的。在 PCA 的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。 但这同时也是缺点,如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。

14.4 PCA算法 Principal Component Analysis Algorithm

使用PCA 从 n 维减少到 k 维:
1)均值归一化。计算出所有特征的均值,然后令 xj = xj − μj 。如果特征是在不同的数量级上,还需要将其除以标准差 σ2

2)计算协方差矩阵(covariance matrix) sigma Σ

3)计算协方差矩阵 Σ 的特征向量(eigenvectors):
在 Matlab 里我们可以利用奇异值分解(singular value decomposition)来得到特则向量矩阵 U,调用方式为 [U, S,V] = svd(sigma) 。(注:函数返回的矩阵 S 也有用,后续会讲到

对于一个 n × n 维度的矩阵,U 是一个由 “与数据之间最小投射误差的方向向量” 构成的矩阵。 如果希望将数据从 n 维降至 k 维,只需要从 U 中选取前 k 个向量,获得一个 n × k 维度的矩阵,用Ureduce 表示,然后通过如下计算获得要求的新特征向量 z(i):

其中 Ureduce 为 n x k 维,x 为 n × 1 维,因此结果 z(i) 为 k × 1 维。 注:我们不对方差特征进行处理。

14.5 重建原始特征 Reconstruction from Compressed Representation

给定压缩后的低维数据 z(i) 怎么反向得到高维的 x(i) 数据? 即:如何根据压缩后的数据去重建原始数据?

当 x 为 2 维,z 为 1 维,z = UreduceT * x, 则相反的方程为: xappox = Ureduce ⋅ z,  这时有 xappox ≈ x。

14.5 选择主成分的数量k Choosing The Number Of Principal Components

主要成分分析最小化投射的平均均方误差,怎么选择适当降维目标 k 值(即主成分的数量)呢?

我们的目标是:在『平均均方误差与训练集方差的比例尽可能小』的情况下,选择尽可能小的 k 值。

如果希望比例小于 1%, 就意味着原本数据的偏差有 99% 都保留下来了。 另外,还可以使用5%(对应95%的偏差), 10%(对应90%的偏差) 这些比例。

通常95%到99%是最常用的取值范围。(注:对于许多数据集,通常可以在保留大部分差异性的同时大幅降低数据的维度。这是因为大部分现实数据的许多特征变量都是高度相关的。)

具体做法:

a) 先令 k = 1,然后进行主要成分分析,获得Ureduce 和z,然后计算比例是否小于1%。
b) 如果不是的话,再令k = 2,如此类推,直到找到可以使得比例小于 1%的最小k 值。

事实上还有一些更好的方式,在 Matlab中有一个“svd”函数。 其中,SVD代表为奇异值分解(singular value decomposition),函数调用 [U, S, V] = svd(sigma) 返回一个与 Σ(即ppt中的Sigma) 同大小的对角矩阵 S(由Σ的特征值组成),两个酉矩阵 U 和 V ,且满足 Σ = U * S * V'。若 A 为 m×n 矩阵,则 U 为 m×m 矩阵,V 为 n×n 矩阵。奇异值在 S 的对角线上,非负且按降序排列,对角线之外的其它元素都是 0。

对于方阵 Σ,有

因为我们的目的是从 n 维降到 k 维,也就是选出这 n 个特征中最重要的 k 个,也就是选出特征值最大的 k 个。所以得到矩阵 S 后,我们可以直接用它来计算平均均方误差与训练集方差的比例,而不用一遍遍重复计算误差和方差:

14.7 PCA的应用建议 Advice for Applying PCA

假使我们正在针对一张 100×100 像素的图片进行某个计算机视觉的机器学习,即总共有 10000 个特征。使用 PCA 算法的步骤如下:

1. 运用 PCA 将数据压缩至 1000 个特征
2. 对训练集运行学习算法
3. 在预测时,采用之前学习得到的 Ureduce 将输入的特征 x 转换成特征向量 z ,然后再进行预测

注: 如果有交叉验证数据集,也采用对训练集学习而来的Ureduce

正确用法,压缩和可视化:

错误的用法:

1. 将其用于减少过拟合(通过减少特征的数量)

这样做非常不好,不如使用正则化处理。原因在于 PCA 只是近似地丢弃掉一些特征,它并不考虑任何与结果变量有关的信息,因此可能会丢失非常重要的特征。而当进行正则化处理时,会考虑到结果变量,不会丢掉重要的数据。

2. 在项目开始时便将PCA考虑进去

最好还是从所有原始特征开始,只在有必要的时候(算法运行太慢或者占用太多内存)才考虑采用 PCA。

 

部分公式参考: Rachel-Zhang

posted @ 2019-01-04 00:03  马小豆包  阅读(1983)  评论(0编辑  收藏  举报