理解主成分分析这个模型前,可能需要一定的线性代数的知识,当然若没有基本也能看下去,只是可能比较困弄清楚,但这篇短文会尽可能给你的写得浅显易懂,不涉及太多公式推导,先让我们关注一下我们可能面对的问题,若在数据收集过程中有许多的字段,也叫变量吧,这些变量可能有几十上百个,那么我们怎么去理解这些变量间的关系了?如果两两去看,那得有几百个相关关系了,另外我们还会遇到这样的问题:
1、 比如拿到一个汽车的样本,里面既有以“千米/每小时”度量的最大速度特征,也有“英里/小时”的最大速度特征,显然这两个特征有一个多余。
2、 拿到一个数学系的本科生期末考试成绩单,里面有三列,一列是对数学的兴趣程度,一列是复习时间,还有一列是考试成绩。我们知道要学好数学,需要有浓厚的兴趣,所以第二项与第一项强相关,第三项和第二项也是强相关。那是不是可以合并第一项和第二项呢?
3、 拿到一个样本,特征非常多,而样例特别少,这样用回归去直接拟合非常困难,容易过度拟合。比如北京的房价:假设房子的特征是(大小、位置、朝向、是否学区房、建造年代、是否二手、层数、所在层数),搞了这么多特征,结果只有不到十个房子的样例。要拟合房子特征->房价的这么多特征,就会造成过度拟合。
4、 这个与第二个有点类似,假设在IR中我们建立的文档-词项矩阵中,有两个词项为“learn”和“study”,在传统的向量空间模型中,认为两者独立。然而从语义的角度来讲,两者是相似的,而且两者出现频率也类似,是不是可以合成为一个特征呢?
主成分分析便是一种降维的技巧,就是将大量相关的变量变成一组很少的不相关的变量,这些无关变量称之为主成分.
我们来看看这句话,注意几个关键词,大量相关的变量,很少不相关的变量.学过线性代数的应该了解这叫求最大线性无关组.其实把每个变量当做一个人,相关就是指两个人认识比较熟,不相关就是比较陌生.我们认为熟悉的人之间可以互相代表,所以若一组人之间都认识那么只需要一个人就可以代表这个组,那么最大线性无关组就是变成组里面只剩下相互陌生的人了,这个小组就能代表之前的大组.
而PCA的思想与之有些区别,PCA模型中的那个代表是另外构造的,并不是来自原先组中原本的特征,如果我们将每个特征看做一个维度的话,那么构造出的代表其实就是将原先的多维变成少量新的维度.也就是说PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主元,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。
接下来我们来看看主成分分析的计算过程:
假设我们得到的2维数据如下:
行代表了样例,列代表特征,这里有10个样例,每个样例两个特征。可以认为有10辆汽车,x是千米/小时的速度,y是英里/小时的速度,等等。
第一步分别求x和y的平均值,然后对于所有的样例,都减去对应的均值。这里x的均值是1.81,y的均值是1.91,那么一个样例减去均值后即为(0.69,0.49),得到
第二步,这里只有x和y,求解得
第三步,求协方差的特征值和特征向量,注意是协方差矩阵的特征值和特征向量,得到
上面是两个特征值,下面是对应的特征向量,这里的特征向量都归一化为单位向量。
第四步,将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。 这里特征值只有两个,我们选择其中最大的那个,这里是1.28402771,对应的特征向量是
第五步,将样本点投影到选取的特征向量上。假设样例数为m,特征数为n,减去均值后的样本矩阵为DataAdjust(m*n),协方差矩阵是n*n,选取的k个特征向量组成的矩阵为EigenVectors(n*k)。那么投影后的数据FinalData为 这里是
FinalData(10*1) = DataAdjust(10*2矩阵)×特征向量
得到结果是
这样,就将原始样例的n维特征变成了k维,这k维就是原始特征在k维上的投影。形成的新特征,该特征基本上代表了这两个特征。
那么理论基础是什么了?我们来简单讲讲其中一个:
比如下图有5个样本点:(已经做过减去均值处理,均值为0,特征方差归一,也就是把坐标系原点移到数据的中点)我们来想象这个坐标系的X轴代表一个特征人的身高,y轴代表另一个特征人的体重,这两个特征是不是有很大的相关性啊.其中的每一个点代表一个人.如果我们按照X轴也就是身高来区分这几个人,其实可以区分,但是当数据量比较集中时也就是方差较小时,根本没办法区分,大家身高都差不多吗,体重也是,你看Y轴还有几个人体重一模一样了.
下面将样本投影到某一维上,这里用一条过原点的直线表示,这条直线是另外一个特征,我们假设是身高与体重的一个加权组合吧,就管它叫什么形体美的程度吧,我们发现基本上几个人很好的区分开来了,如左图都比较离散,也即是方差比较大.而右边构建的新特征就不好,没有很好区分.用数学来说就是方差较小.
那么我们的目的就很明确的,就是要找到新特征,其能很好的区分样本,数学上就是投影后方差比较大,具体的计算过程就如同上面讲的求协方差矩阵,计算特征值和特征向量,然后找到大的特征值,与对应的特征向量,组成的矩阵,这几个特征向量是正交的,也就是互相垂直的(因为协方差矩阵是对称阵).然后将样本矩阵与之相乘即可.具体是怎么推导的,就不写了,因为涉及到很多线性代数的知识,感兴趣可以自己看.好了,这就是主成分分析的大致原理和过程.,当然原理我只介绍了一个,下篇我将会介绍另一个,并在R中实现主成分分析.欢迎继续阅读.
未
完
待
续