首页 > 代码库 > 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
其实可以看出,u1和u2是对x1和x2进行旋转的结果,旋转后发现其实数据集中在u1维度,无需u2
对于n维空间,旋转后,发现用其中的k维就可以很好的描述数据,那么这k维就是主成分,并且坐标轴都是正交的,即特征间是独立的
所以旋转后,选取得到的主成分也都是独立的
知道主成分分析的原理,下面的问题就是如何找到主成分?
首先做预处理,
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向量距离最小时,方差是最大的
当选取右图的方向时,方差是最小的
再者,方差大,点比较分散,才便于去区分
形式化的表达出来,
部分参考,主成分分析(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
所以所有点的方差和为,
其中,中间那块是x的协方差矩阵,
设,
为
为
上面的式子表示为,
两边同时乘上u
即 ,这个是特征向量和特征值的公式
我们上面的目标是最大化的情况下求u,到这里转变为求x的协方差矩阵,特征值最大的特征向量u
这里简单解释一下特征向量和特征值
http://zh.wikipedia.org/wiki/%E7%89%B9%E5%BE%B5%E5%90%91%E9%87%8F
矩阵可以看作是线性变换,所以上面公式可以看成,对向量u进行线性变换,得到的向量仍然在同一方向上,只是发生伸缩(即数乘变换)
这样就称u为线性变换或矩阵的特征向量,而为对应于该特征向量的特征值
可以看到对于PCA的求解其实很简单,
只要先算出所有x之间的协方差矩阵, 然后求出这个矩阵的特征向量
最终按特征值排序,取前k个特征向量作为新的主成分向量即可
PCA的应用非常广泛,
压缩数据
可视化,高维数据无法可视化,降到2维或3维便于可视化
降低over-fitting, 用高维数据进行supervised learning,模型复杂度比较高,容易过拟合,通过PCA降维达到防止过拟合的作用
去噪音,比如对于脸部识别,100×100的pixel,就是10000特征,通过PCA降维可以找到主成分特征
异常检测,通过PCA可以找到由k个主成分组成的超平面,如果新的数据离该超平面很远,就说明可能是异常数据