漫谈Principal component analysis(主成分分析)

在很多数据的表示中,往往存在着大量的冗余现象。如为了表示身高,用2台机器测量,一台是以cm为单位,另一台则是以m为单位。比如我171cm,同样也是1.70m,因此可以用一个2维的向量表示(171,1.70)(机器的不同可以导致存在些许误差)。同样,某A的测量结果分别是176cm和1.74m,因此A的身高可以表示为(176,1.74)。这样,就可以得到一份关于身高的数据。但是,很显然,这份数据中存在着大量的冗余现象,因为cm和m是可以相互转化的,只需其中一项就可以大致计算出另一项,意思是说只需要用一个1维的向量就可以表示了。比如我的身高只要用171表示就行,要求出我有多少m,用171除以100即可,即便1.71和实际的测量结果1.70稍有不同,但那都是次要的。只要抓住了这个本质的元素,就能大概知道各个机器的测量结果,即关于该人的身高的各个信息。pca就是用来寻找这些本质的几个元素,来简化数据集。

在数学上,设原数据集用一个m×n维的矩阵X表示,矩阵的每一列代表一个数据,即总共有n组数据,第i个数据记作\overrightarrow{X_i},是一个m维的向量。

X=\begin{pmatrix}x_{1,1} & x_{1,2} & \cdots & x_{1,n} \\ x_{2,1} & x_{2,2} & \cdots & x_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ x_{m,1} & x_{m,2} & \cdots & x_{m,n}\end{pmatrix}

\overrightarrow{X_i}=(x_{1,i},x_{2,i},\dots ,x_{m,i})'

PCA的任务就是求一个线性变换P(m×m),使得\overrightarrow{Y_i}=P\overrightarrow{X_i},且用Y表示更能揭示数据的本质,是更好的一种表示。由于一个变换既可以看成是一个基下的坐标变换,也可以看成是基的变换,因此PCA的问题也可以叙述成,找到一组新的基,使得数据在该基下能有更好的表示。

什么样的表示是更好的一种表示,更能揭示数据的本质的表示呢?当然是没冗余的表示!那么怎么样才是冗余的表示?如身高一例,假设表示身高的2维向量是(x_1,x_2),从大量的数据中容易发现x_1\approx 100\times x_2。这说明表示数据的向量的每一维分量间存在着高度的相关性(线性相关),这样的数据当然就是冗余的。为此,引入协方差矩阵:m维随机变量(X_1,X_2,\dots ,X_m)的协方差矩阵为

C=\begin{pmatrix}c_{11} & c_{12} & \cdots & c_{1m} \\ c_{21} & c_{22} & \cdots & c_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ c_{m1} & c_{m2} & \cdots & c_{mm}\end{pmatrix}

其中c_{ij}=Cov(X_i,X_j)=E\{[X_i-E(X_i)][X_j-E(X_j)]\}。可以发现,协方差矩阵是一个对称矩阵,其对角元素就是对应随机变量的方差,i行j列的元素即是随机变量X_iX_j的协方差。

回到原问题,数据集X中每一行可以看成是一个随机变量,这一行的值即为该随机变量的n个值。令X的m个行向量记作\overrightarrow{x_i}(注意和列向量的大小写区别),为了方便,不妨设数据的每一维都平均值都为0,这m维随机变量的协方差矩阵也就是:

\begin{array}{l}c_{ij} & =\frac{1}{n-1}\sum_{k=1}^n\left[(x_{ik}-\frac{1}{n}\sum_{l=1}^nx_{il})(x_{jk}-\frac{1}{n}\sum_{l=1}^nx_{jl})\<br />
ight] \\ & =\frac{1}{n-1}\overrightarrow{x_i}\overrightarrow{x_j}'\end{array}

C_X=\frac{1}{n-1}XX'

这里分母为什么是n-1而不是n,可能是因为这里是统计而不是概率论吧。。

要使数据不冗余,意思也就是说应该使任意2维的协方差为0,同时自己本身的方差越大越好,即协方差矩阵应为一对角矩阵。假设已经用线性变换PX变换成Y,即Y=PX。新的数据集的协方差矩阵则是

C_Y=\frac{1}{n-1}YY'=P[\frac{1}{n-1}XX']P'=PC_XP'

若找到了这样的P使得C_Y是一个对角矩阵,就达到了目的!并且C_Y中的某个对角元素越大,就说明对应维的方差就越大,也就说明这一维越重要!因此,就可以只取Y的m维中的某k个最大的维,来近似表示数据,因为这k维是主要的成分!这样就可以实现数据的降维而不失太多的数据的准确率

最后的问题,满足上述条件的P存在吗?若存在,要如何求呢?可以发现C_X是一个实对称矩阵,由线性代数知识可以知道,存在正交矩阵P

P=(\overrightarrow{\eta_1},\dots ,\overrightarrow{\eta_m})'

使得

C_Y=PC_XP'=diag(\lambda_1,\dots ,\lambda_m)

其中\lambda_iC_X的特征值,\overrightarrow{\eta_i}则是其对应的特征向量。

由于P是正交矩阵,那么它的行向量可以看成是一组标准正交基。再来看下变换

\begin{array}{l}\overrightarrow{Y_i} & =P\overrightarrow{X_i} \\ & =(\overrightarrow{\eta_1}\cdot \overrightarrow{X_i},\dots ,\overrightarrow{\eta_m}\cdot \overrightarrow{X_i})'\end{array}

由点积的意义可知,该变换是把原向量投影到一组新基上的重新表示!

最后,举一个非常简单的例子来说明PCA的应用,设有3个2维的数据:(1,2),(2,4),(3,6)。很显然,这个数据的表示非常不好,高度相关,用PCA方法来简化它。首先使得每一维的平均值都为0,为此,首先计算第一维的平均值为(1+2+3)/3=2,同样,第二维的平均值为4。然后把每一维的数值都减去该维的平均值,3个数据就变为(-1,-2),(0,0),(1,2)。于是可以得到数据集矩阵

X=\begin{pmatrix}-1 & 0 & 1 \\ -2 & 0 & 2\end{pmatrix}

然后,求得协方差矩阵

C_X=XX'=\begin{pmatrix}2 & 4 \\ 4 & 8\end{pmatrix}

容易求得该矩阵的特征值分别为5和0,对应的单位特征向量分别为\frac{1}{\sqrt{5}}(1,2)\frac{1}{\sqrt{5}}(-2,1),因此变换P

\frac{1}{\sqrt{5}}\begin{pmatrix}1 & 2 \\ -2 & 1\end{pmatrix}

最后得到

Y=\begin{pmatrix}-\sqrt{5} & 0 & \sqrt{5} \\ 0 & 0 & 0\end{pmatrix}

新得到的表示中,第一维是最主要的性质,事实上,由于该例的特殊性,第二维甚至可以完全不要也可以完整的还原数据。



2 thoughts on “漫谈Principal component analysis(主成分分析)

  1. 最小化重构误差,方差最大,经典的数据降维算法~来膜拜了呀~原来你换地方了~
    好久没有写东西~惭愧丫,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*