一、引入
主成分分析(PCA)是一种降维算法,能大大加速你的无监督特征学习算法。更重要的是,理解PCA能让我们后面实现白化,这是一个对所有算法适用的重要的预处理步骤。
假设你在图像上训练你的算法。不过输入稍微有点冗余,因为图像中相邻的像素值是高度相关的。具体来说,假设我们在16*16的灰度图像块上训练。那么x∈R256是256维的向量,一个特征xj对应着图像中每个像素强度。由于相邻像素之间的相关性,PCA使我们能够以一个维数小得多的输入来近似原输入,而造成误差极小。
二、例子与数学背景
对我们运行例子来说,我们使用数据集{x(1),x(2),…,x(m)},输入是n=2维的,因此x(i)∈R2。假设我们想要将二维数据将为1维。(实际上,我们比如可能想要将256维数据降为50维;但在我们的例子中使用低一点的维度数据能让我们更好地可视化算法。)这是我们的数据集:
这些数据有经过预处理,因此每个特征x1和x2都有相同的均值(0)和方差。
为了阐述,我们还将每一个点着色,有三种颜色,取决于x1的值;这些颜色不是给算法用的,只是为了阐述。
PCA会寻找一个投影我们数据的较低维的子空间。
通过可视化验证数据,能看出u1是数据变化的主要方向,u2是变化的第二个方向:
即,相比u2方向,数据更多地在u1方向上变化。为了更正式地得到方向u1和u2,我们首先计算如下矩阵:
如果x有零均值,那么Σ恰好是x的协方差矩阵。(Σ符号,发音为sigma,是表示协方差矩阵的标准表示。不幸的是,它看起来就像求和的符号,和∑ni=1i中的一样;但实际上这是两种不同的东西。)
然后就可以看出,u1——数据变化的主要方向——是Σ的第一个(主要的)特征向量,u2是第二个特征向量。
注意:如果你感兴趣于阅读关于这个结果的更正式的数学推导/证明,可以阅读CS229(机器学习)关于PCA的课程笔记。然而在这个课程中你不需要这样做。
你可以使用标准的数值线性代数软件来得到这些特征向量(看实现提示)。具体而言,让我们计算Σ的特征向量,并将特征向量按列排列,得到矩阵U:
在这里,u1是主要特征向量(对应于最大的特征值),u2是第二个特征向量,等等。另外,令λ1,λ2,…,λn为相应特征值。
在我们的例子中,向量u1和u2构成新的基,我们的数据将用其表示。具体而言,令x∈R2为一些训练样本。然后uT1x为x投影到向量u1的长度(量)。
同理,uT2x是x投影到向量u2的量。
三、旋转数据
现在,我们可以用(u1,u2)基来表示x,通过计算