科普:PCA (Principle Component Analysis)

PCA (Principle Component Analysis),主成分分析,是用的最广泛的数据预处理方法之一。同时PCA是一个almost always works的经典方法,基本上几乎所有的数据用PCA处理过以后再做后续的分类,往往会得到精度提升,不像很多其他方法只适用于某些数据而不适用于另一些数据。为什么PCA这么有效呢?我想主要是因为数据中普遍多多少少存在噪声,用PCA抽取主成分以后,噪声被滤除很多,使得分类变得更容易。另外,一些模型本身对数据空间有一些bias,用PCA做变换之后也会有影响,但这里的影响比较不确定。

说回PCA本身,PCA的想法是把数据从原空间投影到一个低维空间,使得这些低维空间上的投影(1)Variance最大,或者(2)Reconstruction error最小。把数据从高维向低维投影,这本身便是一个去噪的过程。因为维度减小,必有信息损失,我们希望去掉噪声的信息,保留有用的信息。这里提到的两个约束条件,variance其实代表了信息量,设想投影到某一个维度上variance很小,表示数据在这个维度上基本上没怎么变化,这就说明这个维度不是一个很有信息量的维度。而reconstruction error则更直观了,它就表示损失的信息量。降维投影和最优化约束二者综合起来,达到去掉无用信息,尽可能保留有用信息的目的。可以证明最大variance和最小reconstruction error这两者是等价的。

PCA也有可能失败,设想另一个极端,如果数据中噪声非常大,而有用信息非常微弱,则这里大variance的维度是噪声的维度,降维时反而是有用信息被去掉了。所幸的是,我们所遇到的绝大部分数据中噪声都是相对小的,要不然分析数据也就没有希望了。

这里介绍最大variance约束下PCA的推导。

一个向量\(\mathbf{x}\in\mathbb{R}^D\)在一个方向\(\mathbf{w}\)上的投影是\(\left(\mathbf{x}^\top\frac{\mathbf{w}}{||\mathbf{w}||}\right)\frac{\mathbf{w}}{||\mathbf{w}||}\),其中\(\frac{\mathbf{w}}{||\mathbf{w}||}\)是单位长方向向量,\(\mathbf{x}^\top\frac{\mathbf{w}}{||\mathbf{w}||}\)是\(\mathbf{x}\)的投影在这个方向上的长度。若\(\mathbf{w}\)为单位向量,投影可简化为\((\mathbf{x}^\top\mathbf{w})\mathbf{w}=(\mathbf{w}\mathbf{w}^\top)\mathbf{x}\). 进一步,如果投影到一个低维空间,而非一条线(一维空间),设该空间的一组单位正交基为\(\mathbf{W}=(\mathbf{w}_1, ..., \mathbf{w}_K)^\top\),其中\(\forall k, \mathbf{w}_k^\top\mathbf{w}_k=1\),而\(\forall k\neq j, \mathbf{w}_k^\top\mathbf{w}_j=0\)。则\(\mathbf{x}\)在该空间的投影\(\hat{\mathbf{x}}=\sum_k \alpha_k \mathbf{w}_k\)满足\(\mathbf{x}=\hat{\mathbf{x}}+\mathbf{x}_\perp\),\(\mathbf{x}_\perp\)为垂直分量,因此对任意k,有

$$\mathbf{w}_k^\top\mathbf{x}=\sum_j \alpha_j \mathbf{w}_k^\top\mathbf{w}_j + \mathbf{w}_k^\top\mathbf{x}_\perp=\alpha_k$$

从而

$$\hat{\mathbf{x}} = \sum_k (\mathbf{w}_k^\top\mathbf{x})\mathbf{w}_k = \left(\sum_k \mathbf{w}_k\mathbf{w}_k^\top\right)\mathbf{x}=\mathbf{M}\mathbf{x}$$

其中\(\mathbf{M}=\sum_k \mathbf{w}_k\mathbf{w}_k^\top\).

设给定数据集\(\mathbf{X}=(\mathbf{x}_1, ..., \mathbf{x}_n)^\top\),将每一个数据点投影到K维空间,得到的投影数据集\(\hat{\mathbf{X}}=(\hat{\mathbf{x}}_1, ..., \hat{\mathbf{x}}_n)^\top\)的variance为

$$\mathrm{Var}(\hat{\mathbf{X}})=\frac{1}{n}\sum_i (\hat{\mathbf{x}}_i - \bar{\hat{\mathbf{x}}})^\top(\hat{\mathbf{x}}_i - \bar{\hat{\mathbf{x}}})$$

其中\(\bar{\hat{\mathbf{x}}}\)为投影的均值,

$$\bar{\hat{\mathbf{x}}}=\frac{1}{n}\sum_i \hat{\mathbf{x}_i} = \mathbf{M}\left(\frac{1}{n}\sum_i\mathbf{x}_i\right)=\mathbf{M}\bar{\mathbf{x}}$$

\(\bar{\mathbf{x}}\)为原数据的均值。从而

$$\mathrm{Var}(\hat{\mathbf{X}})=\frac{1}{n}\sum_i (\mathbf{x}_i - \bar{\mathbf{x}})^\top\mathbf{M}^\top\mathbf{M}(\mathbf{x}_i - \bar{\mathbf{x}})$$

利用单位正交基的性质,矩阵\(\mathbf{M}^\top\mathbf{M}\)可以化为

$$\mathbf{M}^\top\mathbf{M}=\left(\sum_k \mathbf{w}_k\mathbf{w}_k^\top\right)^\top\left(\sum_j \mathbf{w}_j\mathbf{w}_j^\top\right)=\sum_k\sum_j \mathbf{w_k}\left(\mathbf{w}_k^\top\mathbf{w}_j\right)\mathbf{w}_j^\top=\sum_k \mathbf{w}_k\mathbf{w}_k^\top$$

这其中用到了\(\mathbf{w}_k^\top\mathbf{w}_j\)仅在\(k=j\)时为1而其他情况为0的性质。从而\(\mathrm{Var}(\hat{\mathbf{X}})\)可进一步化为

$$\begin{align*}\mathrm{Var}(\hat{\mathbf{X}})&=\frac{1}{n}\sum_i (\mathbf{x}_i - \bar{\mathbf{x}})^\top\left(\sum_k \mathbf{w}_k\mathbf{w}_k^\top\right)(\mathbf{x}_i - \bar{\mathbf{x}})\\&=\frac{1}{n}\sum_i \sum_k \mathbf{w}_k^\top(\mathbf{x}_i - \bar{\mathbf{x}})(\mathbf{x}_i - \bar{\mathbf{x}})^\top\mathbf{w}_k\\&=\sum_k \mathbf{w}_k^\top\left(\frac{1}{n}\sum_i (\mathbf{x}_i - \bar{\mathbf{x}})(\mathbf{x}_i - \bar{\mathbf{x}})^\top\right)\mathbf{w}_k\\&= \sum_k \mathbf{w}_k \mathrm{Cov}(\mathbf{x})\mathbf{w}_k\end{align*}$$

记\(\mathbf{V}=\mathrm{Cov}(\mathbf{x})\)为原数据集的协方差矩阵,我们可以得到PCA的优化问题为

$$\begin{align*}\max_\mathbf{W} & \sum_k \mathbf{w}_k^\top\mathbf{V}\mathbf{w}_k \\ \mathrm{s.t.} & \forall k, \mathbf{w}_k^\top\mathbf{w}_k=1 \\ & \forall k\neq j, \mathbf{w}_k^\top\mathbf{w}_j=0\end{align*}$$

这个优化问题可以用拉格朗日乘子方法来解,考虑第一组约束\(\forall k, \mathbf{w}_k^\top\mathbf{w}_k=1\),引入拉格朗日乘子后目标函数变为

$$L=\sum_k \mathbf{w}_k^\top\mathbf{V}\mathbf{w}_k - \sum_k \lambda_k \left(\mathbf{w}_k^\top\mathbf{w}_k - 1\right)$$

其取最优解时满足

$$\begin{align*}\frac{\partial L}{\partial \mathbf{w}_k} &=2\mathbf{V}\mathbf{w}_k - 2\lambda_k \mathbf{w}=0 \\ \frac{\partial L}{\partial \lambda_k}&=\mathbf{w}_k^\top\mathbf{w}_k-1=0 \end{align*}$$

其中第一式即

$$\mathbf{V}\mathbf{w}_k=\lambda_k \mathbf{w}_k$$

这正是特征值(eigen value)和特征向量(eigen vector)的定义,说明取最优解时,所有\(\mathbf{w}_k\)均为\(\mathbf{V}\)的特征向量,而\(\lambda_k\)为对应的特征值。上式两边同时左乘\(\mathbf{w}_k^\top\),得到

$$\mathbf{w}_k^\top\mathbf{V}\mathbf{w}_k = \lambda_k \mathbf{w}_k^\top\mathbf{w}_k$$

从而目标函数变为

$$L=\sum_k \lambda_k \mathbf{w}_k^\top\mathbf{w}_k - \sum_k \lambda_k \left(\mathbf{w}_k^\top\mathbf{w}_k - 1\right) = \sum_k \lambda_k$$

要使该目标函数最大,则需使每个\(\lambda_k\)都尽量大。又考虑到约束条件\(\forall k\neq j, \mathbf{w}_k^\top\mathbf{w}_j=0\),说明最优解时各特征向量两两垂直,从而对应的特征值需两两不同(若某个特征值为m重特征值则至多重复m次),要使\(\sum_k \lambda_k\)最大,只需取\(\mathbf{V}\)最大的K个特征值以及对应的单位特征向量即可。

因此,PCA优化问题的解为原数据协方差矩阵的最大K个特征值对应的特征向量。每个特征值表示了对应那个维度的variance大小,这一点可以从\(\mathrm{Var}(\hat{\mathbf{X}})=\sum_k \mathbf{w}_k^\top\mathbf{V}\mathbf{w}_k=\sum_k \lambda_k\)中很容易看出来,选取最大的K个特征值,也就是选取了最大variance的K个维度。

优化问题求解完毕后,PCA可以用来降维。将K个单位特征向量记为矩阵形式\(\mathbf{W}=(\mathbf{w}_1, ..., \mathbf{w}_K)^\top\in\mathbb{R}^{K\times D}\),任意原空间的数据向量\(\mathbf{x}\)的投影为\(\hat{\mathbf{x}}=\mathbf{W}\mathbf{x}\in\mathbb{R}^{K}\),在原空间的表示为\(\mathbf{x}'=\mathbf{W}^\top\mathbf{W}\mathbf{x}\in\mathbb{R}^D\),此即为其reconstruction。写成矩阵形式后,用程序实现将非常简洁方便。

由于PCA学到的每一个低维空间基向量\(\mathbf{w}_k\in\mathbb{R}^D\)在原空间中,从而也可以可视化。每一个基向量都是一个有代表性的模式组成部分,应用于图像数据时,大特征值对应的特征向量往往是低频平滑的图像,而特征值越小特征向量对应的越是高频变化快的图像。用于人脸图像时,这些基向量还有一个名字叫eigen faces。注意这些模式和用kmeans或者mixture of Gaussians学出来的模式有本质不同,在mixture model中,每一个模式就是一个有代表性的数据点,而这里PCA的所有component线性组合起来才构成一个数据模式。

最后说一说实现。PCA用任何代数工具包都很容易实现,以MATLAB为例,对任何数据矩阵\(\mathbf{X}\)(每行一个数据),首先求协方差矩阵\((\mathbf{X}-\bar{\mathbf{X}})^\top(\mathbf{X}-\bar{\mathbf{X}})\),再用eigs函数求最大的K个特征值及对应特征向量即可。此处计算协方差矩阵无需除以n,因为这个因子的作用只是减小特征值,并不影响特征向量。代码非常简单,三行:

xmean = mean(X, 1);
X = X - ones(size(X, 1), 1) * xmean;
[W, ~] = eigs(double(X'*X), [], K);

Matlab算出的W为DxK矩阵,是上面所说W的转置。使用时要降维,只需做矩阵乘法XW。用SVD分解也可以求得W,但经过试验发现用eigs直接求会更快且更省内存一些。另外减掉均值后再做投影应该往往更好一些。

posted on 2013-07-16 12:40  alexajia  阅读(2512)  评论(0编辑  收藏  举报

导航