最近一直在学习卷积神经网络,几次看到PCA,只知道它用来降维,没有深究。今天又看到,终于忍不住,搞清楚了它的工作原理。下面就来谈谈我对PCA如何进行降维的理解。
假设数据是二维的,五组数据,分别是{(1,1),(1,3),(2,3),(4,4),(2,4)},用向量表示X=(1,1,2,4,2),
Y=(1,3,3,4,4),均表示列向量。注意:因为我们是用来降维,所以一个向量表示一个维度,也可以看做一个字段,而不是一个样本点。
1.首先先挂几个概念:
(1)基:线性空间V,若存在一组线性无关的向量a1......an,使空间中的任一向量可由它们线性表示,则称向量组(a1,a2,......,an)为V的一组基,基向量所含向量的个数为V的维数。
(2)基变换:两组基A=(a1,a2,......,an),B=(b1,b2,......,bn),则B=AP,P为A到B的过渡矩阵。
设向量Q在两组基下的坐标分别是X,Y
Q=AX,Q=BY,结合B=AP,可推出X= PY
用例子表示:我们取(1,1)和(-1,1),通常是单位正交基,主要是方便计算,(1/√2,1/√2),(-1/√2,1/√2)。将(2,3)变换到该基上
注意:在求变换之后的坐标时是要用原始坐标乘基向量组成的矩阵的逆矩阵!
在PCA中,就是运用的这种变换,只是基的数量减少了,从而达到降维的效果。
(3)协方差
在概率论和数理统计中学过样本均值,标准差,方差,其公式如下:
上述概念用来描述一维数据,当我们想要描述多维数据之间的关系时,就要引入协方差:
假设两个变量X,Y,期望分别为E(X)=u,E(Y)=v,则两个变量之间的协方差为:
也可以表述为:
当两个变量相互独立时,协方差为0.
为了更好的表达,选用三维,协方差矩阵如下:
由协方差的性质:Cov(X,Y)=Cov(Y,X),得出协方差矩阵其实是一个实对称阵。
在降维过程中,我们尽可能的保留数据的原始信息,去除冗余信息。协方差的作用就在于帮助我们选择基使降维之后各字段两两之间相互独立,即协方差等于0。
2.PCA的降维过程
(1)原始数据:m条n维数据,组成n*m矩阵,每一行为一个字段,每一列为一条数据。
(2)对每一行进行0均值化,即用每一行的每个值减去这一行的均值。(在(3)中会说明为什么要这么做)
令X等于0均值化之后的矩阵。
(3)求协方差矩阵
用上述第二个公式:
对于(2)中的零均值的作用就是令uv项等于0(u,v表示每一个字段(即每一行)的均值),简化计算过程。
我们只需要求E(XY)。
上文中提到降维后尽可能的让字段之间相互独立,即两两字段之间的协方差为0。所以接下来要考虑的就是如何让协方差矩阵中除了对角线以外的其他元素都变成0。此时协方差矩阵就变成了对角阵。
(4)求协方差矩阵的特征值和特征向量
在线代中已经学习了求一个方阵的特征值和特征向量,很简单,就不再赘述哈
n*n的协方差矩阵作为实对称阵,一定能求出来n个单位正交特征向量。用一行来表示一个特征向量,按特征值由大到小排列特征向量,组成矩阵P,P就是我们变换矩阵。降至k维就取前k行与原始数据相乘得到降维之后的数据矩阵。
3.实例说明降维过程
以下是我用一开始说明的例子写的降维过程:
参考:http://blog.csdn.net/xiaojidan2011/article/details/11595869
http://wiki.mbalib.com/wiki/%E5%8D%8F%E6%96%B9%E5%B7%AE
第一次写博客,有很多不足的地方,欢迎指教!