
- 课程地址:Dimensionality Reduction
- 课程Wiki:wiki
- 课件:PPT PDF
一. 数据降维
对于如下图所示的二维特征, 我们可以找到一条直线, 将所有的点投射到这条直线上, 这样就将二维的数据降到了一维, 得到一个新的特征. 降维不仅可以让我们节省空间, 更重要的是可以让学习算法运行的更快.
同样的, 可以将三维数据降到二维数据.
降维也可以更好地可视化数据. 如下图的例子, 这里一共有6个特征, 该如何更好地展示这些数据?
上面的数据不利于我们对数据进行可视化, 但是通过降维之后, 我们得到如下的数据,
这样就可以轻松地描绘出这些数据了.

二. PCA
2.1 什么是PCA
PCA(主成分分析, Principal components analysis)是用来对数据降维的非监督学习算法. 假设我们有如下图所示的数据, 我们希望将数据降到一维, 那么PCA是如何找到那条合适的直线?
也许下面红色的线比较适合, 因为每个点投影到这条直线的距离都非常小.
相反地, 每个点投影到下图中的粉色线的距离都非常大.
PCA就是找到一条直线, 使得每个样本到这条直线的投影距离(或者叫投射误差)最小.
通过上面的内容也许会让我们想到线性会对, 但PCA和线性回归是完全不同的两个算法. 在线性回归中(下左图), 我们想要的是能够拟合数据的一条直线, 最小化的是两点之间的差;而在PCA中我们最小化的是点到直线的距离(注意下右图中点垂直于线的距离). 并且, 在线性回归中, 有一个标签;而在PCA中所有的都是特征.


2.2 PCA算法
在使用PCA之前, 我们需要对数据进行feature scaling/mean normalization处理.
在PCA中, 我们需要计算的就是向量和新的特征.
首先我们需要计算出矩阵, 然后使用奇异值分解(sigular value decomposition)来计算. 我们需要的就是的矩阵, 如果我们需要将数据从n维降到k维, 取U的前k列, 记为.
最后通过如下的方法得到.
下图是对PCA的总结.

三. 使用PCA
3.1 恢复原数据
数据降维候, 我们可以通过来的得到原始数据的近似值.

3.2 选择合适的维度
那么该如何选择k的值?一般选择一个最小的k并且满足下图中的公式.
我们可以使用下左图中的算法来选择k的值, 但是这样做效率太低;更好的选择是使用下右图中的方法, 在调用一次SVD之后, 我们只需要找到一个最小的k并且满足即可.
即:

3.3 PCA总结
注意, 不要使用PCA来解决过拟合的问题.
在使用PCA之前应该考虑先使用原始数据, 如果使用原始数据不能达到效果, 再考虑使用PCA.
