PCA(Principal Components Analysis),它是一种“投影(projection)技巧”,就是把高维空间上的数据映射到低维空间。比如三维空间的一个球,往坐标轴方向投影,变成了一个圆。球是3维的,圆是2维的。在球变成圆的这个投影过程中,丢失了原来物体(球)的一部分“性质”---圆不是球了,只有面积没有体积了;也保留了原来物体的一部分性质---圆 和 球 还是很像的……
而对于一个训练样本y而言,假设它有M个特征(M维),y={y1, y2,...yM},通过PCA,进行投影,降维成D维(M>D)。为什么要降维?最主要的两个原因是:
①可视化,我们只能看到一维、二维、三维空间上的物体,当某物体需要4维或以上特征表示时,只能想象了……
②特征选择(feature selection),比如说采集到的某个样本 由 20维特征 组成,其中有一些特征属于“噪音(noise)",而由于某些原因,我们不想要这些“噪音”。又比如说,存在特征冗余,描述一个球,可以用如下特征:(体积、面积、直径、半径),其实我只需要知道半径、直径、面积、体积这些都可以通过公式求出来。因此,体积、面积 、直径这些特征,相对于半径来说,是冗余的特征。
如何降维?
PCA降维的目标就是:找到一种投影方式,将原来的M维样本y 变成 D维样本x,并且使得投影之后的D维样本x,能够尽可能多地保存原来的样本y中的信息。由于将y投影成x,可以有不同的投影方向,那哪个投影方向比较好呢?即,能够尽可能多地保存原来的样本y中的信息呢?
maintains the characteristics of the original object as much as possible
可以使用方差来衡量投影方向的好坏。如下图:
上图中有“两团点”,在聚类算法中称为有两个聚簇。将这两个簇中的点 往B方向投影,B箭头指向的那条直线上的点,表示 投影之后得到的新样本点,已经看不出有两个簇了。而此时,得到的方差是σ2B=8.35.
往A方向投影,A箭头指向的那条直线上的点,还能够明显地看出有 两类,即还能够保存“两个簇“的结构,这说明投影方向A比B 要好,因为原来的样本点有两个簇,而往A方向投影后,还能看出有两个簇。此时得到的方差σ2A=17.37.
这表明:可以使用 投影后的所有样本点的 方差大小,来衡量投影方向的好坏!
假设有N个样本点,用Y表示,每个样本点是M维的。现在使用PCA降维,降成D维的,用X表示。X中还是有N个样本点,只是每个样本的维数变成D维的了。
这种投影方式,用矩阵乘法表示:XN*D=YN*M*WM*D
对于投影之后的样本x 的第d个特征xnd而言,有:
xn1=w1T*yn , xn2=w2T*yn ,.... xnd=wdT*yn
xn=(xn1,xn2,...xnd)T=WT*yn
也就是说,PCA降维的本质是:找到一个M*D维的矩阵W。可以对W=(w1,w2,...wd)进行一些约束:||wi||=1,且wTi*wj=0 (j != i),只要W满足:X=Y*W即可。
在数学上,PCA投影是一种线性变换。因为,根据线性变换的定义:
给定函数L: Rn-->Rm,如果:
- 对于任意的x belongs to Rn,a 属于实数R,有L(a*x)=a*L(x)
- 对于任意的x,y belongs to Rn,有L(x+y)=L(x)+L(y)
则称函数L是一个线性变换。线性变换对加法和数乘封闭。上面的条件1,表示L对数乘封闭;条件2,表示L对加法封闭。
而对于矩阵A而言, A*x=b,是满足线性变换的定义的。比如,对于向量x和y,A(x+y)=A*x + A*y;对于实数a,A(a*x)=a*A*x
将矩阵A 作用于 向量x 上,即矩阵A与向量x相乘,就相当于 函数L 作用于x上。
因此,由xn=(xn1,xn2,...xnd)T=WT*yn,可知:PCA是一个线性变换。
回到公式:XN*D=YN*M*WM*D,如何选择合适的W矩阵呢?----使用方差最大来确定W矩阵。因为 方差 可以 衡量投影方向的好坏。
而将矩阵A与向量u相乘,其实就是改变了向量u的方向和大小而已。但是,如果向量u是矩阵A的特征向量,那么 A*u 不会改变向量u的方向。如下图:
在求解 投影后的样本集X 的方差之前,先假设原始样本集Y的每一维特征的均值为0(m个0),即yˉˉ=[0,0,...0]T。为了简化讨论,假设将原来的M维降成 D=1维。此时,W矩阵就退化为只有一个向量。即寻找一个向量w,对于Y中任何一个样本yn=(yn1,yn2,...ynm),有xn =(xn1,xn2,...xnd)=(xn1)= wT*yn
根据公式:xn=wT*yn 得到样本集X的均值为:
再根据方差的定义,和 X的均值为0,故X的方差为:
对于样本集Y而言,根据样本协方差矩阵的定义 和 y的均值yˉˉ=0,可知:C与样本协方差矩阵密切相关。
因此,要想最大化X的方差,就是最大化wTCw,而C是一个确定的值---由Y的协方差矩阵决定了。因此,我们的目标是尽可能地使w大,而根据我们前面的约束:||w||=1。故最大化wTCw可以使用拉格朗日乘子,转化成如下的约束优化问题:
通过求偏导数,求得:使L最大化 的w的公式:Cw=λw。而这刚好是特征向量的定义,λ是矩阵C的特征值,w则是对应的特征向量。
由于 ||w||=wTw=1,σ2 = wTCw,左边乘上wTw,得到:σ2 *wTw=wTCw,也即:σ2w=Cw,因此方差σ2就是特征值λ,而最大化方差,其实就是选择矩阵C的最大化的特征值而已,相应的变换向量w,其实就是特征值对应的特征向量。
因此,更一般地,将原来的样本集Y,M维特征 降到 D维,其实就是计算矩阵C(与Y的协方差矩阵息息相关)的特征值和特征向量,由于 C 是一个M*M维的矩阵,因此一共有 m 个特征值,及其对应的 m 个特征向量。而我们只需要选择 前D个 最大的 特征值 对应的特征向量,并将之 作为线性变换矩阵 W 即可。
参考文献:《a first course in machine learning》第七章
原文:http://www.cnblogs.com/hapjin/p/6728697.html