首页 > 代码库 > Andrew Ng机器学习公开课笔记–Principal Components Analysis (PCA)

Andrew Ng机器学习公开课笔记–Principal Components Analysis (PCA)

网易公开课,第14课
notes,10

之前谈到的factor analysis,用EM算法找到潜在的因子变量,以达到降维的目的

这里介绍的是另外一种降维的方法,Principal Components Analysis (PCA), 比Factor Analysis更为直接,计算也简单些

主成分分析基于,

在现实中,对于高维的数据,其中有很多维都是扰动噪音,或有些维是冗余的,对描述数据特征没有作用

比如我们在描述汽车速度的时候,用不同的单位mph or kph作为两维,其实只需要其中一维即可

那么如果对于一个高维数据,比如3维空间,大部分数据都集中于一个二维平面,那么我们用这个二维平面的两个主向量来替代3维向量,就达到降维的目的

并且这样的也尽可能的保留了原始变量的信息不丢失

推而广之,对于n维空间,数据点集中于一个k维的超平面,那么我们就可以说这个超平面的k个主向量为主成分

看NG说的直升机自动驾驶的例子,描述直升机驾驶员的水平
x1,表示驾驶技能;x2,表示驾驶的爱好和兴趣,这两个维度其实是极度相关的,如下图
可以看到其实所有点都是集中在u1这个axis附近的,所以我们可以用u1作为主成分来替代原先的x1和x2

image

其实可以看出,u1和u2是对x1和x2进行旋转的结果,旋转后发现其实数据集中在u1维度,无需u2
对于n维空间,旋转后,发现用其中的k维就可以很好的描述数据,那么这k维就是主成分,并且坐标轴都是正交的,即特征间是独立的
所以旋转后,选取得到的主成分也都是独立的

知道主成分分析的原理,下面的问题就是如何找到主成分?

首先做预处理,

image

1. 算出均值
2. 算出和均值间的偏差
3. 算法均方差
4. normalization 偏差,因为每维上的scale是不一样的,比如一维是体重80,一维是身高1.8,所以需要规范化

好,如何找到u?

One way to pose this problem is as finding the unit vector u so that when the data is projected onto the direction corresponding to u, the variance of the projected data is maximized.

即找到一个单位向量,让数据投影到u上的点的方差最大,即最分散

为什么?
首先我们的目的是找到那个子超平面,使得数据点尽量集中在这个超平面上,即点到这个超平面的距离尽可能的小
如下图,比较直观,如左图,当点到u向量距离最小时,方差是最大的
当选取右图的方向时,方差是最小的

再者,方差大,点比较分散,才便于去区分

image image

形式化的表达出来,
部分参考,主成分分析(Principal components analysis)-最大方差解释

To formalize this, note that given a unit vector u and a point x, the length of the projection of x onto u is given by image

image

所以所有点的方差和为,

image

其中,中间那块是x的协方差矩阵,
设,
imageimage

imageimage

上面的式子表示为,

image

两边同时乘上u

image

image ,这个是特征向量和特征值的公式
我们上面的目标是最大化image的情况下求u,到这里转变为求x的协方差矩阵image,特征值image最大的特征向量u

这里简单解释一下特征向量和特征值

http://zh.wikipedia.org/wiki/%E7%89%B9%E5%BE%B5%E5%90%91%E9%87%8F

矩阵可以看作是线性变换,所以上面公式可以看成,对向量u进行线性变换image,得到的向量仍然在同一方向上,只是发生伸缩(即数乘变换)
这样就称u为线性变换或矩阵image的特征向量,而image为对应于该特征向量的特征值

可以看到对于PCA的求解其实很简单,
只要先算出所有x之间的协方差矩阵, 然后求出这个矩阵的特征向量
最终按特征值排序,取前k个特征向量作为新的主成分向量即可

PCA的应用非常广泛,

压缩数据
可视化,高维数据无法可视化,降到2维或3维便于可视化
降低over-fitting, 用高维数据进行supervised learning,模型复杂度比较高,容易过拟合,通过PCA降维达到防止过拟合的作用
去噪音,比如对于脸部识别,100×100的pixel,就是10000特征,通过PCA降维可以找到主成分特征
异常检测,通过PCA可以找到由k个主成分组成的超平面,如果新的数据离该超平面很远,就说明可能是异常数据