零基础深入浅出主成分分析PCA

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012845311/article/details/69943793

    在推荐系统中最常用到的降维方法就是主成分分析(PCA)与奇异值分解(SVD),最近岗位调整之后一方面在学习新的知识技能,另一方面也可以总结以前的东西。

一.特征值分解

    l  特征值

       对于一个方阵,其特征值和特征向量满足:=λν

      求出所有的特征值和特征向量后,就得出了方阵A的特征值分解:A=QΣQ1

      其中Q是特征向量按照与特征值的对应顺序组合而成 (ν12,..),Σ是由特征值组成的一个对角矩阵。那么对于方阵A的特征值分解的意义又何在呢?先看下面这个例子,对于矩阵A(为了简单起见,设为对角矩阵):


    其特征值为100,10和1,当一个向量与之相乘时:


    这个式子有何意义呢?一个典型的场景是降维(DimensionalityReduction)。如何降维呢?从上面可以看到,当xyz发生变化时,x的变化将被扩大100倍,y的变化被扩大10倍,而z则不会被扩大。那么当计算的结果不需要十分精确时,z这个变量对于我们来说意义是十分小的。当处理的数据维度十分巨大的时候,计算量变得很大,这时候就可以通过降维来去除不是那么重要的维度(如本例中的z维度),这些维度对最终的计算结果的影响远远小于其它的维度。

但是,特征值分解在现实生活中是行不通的。原因很简单,特征值分解局限于方阵,而现实生活中,往往都不是方阵。这时就需要奇异值分解了。

二、数学基础--数据的向量表示及降维问题

    一般情况下,在数据挖掘和机器学习中,数据被表示为向量。例如某个淘宝店2012年全年的流量及交易情况可以看成一组记录的集合,其中每一天的数据是一条记录,格式如下:

        (日期, 浏览量, 访客数, 下单数, 成交数, 成交金额)

    其中“日期”是一个记录标志而非度量值,而数据挖掘关心的大多是度量值,因此如果我们忽略日期这个字段后,我们得到一组记录,每条记录可以被表示为一个五维向量,其中一条看起来大约是这个样子:(500,240,25,13,2312.15)T

   注意是转置,因为习惯上使用列向量表示一条记录,本文后面也会遵循这个准则。

   降维当然意味着信息的丢失,不过鉴于实际数据本身常常存在的相关性。

    举个例子,假如某学籍数据有两列M和F,其中M列的取值是如何此学生为男性取值1,为女性取值0;而F列是学生为女性取值1,男性取值0。此时如果我们统计全部学籍数据,会发现对于任何一条记录来说,当M为1时F必定为0,反之当M为0时F必定为1。在这种情况下,我们将M或F去掉实际上没有任何信息的损失,因为只要保留一列就可以完全还原另一列。

    当然上面是一个极端的情况,在现实中也许不会出现,不过类似的情况还是很常见的。例如上面淘宝店铺的数据,从经验我们可以知道,“浏览量”和“访客数”往往具有较强的相关关系,而“下单数”和“成交数”也具有较强的相关关系。这里我们非正式的使用“相关关系”这个词,可以直观理解为“当某一天这个店铺的浏览量较高(或较低)时,我们应该很大程度上认为这天的访客数也较高(或较低)”。

    这种情况表明,如果删除浏览量或访客数其中一个指标,应该不会丢失太多信息。因此可以删除一个,以降低机器学习算法的复杂度。

    上面给出的是降维的朴素思想描述,可以有助于直观理解降维的动机和可行性,但并不具有操作指导意义。例如,到底删除哪一列损失的信息才最小?亦或根本不是单纯删除几列,而是通过某些变换将原始数据变为更少的列但又使得丢失的信息最小?到底如何度量丢失信息的多少?如何根据原始数据决定具体的降维操作步骤?

    要回答上面的问题,就要对降维问题进行数学化和形式化的讨论。而PCA是一种具有严格数学基础并且已被广泛采用的降维方法。下面我不会直接描述PCA,而是通过逐步分析问题,让我们一起重新“发明”一遍PCA。

2.1向量的表示及基变换

    既然我们面对的数据被抽象为一组向量,那么下面有必要研究一些向量的数学性质。而这些数学性质将成为后续导出PCA的理论基础。

内积与投影

    下面先来看一个高中就学过的向量运算:内积。两个维数相同的向量的内积被定义为:


    内积运算将两个向量映射为一个实数。其计算方式非常容易理解,但是其意义并不明显。下面分析内积的几何意义。假设A和B是两个n维向量,我们知道n维向量可以等价表示为n维空间中的一条从原点发射的有向线段,为了简单起见假设A和B均为二维向量,则A=(x1,y1),B=(x2,y2)则在二维平面上A和B可以用两条发自原点的有向线段表示,见下图:

    好,现在从A点向B所在直线引一条垂线。我们知道垂线与B的交点叫做AB上的投影,再设AB的夹角是a,则投影的矢量长度为|A|cos(a),其中

      

    是向量A的模,也就是A线段的标量长度。

    注意这里专门区分了矢量长度和标量长度,标量长度总是大于等于0,值就是线段的长度;而矢量长度可能为负,其绝对值是线段长度,而符号取决于其方向与标准方向相同或相反。

    到这里还是看不出内积和这东西有什么关系,不过如果我们将内积表示为另一种我们熟悉的形式:

        

   现在事情似乎是有点眉目了:AB的内积等于AB的投影长度乘以B的模。再进一步,如果假设B的模为1,即让|B|=1那么就变成了:

        

    也就是说,设向量B的模为1,则AB的内积值等于AB所在直线投影的矢量长度!这就是内积的一种几何解释,也是我们得到的第一个重要结论。在后面的推导中,将反复使用这个结论。

    下面继续在二维空间内讨论向量。上文说过,一个二维向量可以对应二维笛卡尔直角坐标系中从原点出发的一个有向线段。例如下面这个向量:

    在代数表示方面,经常用线段终点的点坐标表示向量,例如上面的向量可以表示为(3,2),这是再熟悉不过的向量表示。

    不过我们常常忽略,只有一个(3,2)本身是不能够精确表示一个向量的。我们仔细看一下,这里的3实际表示的是向量在x轴上的投影值是3,在y轴上的投影值是2。也就是说我们其实隐式引入了一个定义:以x轴和y轴上正方向长度为1的向量为标准。那么一个向量(3,2)实际是说在x轴投影为3y轴的投影为2。注意投影是一个矢量,所以可以为负。

    更正式的说,向量(x,y)实际上表示线性组合:x(1,0)T+y(1,0)T

    不难证明所有二维向量都可以表示为这样的线性组合。此处(1,0)和(0,1)叫做二维空间中的一组基。


    所以,要准确描述向量,首先要确定一组基,然后给出在基所在的各个直线上的投影值,就可以了。只不过经常省略第一步,而默认以(1,0)和(0,1)为基。

    之所以默认选择(1,0)和(0,1)为基,当然是比较方便,因为它们分别是x和y轴正方向上的单位向量,因此就使得二维平面上点坐标和向量一一对应,非常方便。但实际上任何两个线性无关的二维向量都可以成为一组基,所谓线性无关在二维平面内可以直观认为是两个不在一条直线上的向量。

    例如,(1,1)和(-1,1)也可以成为一组基。一般来说,基的模是1,因为从内积的意义可以看到,如果基的模是1,那么就可以方便的用向量点乘基而直接获得其在新基上的坐标了!实际上,对应任何一个向量总可以找到其同方向上模为1的向量,只要让两个分量分别除以模就好了。例如,上面的基可以变

        

   现在,想获得(3,2)在新基上的坐标,即在两个方向上的投影矢量值,那么根据内积的几何意义,我们只要分别计算(3,2)和两个基的内积,不难得到新的坐标为

        

   下图给出了新的基以及(3,2)在新基上坐标值的示意图:


   另外这里要注意的是,例子中基是正交的(即内积为0,或直观说相互垂直),但可以成为一组基的唯一要求就是线性无关,非正交的基也是可以的。不过因为正交基有较好的性质,所以一般使用的基都是正交的。

2.2基变换的矩阵表示

   下面找一种简便的方式来表示基变换。还是拿上面的例子,想一下,将(3,2)变换为新基上的坐标,就是用(3,2)与第一个基做内积运算,作为第一个新的坐标分量,然后用(3,2)与第二个基做内积运算,作为第二个新坐标的分量。实际上,可以用矩阵相乘的形式简洁的表示这个变换:

        

    其中矩阵的两行分别为两个基,乘以原向量,其结果刚好为新基的坐标。可以稍微推广一下,如果有m个二维向量,只要将二维向量按列排成一个两行m列矩阵,然后用“基矩阵”乘以这个矩阵,就得到了所有这些向量在新基下的值。例如(1,1),(2,2),(3,3),想变换到刚才那组基上,则可以这样表示:

        

    于是一组向量的基变换被干净的表示为矩阵的相乘。

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

    数学表示为:

        

    其中pi是一个行向量,表示第i个基,aj是一个列向量,表示第j个原始数据记录。

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

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

2.3协方差矩阵及优化目标

    上面讨论了选择不同的基可以对同样一组数据给出不同的表示,而且如果基的数量少于向量本身的维数,则可以达到降维的效果。但是还没有回答一个最最关键的问题:如何选择基才是最优的。或者说,如果有一组N维向量,现在要将其降到K维(K小于N),那么应该如何选择K个基才能最大程度保留原有的信息?

    要完全数学化这个问题非常繁杂,这里我们用一种非形式化的直观方法来看这个问题。

    为了避免过于抽象的讨论,仍以一个具体的例子展开。假设我们的数据由五条记录组成,将它们表示成矩阵形式:

    

    其中每一列为一条数据记录,而一行为一个字段。为了后续处理方便,首先将每个字段内所有值都减去字段均值,其结果是将每个字段都变为均值为0(这样做的道理和好处后面会看到)。

    看上面的数据,第一个字段均值为2,第二个字段均值为3,所以变换后:

    

    可以看下五条数据在平面直角坐标系内的样子:

    现在问题来了:如果必须使用一维来表示这些数据,又希望尽量保留原始的信息,要如何选择?

    通过上一节对基变换的讨论我们知道,这个问题实际上是要在二维平面中选择一个方向,将所有数据都投影到这个方向所在直线上,用投影值表示原始记录。这是一个实际的二维降到一维的问题。

    那么如何选择这个方向(或者说基)才能尽量保留最多的原始信息呢?一种直观的看法是:希望投影后的投影值尽可能分散。

    以上图为例,可以看出如果向x轴投影,那么最左边的两个点会重叠在一起,中间的两个点也会重叠在一起,于是本身四个各不相同的二维点投影后只剩下两个不同的值了,这是一种严重的信息丢失,同理,如果向y轴投影最上面的两个点和分布在x轴上的两个点也会重叠。所以看来x和y轴都不是最好的投影选择。我们直观目测,如果向通过第一象限和第三象限的斜线投影,则五个点在投影后还是可以区分的。

    下面,用数学方法表述这个问题。

方差

    上文说到,希望投影后投影值尽可能分散,而这种分散程度,可以用数学上的方差来表述。此处,一个字段的方差可以看做是每个元素与字段均值的差的平方和的均值,即:

        

    由于上面已经将每个字段的均值都化为0了,因此方差可以直接用每个元素的平方和除以元素个数表示:

     

    于是上面的问题被形式化表述为:寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大。

协方差

    对于上面二维降成一维的问题来说,找到那个使得方差最大的方向就可以了。不过对于更高维,还有一个问题需要解决。考虑三维降到二维问题。与之前相同,首先希望找到一个方向使得投影后方差最大,这样就完成了第一个方向的选择,继而我们选择第二个投影方向。

    如果还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一起”,显然这样的维度是没有用的,因此,应该有其他约束条件。从直观上说,让两个字段尽可能表示更多的原始信息,是不希望它们之间存在(线性)相关性的,因为相关性意味着两个字段不是完全独立,必然存在重复表示的信息。

    数学上可以用两个字段的协方差表示其相关性,由于已经让每个字段均值为0,则:

        

    可以看到,在字段均值为0的情况下,两个字段的协方差简洁的表示为其内积除以元素数m。当协方差为0时,表示两个字段完全独立。为了让协方差为0,选择第二个基时只能在与第一个基正交的方向上选择。因此最终选择的两个方向一定是正交的。

    至此,得到了降维问题的优化目标:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。

2.4协方差矩阵

    上面导出了优化目标,但是这个目标似乎不能直接作为操作指南(或者说算法),因为它只说要什么,但根本没有说怎么做。所以要继续在数学上研究计算方案。

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

    假设只有a和b两个字段,那么我们将它们按行组成矩阵X:

        

    然后用X乘以X的转置,并乘上系数1/m:

        

    奇迹出现了!这个矩阵对角线上的两个元素分别是两个字段的方差,而其它元素是ab的协方差。两者被统一到了一个矩阵的。

    根据矩阵相乘的运算法则,这个结论很容易被推广到一般情况:

    设有mn维数据记录,将其按列排成nm的矩阵X,设则

        

    是一个对称矩阵,其对角线分别个各个字段的方差,而第ij列和ji列元素相同,表示ij两个字段的协方差

2.5协方差矩阵对角化

    根据上述推导,发现要达到优化目前,等价于将协方差矩阵对角化:即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下排列,这样就达到了优化目的。这样说可能还不是很明晰,进一步看下原矩阵与基变换后矩阵协方差矩阵的关系:  

   设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则YXP做基变换后的数据。设Y的协方差矩阵为D,我们推导一下DC的关系:

          

    现在事情很明白了!要找的P不是别的,而是能让原始协方差矩阵对角化的P。换句话说,优化目标变成了寻找一个矩阵P,满足PCPT是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得XN维降到了K维并满足上述优化条件

    至此,离“发明”PCA还有仅一步之遥!

    现在所有焦点都聚焦在了协方差矩阵对角化问题上,有时,我们真应该感谢数学家的先行,因为矩阵对角化在线性代数领域已经属于被玩烂了的东西,所以这在数学上根本不是问题。由上文知道,协方差矩阵C是一个是对称矩阵,在线性代数上,实对称矩阵有一系列非常好的性质:

      1)实对称矩阵不同特征值对应的特征向量必然正交。

      2)设特征向量重数为r,则必然存在r个线性无关的特征向量对应于,因此可以将这r个特征向量单位正交化。

    由上面两条可知,一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量,设这n个特征向量为我们将其按列组成矩阵:

    则对协方差矩阵C有如下结论:

          

    其中为对角矩阵,其对角元素为各特征向量对应的特征值(可能有重复)。

    以上结论不再给出严格的数学证明,对证明感兴趣的朋友可以参考线性代数书籍关于“实对称矩阵对角化”的内容。

    到这里,已经找到了需要的矩阵PP=ET

    P是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。如果设P按照中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y

三.PCA

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

    主成分分析,Principalcomponents analysisPCA)是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。其方法主要是通过对协方差矩阵进行特征分解,以得出数据的主成分(即特征向量)与它们的权值(即特征值)。

    wikiPCA的数学定义是:一个正交化线性变换,把数据变换到一个新的坐标系统中,使得这一数据的任何投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。如下图所示,通过变化将X-Y坐标系映射到signalnoise上:

    PCA算法

    总结一下PCA的算法步骤:

    设有m条n维数据。

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

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

      3)求出协方差矩阵

             

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

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

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

四、PCA推导过程--最大方差解释

1. 问题

    真实的训练数据总是存在各种各样的问题:

      1、 比如拿到一个汽车的样本,里面既有以“千米/每小时”度量的最大速度特征,也有“英里/小时”的最大速度特征,显然这两个特征有一个多余。

      2、 拿到一个数学系的本科生期末考试成绩单,里面有三列,一列是对数学的兴趣程度,一列是复习时间,还有一列是考试成绩。我们知道要学好数学,需要有浓厚的兴趣,所以第二项与第一项强相关,第三项和第二项也是强相关。那是不是可以合并第一项和第二项呢?

      3、 拿到一个样本,特征非常多,而样例特别少,这样用回归去直接拟合非常困难,容易过度拟合。比如北京的房价:假设房子的特征是(大小、位置、朝向、是否学区房、建造年代、是否二手、层数、所在层数),搞了这么多特征,结果只有不到十个房子的样例。要拟合房子特征->房价的这么多特征,就会造成过度拟合。

      4、 这个与第二个有点类似,假设在IR中建立的文档-词项矩阵中,有两个词项为“learn”和“study”,在传统的向量空间模型中,认为两者独立。然而从语义的角度来讲,两者是相似的,而且两者出现频率也类似,是不是可以合成为一个特征呢?

      5、 在信号传输过程中,由于信道不是理想的,信道另一端收到的信号会有噪音扰动,那么怎么滤去这些噪音呢?

     这里的特征很多是和类标签有关的,但里面存在噪声或者冗余。在这种情况下,需要一种特征降维的方法来减少特征数,减少噪音和冗余,减少过度拟合的可能性。

     下面探讨一种称作主成分分析(PCA)的方法来解决部分上述问题。PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主元,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。

2. PCA计算过程

    首先介绍PCA的计算过程:

    假设得到的2维数据如下:

          

    行代表了样例,列代表特征,这里有10个样例,每个样例两个特征。可以这样认为,有10篇文档,x是10篇文档中“learn”出现的TF-IDFy是10篇文档中“study”出现的TF-IDF。也可以认为有10辆汽车,x是千米/小时的速度,y是英里/小时的速度,等等。

    第一步分别求xy的平均值,然后对于所有的样例,都减去对应的均值。这里x的均值是1.81,y的均值是1.91,那么一个样例减去均值后即为(0.69,0.49),得到

          

    第二步,求特征协方差矩阵,如果数据是3维,那么协方差矩阵是

           

    这里只有xy,求解得

           

    对角线上分别是xy的方差,非对角线上是协方差。协方差大于0表示xy若有一个增,另一个也增;小于0表示一个增,一个减;协方差为0时,两者独立。协方差绝对值越大,两者对彼此的影响越大,反之越小。

    第三步,求协方差的特征值和特征向量,得到

          

    左边是两个特征值,右边是对应的特征向量,特征值0.049对应特征向量为(-0.735,-0.677)T,这里的特征向量都归一化为单位向量。

    第四步,将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。

     这里特征值只有两个,我们选择其中最大的那个,这里是1.284,对应的特征向量是(--0.677,0.735)T

    第五步,将样本点投影到选取的特征向量上。假设样例数为m,特征数为n,减去均值后的样本矩阵为DataAdjust(m*n),协方差矩阵是n*n,选取的k个特征向量组成的矩阵为EigenVectors(n*k)。那么投影后的数据FinalData

          

    这里是

          FinalData(10*1)= DataAdjust(10*2矩阵)×特征向量(--0.677,0.735) T

    得到结果是

            

    这样,就将原始样例的n维特征变成了k维,这k维就是原始特征在k维上的投影。

    上面的数据可以认为是learnstudy特征融合为一个新的特征叫做LS特征,该特征基本上代表了这两个特征。

    上述过程有个图描述:

    正号表示预处理后的样本点,斜着的两条线就分别是正交的特征向量(由于协方差矩阵是对称的,因此其特征向量正交),最后一步的矩阵乘法就是将原始样本点分别往特征向量对应的轴上做投影。

    如果取的k=2,那么结果是

    这就是经过PCA处理后的样本数据,水平轴(上面举例为LS特征)基本上可以代表全部样本点。整个过程看起来就像将坐标系做了旋转,当然二维可以图形化表示,高维就不行了。上面的如果k=1,那么只会留下这里的水平轴,轴上是所有点在该轴的投影。

    这样PCA的过程基本结束。在第一步减均值之后,其实应该还有一步对特征做方差归一化。比如一个特征是汽车速度(0到100),一个是汽车的座位数(2到6),显然第二个的方差比第一个小。因此,如果样本特征中存在这种情况,那么在第一步之后,求每个特征的标准差σ,然后对每个样例在该特征下的数据除以σ。

    归纳一下,使用我们之前熟悉的表示方法,在求协方差之前的步骤是:

          

    其中xi是样例,共m个,每个样例n个特征,也就是说xin维向量。是第i个样例的第j个特征。u是样例均值。σj是第j个特征的标准差。

    整个PCA过程貌似及其简单,就是求协方差的特征值和特征向量,然后做数据转换。但是有没有觉得很神奇,为什么求协方差的特征向量就是最理想的k维向量?其背后隐藏的意义是什么?整个PCA的意义是什么?

3.最大方差理论

    在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。如前面的图,样本在横轴上的投影方差较大,在纵轴上的投影方差较小,那么认为纵轴上的投影是由噪声引起的。

   因此,最好的k维特征是将n维样本点转换为k维后,每一维上的样本方差都很大。

    比如下图有5个样本点:(已经做过预处理,均值为0,特征方差归一)

    下面将样本投影到某一维上,这里用一条过原点的直线表示(前处理的过程实质是将原点移到样本点的中心点)。

    假设选择两条不同的直线做投影,那么左右两条中哪个好呢?根据我们之前的方差最大化理论,左边的好,因为投影后的样本点之间方差最大。

    这里先解释一下投影的概念:

    红色点表示样例xi,蓝色点表示xiu上的投影,u是直线的斜率也是直线的方向向量,而且是单位向量。蓝色点是xiu上的投影点,离原点的距离是<xi,u>由于这些样本点(样例)的每一维特征均值都为0,因此投影到u上的样本点(只有一个到原点的距离值)的均值仍然是0。

    回到上面左右图中的左图,我们要求的是最佳的u,使得投影后的样本点方差最大。

    由于投影后均值为0,因此方差为:

          

          

中间那部分就是样本特征的协方差矩阵么(xi的均值为0,一般协方差矩阵都除以m-1,这里用m)。

      

        

     由于u是单位向量,即uTu,上式两边都左乘u得,

        

    即

        

    λ就是∑的特征值,u是特征向量。最佳的投影直线是特征值λ最大时对应的特征向量,其次是第二大对应的特征向量,依次类推。

     因此,我们只需要对协方差矩阵进行特征值分解,得到的前k大特征值对应的特征向量就是最佳的k维新特征,而且这k维新特征是正交的。得到前ku以后,样例xi通过以下变换可以得到新的样本。

          

    其中的第j维就是xiuj上的投影。 通过选取最大的ku,使得方差较小的特征(如噪声)被丢弃。

五、PCA—最小均方误差解释

    假设有这样的二维样本点(红色点),回顾我们前面探讨的是求一条直线,使得样本点投影到直线上的点的方差最大。本质是求直线,那么度量直线求的好不好,不仅仅只有方差最大化的方法。再回想我们最开始学习的线性回归等,目的也是求一个线性函数使得直线能够最佳拟合样本点,那么我们能不能认为最佳的直线就是回归后的直线呢?回归时我们的最小二乘法度量的是样本点到直线的坐标轴距离。比如这个问题中,特征是x,类标签是y。回归时最小二乘法度量的是距离d。如果使用回归方法来度量最佳直线,那么就是直接在原始样本上做回归了,跟特征选择就没什么关系了。

    因此,我们打算选用另外一种评价直线好坏的方法,使用点到直线的距离d’来度量。

    现在有n个样本点,每个样本点为m维(这节内容中使用的符号与上面的不太一致,需要重新理解符号的意义)。将样本点在直线上的投影记为,那么我们就是要最小化

          

    这个公式称作最小平方误差(LeastSquared Error)。

    而确定一条直线,一般只需要确定一个点,并且确定方向即可。

    第一步确定点:

    假设要在空间中找一点x0来代表这n个样本点,“代表”这个词不是量化的,因此要量化的话,我们就是要找一个m维的点x0,使得

           

    最小。其中J0(x0)是平方错误评价函数(squared-error criterion function),假设mn个样本点的均值:

          

    那么平方错误可以写作:

         

    后项与x0无关,看做常量,而J0(x0)>0或J0(x0)=0,因此最小化J0(x0)时,x0=mx0是样本均值。

第二步确定方向:

    我们从x0拉出要求的直线(这条直线要过点m),假设直线的方向是单位向量e。那么直线上任意一点,比如就可以用点me来表示:

           

   

    我们重新定义最小平方误差:

          

    

          

    我们首先固定e,将其看做常量,||e||=1,然后对ak进行求导,得

          

    这个结果意思是说,如果知道了e,那么将与e做内积,就可以知道了在e上的投影离m的长度距离,不过这个结果不用求都知道。

    然后是固定ak,对e求偏导数,我们先将上式代入J1,得

          


    其中

          

    与协方差矩阵类似,只是缺少个分母n-1,我们称之为散列矩阵(scattermatrix)。

    然后可以对e求偏导数,但是e需要首先满足||e||2=1,引入拉格朗日乘子λ,来使etSe大(J1最小),令

          

    从不同的思路出发,最后得到同一个结果,对协方差矩阵求特征向量,求得后特征向量上就成为了新的坐标,如下图:

    这时候点都聚集在新的坐标轴周围,使用的最小平方误差的意义就在此。

六、总结和讨论

1.PCA技术的一大好处是对数据进行降维的处理。我们可以对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度的保持了原有数据的信息。

2.PCA技术的一个很大的优点是,它是完全无参数限制的。在PCA的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。但是,这一点同时也可以看作是缺点。如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。

3.有时数据的分布并不是满足高斯分布。在非高斯分布的情况下,PCA方法得出的主元可能并不是最优的。在寻找主元时不能将方差作为衡量重要性的标准。要根据数据的分布情况选择合适的描述完全分布的变量,然后根据概率分布式来计算两个向量上数据分布的相关性。


参考资料:

http://www.360doc.com/content/13/1124/02/9482_331688889.shtml

http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html

http://blog.163.com/yuyang_tech/blog/static/21605008320135410316662/

http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html

http://blog.csdn.net/dlutbrucezhang/article/details/8718366








没有更多推荐了,返回首页