`

再谈降维算法--PCA算法

阅读更多

文章由两部分构成,第一部分主要讲解PCA算法的步骤,第二部分讲解PCA算法的原理。

 

那么首先进入第一部分

                                   --PCA算法的步骤



① 样本矩阵X的构成

    假设待观察变量有M个,其实相当于一个数据在M维各维度上的坐标,我们的目标是在保证比较数据之间相似性不失真的前提下,将描述数据的维度尽量减小至L维(L<M)。

    样本矩阵X在这里用x1,x2,...,xN共N个数据(这些数据都是以列向量的形式出现)来表示,那么X=[xx... xN]MxN显而易见。

 

② 计算样本X均值

    计算第m维(m=1,2,...,M)的均值如下:

        

             

 

③ 计算观察值与均值的偏差

    在每一维上,用当前值X[m,n]减去u[m],用矩阵运算表示如下:

    

       

    明显,h是一行向量,u是一列向量。

 

④ 计算协方差矩阵

    根据协方差矩阵的计算定义wikihttp://en.wikipedia.org/wiki/Covariance_matrix

    我们认为bi代表B的第i行,那么由协方差矩阵

                  

 

    推知 

    <>表示向量的内积,也就是每一项的积之和。

 

⑤ 计算协方差矩阵C的特征值和特征向量

    若XA=aA,其中A为一列向量,a为一实数。那么a就被称为矩阵X的特征值,而A则是特征值a对应的特征向量。    

    顺便扯一下,在matlab里面,求解上述A以及a,使用eig函数。如[D,V] = eig(C),那么D就是n个列特征向量,而V是对角矩阵,对角线上的元素就是特征值。

 

⑥ 排序

    将特征值按从大到小的顺序排列,并根据特征值调整特征向量的排布。

    D'=sort(D);V'=sort(V);

 

⑦ 计算总能量并选取其中的较大值

    若V'为C的对角阵,那么总能量为对角线所有特征值之和S。

    由于在步骤⑥里面已对V进行了重新排序,所以当v'前几个特征值之和大于等于S的90%时,可以认为这几个特征值可以用来"表征"当前矩阵。

    假设这样的特征值有L个。

 

⑧ 计算基向量矩阵W

    实际上,W是V矩阵的前L列,所以W的大小就是 MxL 。

 

⑨ 计算z-分数(这一步可选可不选)

     Z[i,j]=B[i,j]/sqrt(D[i,i])

 

⑩ 计算降维后的新样本矩阵

 

                

     W*表示W的转置的共轭矩阵,大小为 LxM , 而Z的大小为 MxN , 所以Y的大小为 LxN , 即降维为 N 个 L 维向量。

     

现在进入第二部分

                                   --PCA算法的原理



 首先让我们来了解一下特征值和特征向量的几何意义

 

根据上面步骤⑤的说法,很明显的发现一个特定的变换,它的特征向量是这样一种向量,它经过这种特定的变换后保持方向不变,只是进行长度上的伸缩而已(再想想特征向量的原始定义Ax=cx, cx是方阵A对向量x进行变换后的结果,但显然cx和x的方向相同)。

一个变换(矩阵)可由它的所有特征向量完全表示,而每一个向量所对应的特征值,就代表了矩阵在这一向量上的贡献率——说的通俗一点就是能量(power)。

请看,当x=c1·x1+c2·x2时,而x1和x2均为矩阵A的特征向量(λ1和λ2分别为他们的特征值),那么Ax=c1·λ1·x1+c2·λ2·x2 ,只不过是在两基方向上的投影长度发生了变化。

 

我们知道,一个变换可由一个矩阵乘法表示,那么一个空间坐标系也可视作一个矩阵,而这个坐标系就可由这个矩阵的所有特征向量表示,用图来表示的话,可以想象就是一个空间张开的各个坐标角度,这一组向量可以完全表示一个矩阵表示的空间的“特征”,而他们的特征值就表示了各个角度上的能量(可以想象成从各个角度上伸出的长短,越长的轴就越可以代表这个空间,它的“特征”就越强,或者说显性,而短轴自然就成了隐性特征),因此,通过特征向量/值可以完全描述某一几何空间这一特点,使得特征向量与特征值在几何(特别是空间几何)及其应用中得以发挥。

                                       

假设2x2矩阵的两个特征向量如上图红色虚线和绿色线所示,那么当椭圆的长轴远大于短轴时,可以将2维的点降维成一维,及当前向量在长轴上的投影值。

 

大家可以看看这篇blog,写的蛮不错的。http://blog.csdn.net/hexbina/article/details/7525850

 

再举一个例子,如果大家再引入一个M维的向量p和已经降维过后的向量q比较的话,需要先减去②里面每一维的均值,然后除以每一维的特征值的平方根,再乘以W*就OK了。

用公式表示为:

                                     

 

转载请注明blue_lghttp://www.cnblogs.com/blue-lg/archive/2012/07/23/2604995.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics