PCA感悟

来源:互联网 发布:淘宝九块九 编辑:程序博客网 时间:2024/06/15 12:30

1 降维:

  

 

       如上图,大量的二维样本点形成了椭圆形的点状图,如果用一个椭圆拟合,会发现短轴上点的变化比较小,而长轴的变化则比较大,极端情况下,当短轴再缩小,此时点的分布和变化只需要一个长轴来来表示,此时就实现二维变到一维。在做图像处理的时候,当一副图像有2000个特征值时,对比大量的样本图片,发现2000个特征值里面其实能代表图像的差异的特征值只有100个,这时2000到100就实现降维了。那如何结合数学应用到代码里面实现降维呢?

我主要看我下面这两篇文章才理解了PCA,强烈推荐结合自己的项目和下面两篇文章(一文一武(一个偏向实际,一个偏向理论))。

  文章A:文:  PCA的数学原理(非常值得阅读)!!!!)        

  文章B:武:   OpenCV统计应用-PCA主成分分析

下面是我个人看完上面文章以及自己做得项目后的理解:

2基:

     我们经常用线段终点的点坐标表示向量,例如文章里面的那个向量可以表示为(3,2),其对应的默认的基就是X,Y轴上的单位向量,文章A关于基的解释其实是说明,我们坐标的不同是因为基德不同,可以通过基来改变坐标。要准确描述向量,首先要确定一组基,然后给出在基所在的各个直线上的投影值就可以了。然后作者将基变换的矩阵表示讲解一下,逐渐的将坐标与基德关系引渡到矩阵相乘的表示。两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去。

3优化目标:

       如果基的数量少于向量本身的维数,则可以达到降维的效果。但是我们还没有回答一个最最关键的问题:如何选择基才是最优的。文章A里面举例子讲解如何将二维降到一维时判断基为最优,根据文章所说的,当投影到一维时,尽可能保证字段的数据存在,即保证投影后的字段点的方差尽可能大。但是马上又提出三维降到二维的问题,如果继续按照二维降到一维的方法,则发现字段先按照方差尽可能大的原则投影到直线k上,再继续按照此原则投影到L上,发现只有K和L重合了,此时投影在K和L上的数据一样,导致信息重合,因此我们希望两个投影后的字段数据尽量不一样,这样才可以保留更多信息,这里的不一样可以用数学里面的相关性表示,当协方差为0时,表示两个字段完全独立。为了让协方差为0,我们选择第二个基时只能在与第一个基正交的方向上选择。因此最终选择的两个方向一定是正交的,我们得到了降维问题的优化目标:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。

4 协方差矩阵:上面只说要什么,但根本没有说怎么做,好了,上面说了一大堆,貌似跟方差,协方差相关,此时我们注意到有一个协方差矩阵。其对角线刚好每个字段的方差,其他都是各个字段间的协方差。那么问题来了,我们要找的协方差为0,方差最大的东西是不是就是一个协方差矩阵呀?

5 协方差矩阵对角化:文章A里面用一组公式说明了原始数据X的协方差C与投影后数据Y的协方差D的关系,其中基就是P,XP=Y,D=PC(P倒置)。而这个D就是前面一直强调的方差最大,协方差为0 的东西,所以我们要找到一个P即基,通过原始数据X的协方差和P来找到D。问题来了P如何找?

6 特征向量:

        协方差矩阵C是一个是对称矩阵,学过线性代数就知道实对称矩阵不同特征值对应的特征向量必然正交,所以我们就知道,要使一个对称矩阵与另外一个矩阵相乘得到一个对角化的矩阵(对角有值,其他为0),这时线性代数里面的一些概念如特征向量,特征值慢慢的回想起来了。是的,我们先求一个矩阵H的特征值(如何求,百度就知道了),根据特征值就可以找到特征向量了。所以对于原始数据X的协方差矩阵C来说,他的特征向量求出来就是P,他的特征值组成的对角矩阵就是要找的D。所以P出来了。将D里面的特征值按大到小排序,取排列前面的K个特征值,然后这K个特征值对应的特征向量组成一个K-P,即在特征向量矩阵P里面抽出来的K行特征向量组成的矩阵。以后用这个K-P矩阵(k*N)与原始样本数据M*N相乘就可以投影到一个K*N的一个新矩阵,这新矩阵是保证了各字段的协方差为0,方差最大的条件下投影得到的。

好了,其实上面是通过倒推得到求P就是就原始数据的协方差矩阵的特征向量。敲代码时,肯定是按照解题的顺序来的:

7 PCA算法

总结一下PCA的算法步骤:

设有m条n维数据。

1)将原始数据按列组成n行m列矩阵X

2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值

3)求出协方差矩阵C=1mXXT

4)求出协方差矩阵的特征值及对应的特征向量

5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P

6)Y=PX即为降维到k维后的数据

以上只是自己看完一些博客和自己的项目理解的,主要思想还是来着那个文章A和文章B。

 





   





0 0
原创粉丝点击