Skip to content
Bo's Blog
Go back

Coursera机器学习笔记(十四) - 数据降维


一. 数据降维

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

二. PCA

2.1 什么是PCA

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

2.2 PCA算法

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

三. 使用PCA

3.1 恢复原数据

数据降维候, 我们可以通过Xapprox(1)=Ureduce.z(1)X_{approx}^{(1)}=U_{reduce}.z^{(1)}来的得到原始数据的近似值.

3.2 选择合适的维度

那么该如何选择k的值?一般选择一个最小的k并且满足下图中的公式. 我们可以使用下左图中的算法来选择k的值, 但是这样做效率太低;更好的选择是使用下右图中的方法, 在调用一次SVD之后, 我们只需要找到一个最小的k并且满足i=1kSiii=1nSiige0.99\frac{\sum_{i=1}^kS_{ii}}{\sum_{i=1}^nS_{ii}} ge 0.99即可. 即:

3.3 PCA总结

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


Share this post on:

Previous Post
CS229机器学习笔记(十) - Learning Theory
Next Post
CS229机器学习笔记(八)-SVM之软间隔