一、前言
毫不夸张地说,主成分分析(Principal Component Analysis)面前,在座的各位都是小朋友,PCA算法距离1901年提出已经过了一百多年,纵然世纪更迭,但是许多人对PCA算法在人脸识别领域中的应用仍然逃不过真香定律,它仍然是目前最简单的以特征量分析多维度统计分布的方法,没有之一,可以说是算法必掌握之利器。
二、为什么要有主成分分析
和这个系列名对应,主成分分析是特征提取的一个常用算法。这时肯定有人对特征提取和特征选择的区别产生疑问,简单来说,特征提取是从N个特征中,通过构造M个函数的方式,获得M个特征,这里每个特征都是包含了前N个特征得出的。而特征选择就是“单纯的”从样本的N个特征中选出前M个最matter(比如在人脸识别中使得识别率最高的)的特征。这两种情况下,M都是小于N的,直观来讲,比如我从样本集中拿出一个神奇宝贝,他可能包含有N个特征,比如是它的类系,使它的攻击力,使它的防御力,等等,那么由此得来的样本的特征空间可以表示为,而这样的N个维度有时对于实际问题来说可能太多了,需要减少样本的维度,而这时候,主成分分析就要来秀一波了,它是降低数据维度的一把好手,比如这个问题,他就可以提取出M个特征使得神奇宝贝的胜率达到最高。
但是要注意,这里重新得到的,,等等已经和之前的不一样了,事实上,这里的每个新特征是关于之前N个特征的综合考虑,可以表示为,
三、二维主成分分析
OK,我们由浅入深,先来考虑一下二维情况时的主成分分析,也就是N=2,M=1的情况,这样每个样本点都分布在一个二维平面上,我们可以用一个二维坐标系表示。
优化问题得出
好,那我们要拿主成分分析来干嘛呢?我们想要作特征提取,也就是把这两个特征“融合”成一个特征用来作后续胜率的分析。试想一下,如果我们要考虑皮卡丘和杰尼龟(假设只有攻击力和防御力这两个特征)战斗的胜率,表示攻击力,表示防御力,那么我们希望找一个特征(也就是找一个轴),把原本在二维坐标系上的点还能投影到这个坐标轴上的对应位置,以使得所有样本分布尽可能不变。
我们可以画出这样的坐标系,皮卡丘和杰尼龟分别用P和J点代替,皮卡丘的攻击力较高,杰尼龟的防御力较高,那怎么判断谁获胜的可能性比较大呢?很显然,对这两个特征做个综合,具体怎么说呢?就是给分别一个权重,然后得到一个新的特征能力值综合考虑了他们的攻击力和防御力,这样把P1,J1这两个二维坐标投影到一维上,然后比较P2,J2,就能估计胜率啦!
很好,照着这个思路,也就是我们需要构造一个函数,也就是找出A和b使得所有的样本点在这条线上的投影尽可能分散,以便我们借助我们新得的这个特征Y尽可能区分开他们,由此我们得出,也就是上图中的F1方向。
假设现在我们有P个样本点,,这样,可以把改造为,其中,当我们想要把N维向量降为M维时,很显然应该是Mx1的矩阵,而A应该是NxM的矩阵,假设,其中a向量是Mx1的矩阵,这里的a1等等实际上就表示M个方向,在这M个方向上投影就得到M个值。(Tips:搞清楚各个向量的维度对理解后续推导至关重要,请停下来思考一下。),所以Y向量为,
Great!通过前面这样的一通分析,我们终于有了目标,有了目标就可以尝试得出优化问题的目标函数和约束,现在,我们只考虑有p个样本的二维情况,所以N=2,M=1,这样很简单,Y就是一个值,我们要最大化方差,也就是最大化,接下来我们就尝试把这个目标函数化为样本点X相关,过程很容易。
实际上,所以
我们定义为协方差矩阵(covariance matrix),这样目标函数可以简化为,约束条件可以在a1方向上单位化,不影响方向表示,却可以极大简化后续计算。所以优化问题为,
解优化问题
得到要解的优化问题后,又又又到了我们喜闻乐见的拉格朗日乘子法和求导运算,求极值的阶段了。(贴一下这位可爱的科学家)
这次优化问题的解相比于前面几篇支持向量机的推导要简单很多,我会用最简单的方法介绍,各位看官耐心且看。
首先利用拉格朗日乘子法构造函数
接下来,祖传手艺求导,
所以,,怎么样?看这个式子是不是很熟悉,没错,是协方差矩阵的特征向量,是协方差矩阵的特征值。
怎么理解特征值和特征向量呢?比如我们把矩阵看作运动,对于运动而言,它最重要的特征当然是速度和方向,
- 特征值就表示运动的速度
- 特征向量就表示运动的方向
那这里的这里的特征值和特征向量表示什么意义呢?我们思考一波,我们要最大化,由上面(1)式,也就是最大化,又约束条件,所!以!我们就是要最大化特征值(也就是最大化目标函数方差呀朋友萌!),到这里,我们总结出,
所以是最大的特征值,是最大的特征值对应的特征向量,并且。
Good job!我们找到了,也就找到了二维问题中使方差最大的方向。
四、多维情况求解
解决掉可以直观想象的分布统计问题之后,我们来点稍有挑战性的,怎么求多维(N>2)向量除外的其它维度呢?一开始,我们就说明矩阵A的各个维度实际上表示的是不同的方向,我们要在每个方向都尽可能使方差大,比如我们要找方向,那么同样,,注意,这里唯一的不同就是,要添加与正交,说明在三维降二维时,方向是唯一确定的,莫得选择。
接下来,继续祖传手艺拉格朗日乘子法加求导,引入系数和,构造函数接下来,和前面二维情况差不多,
以下,简单推导一下吧,方便理解,,两边同乘以,得到,就等于看看这个式子,u1s1,漂亮!全都能照着约束条件约去(现在体会到约束的好处了吧),得到
,同时,,所以怎么样,是不是第二个优化问题(3)和第一个优化问题(1)就一样了?最大化,再次求最大的,但是此时最大已经被占去,咋办?嗐,退而求其次,取第二大吧。
所以,严肃严肃,我们要放大招了,抛出结论,
相信聪明的你已经猜到了NxM矩阵A的其他维度的值了,就不用我一遍一遍重复推导了吧。
得出结论,就是协方差矩阵第三大特征值对应的特征向量,依次类推。由此确定了NxM矩阵,这就是一个M维度的坐标系呀,盆友萌,我们成功把N维坐标系的样本成功移到我们自己构建的M维坐标系上了呀,撒花撒花!其中每个轴都是我们自己辛苦求出来的哦。
五、总结一波
好的,经过你不懈的努力,总算把PCA算法盘下来了,我们最后总结一下,回顾一遍,你能有更深的理解。
- 拿到一堆样本,果断求协方差矩阵;
- 有了结论,直接用。求出的特征值及其对应的特征向量,并且从大到小排序,以备取用;
- 归一化所有的方向;
- 得到前M维方向向量
- 得到M维坐标系后,果断把这P个在N维坐标系上的样本点映射过去,,其中i=1 到 P。
PCA:“小朋友,读到这里,你还有很多问号吗?”
原文搬运自我的博客,欢迎持续关注。
创作不易,你的鼓励是我创作的动力,如果你有收获,点个赞吧
我接下来还会陆续更新机器学习相关的学习笔记,补充这个系列。如果看到这里的话,说明你有认真看这篇文章,希望你能有所收获!最后,欢迎交流指正!
还有不明白的欢迎阅读其他文章:
通俗讲解支持向量机SVM(一)面试官:什么?线性模型你不会不清楚吧?
通俗讲解支持向量机SVM(二)另辟蹊径!对偶性的几何解释
通俗讲解支持向量机SVM(三)SVM处理非线性问题及软间隔之引出
通俗讲解支持向量机SVM(四)用尽洪荒之力把核函数与核技巧讲得明明白白(精华篇)