主成份分析(PCA)——原理、实现步骤

    PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。本文主要分为两大部分:

第一部分:PCA原理的主要内容。

第二部分:给出PCA程序实现步骤。

第三部分:程序函数详解。见下一篇博客:

程序源码下载地址:http://download.csdn.net/detail/ckzhb/9903051

一、原理

参考:

http://blog.csdn.net/xiaojidan2011/article/details/11595869

http://blog.sina.com.cn/s/blog_82e9a8f80102x25y.html

1.1 预备知识

1、基变换的矩阵表示

一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果。


R可以小于N,而R决定了变换后数据的维数。也就是说,我们可以将一N维数据变换到更低维度的空间中去,变换后的维度取决于基的数量。因此这种矩阵相乘的表示也可以表示降维变换。

矩阵相乘找到了一种物理解释:两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去。更抽象的说,一个矩阵可以表示一种线性变换。

2、协方差矩阵

从直观上来看,协方差表示的是两个变量总体误差的期望。如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值时另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值;如果两个变量的变化趋势相反,即其中一个变量大于自身的期望值时另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。

协方差矩阵:

协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。



1.2 问题转换和优化

问题:如何选择基才是最优的。或者说,如果我们有一组N维向量,现在要将其降到K维(K小于N),那么我们应该如何选择K个基才能最大程度保留原有的信息?

答:直观地,投影后,数据之间的方差越大越好。且对于K个基,如果我们还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一起”,显然这样的维度是没有用的,因此,应该有其他约束条件。从直观上说,让两个字段尽可能表示更多的原始信息,我们是不希望它们之间存在(线性)相关性的,因为相关性意味着两个字段不是完全独立,必然存在重复表示的信息。降维问题的优化目标:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)

最终要达到的目的与属性内方差及属性间协方差有密切关系。因此我们希望能将两者统一表示,仔细观察发现,两者均可以表示为内积的形式,而内积又与矩阵相乘密切相关。

在属性/特征/维度均值为0的情况下,两个属性/特征/维度的协方差简洁的表示为其内积除以元素数m。

假设我们只有a和b两个字段,那么我们将它们按行组成矩阵X,然后我们用X乘以X的转置,并乘上系数1/m。



这个矩阵对角线上的两个元素分别是两个字段的方差,而其它元素是a和b的协方差。两者被统一到了一个矩阵的。


根据一些列数学推导,我们发现要达到优化目的,等价于将协方差矩阵对角化:即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下排列,这样我们就达到了优化目的。设原始数据矩阵X对应的协方差矩阵为Cov,而P是一组基按行组成的矩阵,设Y=PX,则YXP做基变换后的数据。优化目标变成了寻找一个矩阵P,满足是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得XN维降到了K维并满足上述优化条件


二、PCA实现步骤:

设有m条n维数据。

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

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

即数据预处理,更准确的做法为:


3)求出协方差矩阵Cov。

4)求出协方差矩阵的特征值及对应的特征向量或者利用奇异值分解的方法。

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

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


三、程序

本文给出程序代码中的一些预备知识即盒形图,具体程序详解见一篇文章。

参考:

http://wiki.mbalib.com/wiki/%E7%AE%B1%E7%BA%BF%E5%9B%BE

http://www.blogjava.net/norvid/articles/317235.html



图形说明:

它由数据中的五个统计量组成:最小值(min),下四分位数(Q1),中位数(median),上四分位数(Q3),最大值(max)。也可以往盒图里面加入平均值(mean)。如上图。下四分位数、中位数、上四分位数组成一个带有隔间的盒子。上四分位数到最大值之间建立一条延伸线,这个延伸线成为胡须(whisker)”

由于现实数据中总是存在各式各样地脏数据,也成为离群点,于是为了不因这些少数的离群数据导致整体特征的偏移,将这些离群点单独汇出,而盒图中的胡须的两级修改成最小观测值与最大观测值。这里有个经验,就是最大(最小)观测值设置为与四分位数值间距离为1.5IQR(中间四分位数极差)。如果存在离群点小于最小观测值,则胡须下限为最小观测值,离群点单独以点汇出。如果没有比最小观测值小的数,则胡须下限为最小值;如果存在离群点大于最大观测值,则胡须上限为最大观测值,离群点单独以点汇出。如果没有比最大观测值大的数,则胡须上限为最大值。(当两种情况同时发生时,两侧的胡须长度相等)

  • IQR = Q3-Q1,即上四分位数与下四分位数之间的差,也就是盒子的长度,四分位距。
  • 在Q3+1.5IQR(四分位距)和Q1-1.5IQR处画两条与中位线一样的线段,这两条线段为异常值截断点,称其为内限;在Q3+3IQR和Q1-3IQR处画两条线段,称其为外限。处于内限以外位置的点表示的数据都是异常值,其中在内限与外限之间的异常值为温和的异常值(mild outliers),在外限以外的为极端的异常值(li)的异常值extreme outliers。

作用:

1、直观明了地识别数据批中的异常值。箱线图为我们提供了识别异常值的一个标准:异常值被定义为小于Q11.5IQR或大于Q31.5IQR的值,来源于经验判断,经验表明它在处理需要特别注意的数据方面表现不错。众所周知,基于正态分布法则或z分数方法是以假定数据服从正态分布为前提的,但实际数据往往并不严格服从正态分布。它们判断异常值的标准是以计算数据批的均值和标准差为基础的,而均值和标准差的耐抗性极小,异常值本身会对它们产生较大影响,这样产生的异常值个数不会多于总数0.7%。显然,应用这种方法于非正态分布数据中判断异常值,其有效性是有限的。箱线图的绘制依靠实际数据,不需要事先假定数据服从特定的分布形式,没有对数据作任何限制性要求,它只是真实直观地表现数据形状的本来面貌;另一方面,箱线图判断异常值的标准以四分位数和四分位距为基础,四分位数具有一定的耐抗性,多达25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值不能对这个标准施加影响,箱线图识别异常值的结果比较客观。由此可见,箱线图在识别异常值方面有一定的优越性。

2、利用箱线图判断数据批的偏态和尾重。

具体见参考来源。

3、利用箱线图比较几批数据的形状

同一数轴上,几批数据的箱线图并行排列,几批数据的中位数、尾长、异常值、分布区间等形状信息便昭然若揭。在一批数据中,哪几个数据点出类拔萃,哪些数据点表现不及一般,这些数据点放在同类其它群体中处于什么位置,可以通过比较各箱线图的异常值看出。各批数据的四分位距大小,正常值的分布是集中还是分散,观察各方盒和线段的长短便可明了。每批数据分布的偏态如何,分析中位线和异常值的位置也可估计出来。还有一些箱线图的变种,使数据批间的比较更加直观明白。例如有一种可变宽度的箱线图,使箱的宽度正比于批量的平方根,从而使批量大的数据批有面积大的箱,面积大的箱有适当的视觉效果。如果对同类群体的几批数据的箱线图进行比较,分析评价,便是常模参照解释方法的可视图示;如果把受测者数据批的箱线图与外在效标数据批的箱线图比较分析,便是效标参照解释的可视图示。箱线图结合这些分析方法用于质量管理、人事测评、探索性数据分析等统计分析活动中去,有助于分析过程的简便快捷,其作用显而易见。

 

局限:

1)不能提供关于数据分布偏态和尾重程度的精确度量

2)对于批量比较大的数据批,反应的形状信息更加模糊

3)用中位数代表总体评价水平有一定的局限性









发布了78 篇原创文章 · 获赞 134 · 访问量 38万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章