PCA笔记整理

来源:互联网 发布:嘉兴学院网络客户端 编辑:程序博客网 时间:2024/06/06 08:40

这是学习张洋博客对PCA算法介绍时的笔记。原博客连接:
http://blog.codinglabs.org/articles/pca-tutorial.html
如理解中不知是否有错,哪位大神看到请不吝指教,纠错中学的更多。

目标:将高维特征降维,同时尽可能多的保留原始信息。
特例:二维降到一维怎么做?二维空间的点投影到一条直线上,如图1
  图1
图1
投影要求:各数据点投影后尽量不要重叠(信息损失,例如如果投影到x轴,会出现点的投影重合),那么就可以要求投影后尽可能分散
分散衡量:方差可以描述这种分散度。也就是说,我们的目标成为:找到一条直线,使得数据点在该直线上的投影间的方差尽可能大(如图中斜线)。
扩充到多维:如果是三维将到二维,那么三维数据会投影在一个二维平面上,我们的目标就是能够找到一个平面,使得投影后数据尽可能的分散。如果只是考虑最大方差,那么找到的平面可能使得投影数据集中在该平面的一条直线上,从而损失一些信息。因此,我们希望找到平面能够使得数据在投影后分散在该平面上。
协方差:协方差描述的是各个分量之间的相关性,投影后个分量之间的相关性越小,在平面的分散度越大。各个分量间的相关性为0,最为理想,这表示各个分量相互独立,所携带的信息不存在重复。
多维投影要求:也就是说,对于多维的投影,我们的目标是;投影后个分量之间的协方差为0,分量的方差则尽可能的大。
协方差矩阵:协方差矩阵的对角线描述的是分量的方差,非对角线上则表示各个分量间的协方差。因此,我们的目标就成为:投影后的协方差矩阵除对角线上元素外都为0.即,协方差矩阵为对角阵。对角线上的元素按大小从上到下排列,降维时我们取前k行就行了。
以上我们了解了投影要求,接下来的问题是向量空间的投影如何理解,该怎么实现?
投影:这里所谓投影,可以理解为坐标变换。更改坐标轴,然后计算数据点相应的新坐标,要求新坐标中有些维的信息可以忽略。比如图1中,以斜线为横轴,其垂直线为纵轴,那么图中数据点的新坐标都是(x,0)的形式,从而纵轴可以忽略。
向量坐标:在向量空间中,数据点的位置是通过确定一组基,然后给出数据点在基所在的各个直线上的投影值来表示。例如图2中,基为(1,0)和(0,1),向量(3,2)在该基下的坐标为(3,2);而图3中,基为(1(2)1(2))和(-1(2))1(2)),向量(3,2)在该基下的坐标(5(2,-1(2)). 那么,如何获得向量在某个基下的坐标呢?这个问题实际上是如何获得向量在基所在的各直线上的投影矢量长度?
图2
图2
图3

图3
内积和向量投影:
内积:两个维数相同的向量的内积被定义为:
(a1,a2,,an)T(b1,b2,,bn)T=a1b1+a2b2++anbn
假设A和B是两个n维向量,我们知道n维向量可以等价表示为n维空间中的一条从原点发射的有向线段,为了简单起见我们假设A和B均为二维向量,则A=(x1,y1)B=(x2,y2)。则在二维平面上A和B可以用两条发自原点的有向线段表示,见图4
图4
图4
我们从A点向B所在直线引一条垂线。我们知道垂线与B的交点叫做A在B上的投影,再设A与B的夹角是a,则投影的矢量长度为|A|cos(a),其中|A|=(x21+y21)是向量A的模,也就是A线段的标量长度。

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

到这里还是看不出内积和这东西有什么关系,不过如果我们将内积表示为另一种我们熟悉的形式:
AB=|A||B|cos(a)
现在事情似乎是有点眉目了:A与B的内积等于A到B的投影长度乘以B的模。再进一步,如果我们假设B的模为1,即让|B|=1,那么就变成了:
AB=|A|cos(a)
也就是说,设向量B的模为1,则A与B的内积值等于A向B所在直线投影的矢量长度!
因此要获取向量在新基下的坐标,(也就是在新基各直线上的投影矢量值),若新基的模为1,我们只要分别计算向量与新基的内积就行了。
坐标变换与矩阵:
我们可以利用矩阵相乘完成向量的坐标变换。这该怎么理解?设(a1,a2)b1,b2 是一组基,那么根据上面所述的内积的几何意义,向量(x,y)在该基下的坐标就是(a1x+a2y,b1x+b1y)。接着,我们来看矩阵和向量相乘:

(a1b1a2b2)(xy)=(a1x+a2yb1x+b2y)

发现什么了?矩阵乘法可以进行向量坐标变换,也就是说,可以完成向量在给定基下的投影。只需要将基按行组成举证,向量表示成列向量,然后相乘。
如果有N个向量需要做变换该怎么办?将N个列向量组成矩阵,然后与基矩阵相乘。
(a1b1a2b2)(x1y1x2y2xnyn)=(a1x1+a2y1b1x+b2ya1x2+a2y2b1x2+b2y2a1xn+a2ynb1xn+b2yn)

目标再描述: 基于上面的描述,我们整理思路。要达到的目的是将高维特征降维,同时尽可能多的保留原始信息。那么要对原始的特征矩阵进行变换,也就是为原始的特征向量找到等价表示,而变换后的矩阵对应的协方差矩阵应该除对角线上元素外都为0. 将该对角矩阵按照对角线上元素从大到小进行排列,方便降维时取前K行。
PCA算法描述:
设有m条n维数据。
1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵C=1mXXT
4)求出协方差矩阵的特征值及对应的特征向量(产生标准正交基)
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PX即为降维到k维后的数据

0 0
原创粉丝点击