上一节我们介绍了因子分析,该模型通过一系列变换可以将高维数据用低维数据来表示。因子分析基于的是概率模型,并且需要用到EM算法进行参数估计。
这一节我们介绍主成分分析(Principal Components Analysis, PCA),这也是一种可以将高维数据映射到低维数据的方法,但是这种方法更加直接,计算方法也更为简单。
问题
假设我们有一个数据集{x(i); i=1, ..., m}表示m种不同汽车的特征,比如最大速度,转速等等。其中有两个特征xi和xj都表示汽车的最大速度,区别是一个以英里/小时作为单位,另一个以千米/小时作为单位。因此这两个特征是线性相关的,最多包含由于四舍五入导致的细微差别。因此数据的特征数可以缩减成n - 1维,那么我们如何自动检测并去除这一冗余的特征呢?
再假设我们有一个数据集表示对无线电遥控直升机的飞行员的调查,其中x1(i)表示第i个飞行员的遥控技能,x2(i)表示第i个飞行员有多热爱遥控直升机这件事。由于遥控直升机是一件非常难掌握的技能,所以只有非常热爱这件事情的人才能成为出色的飞行员。因此这两个特征是强相关的。如下图所示,x1和x2可以认为是在u1这条轴上并且伴有一些噪声的扰动,那么我们如何计算出u1呢?
主成分分析
PCA算法的第一步是对数据进行预处理,目的是将均值和方差归一化,具体步骤如下:
对数据归一化后,我们应该如何计算u呢?考虑如下图的数据集,这些数据已经经过归一化处理了:
假设我们选取u为下图所示方向,图中圆点表示原始数据在u上的投影:
我们可以看到投影后的数据有较大的方差,并且投影点离原点也较远。相反地,如果我们选取如下图所示的方向:
这个图上投影后的数据的方差较小,并且投影点离原点较近。
我们希望选择前面两张图中的第一张图,并且是以一种自动的方式。将上述过程形式化,给定一个单位向量u和点x,x在u上的投影距离是xTu,由于我们希望将投影距离的方差最大化,所以目标是选择u使得下面的式子最大化:
上式右边括号内的部分正是样本数据的协方差矩阵Σ,因此左边的式子就是样本数据的特征向量(eigenvector)。
因此,如果我们只需要映射到一维空间,那么我们应该选择Σ的特征向量。更一般地,如果我们希望映射到k维空间,那么我们应该选择Σ的前k个特征向量。
得到前k个特征向量后,x(i)可以被表示成:
通过如上变换,y(i)给出了x(i)的一个低维的近似表示。因此,PCA通常被认为是一种降维(dimensionality reduction)算法,向量u1, ... uk被称为数据的前k个主成分(principal components)。
PCA有着非常广泛的应用。第一个应用是数据压缩,如果可以将很高维的数据降低到两三维,那么可以获得很高的压缩率。第二个应用是在监督学习算法中降低特征的个数,较少的个数不仅可以在计算上花费更少的时间,而且可以降低假设函数的复杂度。第三个应用是在图像处理中进行降噪,比如在人脸识别应用中,我们可以先使用PCA将图像降维成100*100维的向量,这个过程可以去除图像中冗余的特征,而且最大程度地保留了图像原有的信息。
总结
- 主成分分析是一种常见的降维算法,该算法不依赖任何概率模型,并且能最大程度地保留原始数据信息
- 主成分分析的步骤首先是对均值和方差进行归一化,然后求出样本数据的协方差矩阵的前k个特征向量,前k个特征向量也被称为数据的前k个主成分
参考资料
- 斯坦福大学机器学习课CS229讲义 Principal Components Analysis
- 网易公开课:机器学习课程 双语字幕视频