R语言十八讲(十七)—主成分分析
理解主成分分析这个模型前,可能需要一定的线性代数的知识,当然若没有基本也能看下去,只是可能比较困弄清楚,但这篇短文会尽可能给你的写得浅显易懂,不涉及太多公式推导,先让我们关注一下我们可能面对的问题,若在数据收集过程中有许多的字段,也叫变量吧,这些变量可能有几十上百个,那么我们怎么去理解这些变量间的关系了?如果两两去看,那得有几百个相关关系了,另外我们还会遇到这样的问题:
1、 比如拿到一个汽车的样本,里面既有以“千米/每小时”度量的最大速度特征,也有“英里/小时”的最大速度特征,显然这两个特征有一个多余。
2、 拿到一个数学系的本科生期末考试成绩单,里面有三列,一列是对数学的兴趣程度,一列是复习时间,还有一列是考试成绩。我们知道要学好数学,需要有浓厚的兴趣,所以第二项与第一项强相关,第三项和第二项也是强相关。那是不是可以合并第一项和第二项呢?
接下来我们来看看主成分分析的计算过程:
假设我们得到的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中实现主成分分析.欢迎继续阅读.
未完待续,
PPV原创文章,严禁转载. (文:@白加黑治感冒
PPV课:(http://www.ppvke.com)国内领先的大数据学习社区,人人都是数据咖倡导者,专注大数据、数据分析、数据挖掘培训,提供SPSS、SAS、R语言、Hadoop/spark、Python相关课程和认证就业服务。海量免费学习资源,数据分析师和数据挖掘师首选学习平台,数据科学交流和分享圈子!
,