主成分分析

在多变量分析中，主成分分析（Principal components analysis，缩写：PCA）是一种统计分析、简化数据集的方法。它利用正交变换来对一系列可能相关的变量的观测值进行线性变换，从而投影为一系列线性不相关变量的值，这些不相关变量称为主成分（Principal Components）。具体地，主成分可以看做一个线性方程，其包含一系列线性系数来指示投影方向。PCA对原始数据的正则化或预处理敏感（相对缩放）。

主成分分析由卡尔·皮尔逊于1901年发明，用于分析数据及建立数理模型，在原理上与主轴定理相似。之后在1930年左右由哈罗德·霍特林独立发展并命名。依据应用领域的不同，在信号处理中它也叫做离散K-L 转换（discrete Karhunen–Loève transform (KLT)）。其方法主要是通过对共变异数矩阵进行特征分解，以得出数据的主成分（即特征向量）与它们的权值（即特征值）。PCA是最简单的以特征量分析多元统计分布的方法。其结果可以理解为对原数据中的方差做出解释：哪一个方向上的数据值对方差的影响最大？换而言之，PCA提供了一种降低数据维度的有效办法；如果分析者在原数据中除掉最小的特征值所对应的成分，那么所得的低维度数据必定是最优化的（也即，这样降低维度必定是失去讯息最少的方法）。主成分分析在分析复杂数据时尤为有用，比如人脸识别。

PCA是最简单的以特征量分析多元统计分布的方法。通常，这种运算可以被看作是揭露数据的内部结构，从而更好地展现数据的变异度。如果一个多元数据集是用高维数据空间之坐标系来表示的，那么PCA能提供一幅较低维度的图像，相当于数据集在讯息量最多之角度上的一个投影。这样就可以利用少量的主成分让数据的维度降低了。

PCA跟因子分析密切相关。因子分析通常包含更多特定领域底层结构的假设，并且求解稍微不同矩阵的特征向量。PCA也跟典型相关分析（CCA）有关。CCA定义的坐标系可以最佳地描述两个数据集之间的互协方差，而PCA定义了新的正交坐标系，能最佳地描述单个数据集当中的变异数。

## 数学定义

PCA的数学定义是：一个正交化线性变换，把数据变换到一个新的坐标系统中，使得这一数据的任何投影的第一大方差在第一个坐标（称为第一主成分）上，第二大方差在第二个坐标（第二主成分）上，依次类推。

定义一个$n \times m$的矩阵, $X^T$为去平均值（以平均值为中心移动至原点）的数据，其行为数据样本，列为数据类别（注意，这里定义的是$X^T$ 而不是$X$）。则$X$的奇异值分解为$X = W \Sigma V^T$，其中$W \in \mathbf{R}^{m \times m}$是$XX^T$的特征向量矩阵， $\Sigma \in \mathbf{R}^{m \times n}$是奇异值矩阵，$V \in \mathbf{R}^{n \times n}$是$X^TX$的特征向量矩阵。据此。

$$\begin{align} \boldsymbol{Y}^\top & = \boldsymbol{X}^\top\boldsymbol{W} \\ & = \boldsymbol{V}\boldsymbol{\Sigma}^\top\boldsymbol{W}^\top\boldsymbol{W} \\ & = \boldsymbol{V}\boldsymbol{\Sigma}^\top \end{align}$$

当 m TWT=XT，且YT的第一列由第一主成分组成，第二列由第二主成分组成，依此类推。

为了得到一种降低数据维度的有效办法，我们可以利用WL把 X 映射到一个只应用前面L个向量的低维空间中去：

$$\mathbf{Y}=\mathbf{W_L}^\top\mathbf{X} = \mathbf{\Sigma_L}\mathbf{V}^\top$$

其中$\mathbf{\Sigma_L}=\mathbf{I}_{L\times m}\mathbf{\Sigma}$，且$\mathbf{I}_{L\times m}$为$L\times m$的单位矩阵。

X 的单向量矩阵W相当于协方差矩阵的特征向量 C = X XT,

$$\mathbf{X}\mathbf{X}^\top = \mathbf{W}\mathbf{\Sigma}\mathbf{\Sigma}^\top\mathbf{W}^\top$$

在欧几里得空间给定一组点数，第一主成分对应于通过多维空间平均点的一条线，同时保证各个点到这条直线距离的平方和最小。去除掉第一主成分后，用同样的方法得到第二主成分。依此类推。在Σ中的奇异值均为矩阵 XXT的特征值的平方根。每一个特征值都与跟它们相关的方差是成正比的，而且所有特征值的总和等于所有点到它们的多维空间平均点距离的平方和。PCA提供了一种降低维度的有效办法，本质上，它利用正交变换将围绕平均点的点集中尽可能多的变量投影到第一维中去，因此，降低维度必定是失去讯息最少的方法。PCA具有保持子空间拥有最大方差的最优正交变换的特性。然而，当与离散余弦变换相比时，它需要更大的计算需求代价。非线性降维技术相对于PCA来说则需要更高的计算要求。

PCA对变量的缩放很敏感。如果我们只有两个变量，而且它们具有相同的样本方差，并且成正相关，那么PCA将涉及两个变量的主成分的旋转。但是，如果把第一个变量的所有值都乘以100，那么第一主成分就几乎和这个变量一样，另一个变量只提供了很小的贡献，第二主成分也将和第二个原始变量几乎一致。这就意味着当不同的变量代表不同的单位（如温度和质量）时，PCA是一种比较武断的分析方法。但是在Pearson的题为"On Lines and Planes of Closest Fit to Systems of Points in Space"的原始文件里，是假设在欧几里得空间里不考虑这些。一种使PCA不那么武断的方法是使用变量缩放以得到单位方差。

## 讨论

通常，为了确保第一主成分描述的是最大方差的方向，我们会使用平均减法进行主成分分析。如果不执行平均减法，第一主成分有可能或多或少的对应于数据的平均值。另外，为了找到近似数据的最小均方误差，我们必须选取一个零均值。

假设零经验均值，数据集 X 的主成分w1可以被定义为：

$$\mathbf{w}_1 <pre> = \underset{\Vert \mathbf{w} \Vert = 1}{\operatorname{\arg\,max}}\,\operatorname{Var}\{ \mathbf{w}^\top \mathbf{X} \} = \underset{\Vert \mathbf{w} \Vert = 1}{\operatorname{\arg\,max}}\,E\left\{ \left( \mathbf{w}^\top \mathbf{X}\right)^2 \right\}$$

为了得到第 k个主成分，必须先从X中减去前面的 $k - 1$ 个主成分：

$$\mathbf{\hat{X}}_{k - 1} <pre> = \mathbf{X} - \sum_{i = 1}^{k - 1} \mathbf{w}_i \mathbf{w}_i^\top \mathbf{X}$$

然后把求得的第k个主成分带入数据集，得到新的数据集，继续寻找主成分。

$$\mathbf{w}_k <pre> = \underset{\Vert \mathbf{w} \Vert = 1}{\operatorname{arg\,max}}\,E\left\{ \left( \mathbf{w}^\top \mathbf{\hat{X}}_{k - 1} \right)^2 \right\}.$$

PCA相当于在气象学中使用的经验正交函数（EOF）,同时也类似于一个线性隐层神经网络。隐含层 K 个神经元的权重向量收敛后，将形成一个由前 K 个主成分跨越空间的基础。但是与PCA不同的是，这种技术并不一定会产生正交向量。

PCA是一种很流行且主要的模式识别技术。然而，它并不能最优化类别可分离性。另一种不考虑这一点的方法是线性判别分析。

## 符号和缩写表

Symbol符号｜Meaning意义｜Dimensions尺寸｜Indices指数

$\mathbf{X} = \{ X[m,n] \}$｜由所有数据向量集组成的数据矩阵，一列代表一个向量｜$M \times N$｜$m = 1 \ldots M$ $n = 1 \ldots N$

$N \,$｜数据集中列向量的个数｜$1 \times 1$｜标量

$M \,$｜每个列向量的元素个数｜$1 \times 1$｜标量

$L \,$｜子空间的维数, $1 \le L \le M$｜$1 \times 1$｜标量

$\mathbf{u} = \{ u[m] \}$｜经验均值向量｜$M \times 1$｜$m = 1 \ldots M$

$\mathbf{s} = \{ s[m] \}$｜经验标准方差向量｜$M \times 1$｜$m = 1 \ldots M$

$\mathbf{h} = \{ h[n] \}$｜所有的单位向量｜$1 \times N$｜$n = 1 \ldots N$

$\mathbf{B} = \{ B[m,n] \}$｜对均值的偏离向量｜$M \times N$｜$m = 1 \ldots M$ $n = 1 \ldots N$

$\mathbf{Z} = \{ Z[m,n] \}$｜Z-分数，利用均值和标准差计算得到｜$M \times N$｜$m = 1 \ldots M$ $n = 1 \ldots N$

$\mathbf{C} = \{ C[p,q] \}$｜协方差矩阵｜$M \times M$｜$p = 1 \ldots M$ $q = 1 \ldots M$

$\mathbf{R} = \{ R[p,q] \}$｜相关矩阵｜$M \times M$｜$p = 1 \ldots M$ $q = 1 \ldots M$

$\mathbf{V} = \{ V[p,q] \}$｜C的所有特征向量集｜$M \times M$｜$p = 1 \ldots M$ $q = 1 \ldots M$

$\mathbf{D} = \{ D[p,q] \}$｜主对角线为特征值的对角矩阵｜$M \times M$｜$p = 1 \ldots M$ $q = 1 \ldots M$

$\mathbf{W} = \{ W[p,q] \}$｜基向量矩阵｜$M \times L$｜$p = 1 \ldots M$ $q = 1 \ldots L$

$\mathbf{Y} = \{ Y[m,n] \}$｜X 和W矩阵的投影矩阵｜$L \times N$｜$m = 1 \ldots L$ $n = 1 \ldots N$

## 主成分分析的属性和限制

如上所述，主成分分析的结果依赖于变量的缩放。

主成分分析的适用性受到由它的派生物产生的某些假设的限制。

## 主成分分析和信息理论

通过使用降维来保存大部分数据信息的主成分分析的观点是不正确的。确实如此，当没有任何假设信息的信号模型时，主成分分析在降维的同时并不能保证信息的不丢失，其中信息是由香农熵来衡量的。

基于假设得$$\mathbf{x} = \mathbf{s} + \mathbf{n}$$ 也就是说，向量 x 是含有信息的目标信号 s 和噪声信号 n 之和，从信息论角度考虑主成分分析在降维上是最优的。

特别地，Linsker证明了如果 s 是高斯分布，且 n 是 与密度矩阵相应的协方差矩阵的高斯噪声。

## 使用统计方法计算PCA

以下是使用统计方法计算PCA的详细说明。但是请注意，如果利用奇异值分解（使用标准的软件）效果会更好。

我们的目标是把一个给定的具有 M 维的数据集X 变换成具有较小维度 L的数据集Y。现在要求的就是矩阵Y，Y是矩阵X Karhunen–Loève变换。:$\mathbf{Y} = \mathbb{KLT} \{ \mathbf{X} \}$

### 组织数据集

假设有一组 M 个变量的观察数据，我们的目的是减少数据，使得能够用L 个向量来描述每个观察值，L < M。进一步假设，该数据被整理成一组具有N个向量的数据集，其中每个向量都代表M 个变量的单一观察数据。

- $\mathbf{x}_1 \ldots \mathbf{x}_N$为列向量，其中每个列向量有M 行。
- 将列向量放入M × N的单矩阵X 里。

### 计算经验均值

- 对每一维m = 1, ..., M计算经验均值
- 将计算得到的均值放入一个 M × 1维的经验均值向量u中

$$u[m] = {1 \over N} \sum_{n=1}^N X[m,n]$$

### 计算平均偏差

对于在最大限度地减少近似数据的均方误差的基础上找到一个主成分来说，均值减去法是该解决方案的不可或缺的组成部分。因此，我们继续如下步骤：

- 从数据矩阵X的每一列中减去经验均值向量 u
- 将平均减去过的数据存储在M × N矩阵B中

$$\mathbf{B} = \mathbf{X} - \mathbf{u}\mathbf{h}$$

其中h是一个长度为N的全为1的行向量：

$$h[n] = 1 \, \qquad \qquad \text{for } n = 1, \ldots, N$$

### 求协方差矩阵

- 从矩阵B 中找到M × M 的经验协方差矩阵C

$$\mathbf{C} = \mathbb{ E } \left[ \mathbf{B} \otimes \mathbf{B} \right] = \mathbb{ E } \left[ \mathbf{B} \cdot \mathbf{B}^{*} \right] = { 1 \over N - 1 } \sum_{} \mathbf{B} \cdot \mathbf{B}^{*}$$

其中 $\mathbb{E}$为期望值

$\otimes$是最外层运算符

$* \ $是共轭转置运算符。

请注意，如果B完全由实数组成，那么共轭转置与正常的转置一样。

- 为什么是N-1,而不是N，Bessel's correction给出了解释

### 查找协方差矩阵的特征值和特征向量

- 计算矩阵C 的特征向量

$$\mathbf{V}^{-1} \mathbf{C} \mathbf{V} = \mathbf{D}$$

其中，D 是C的特征值对角矩阵，这一步通常会涉及到使用基于计算机的计算特征值和特征向量的算法。在很多矩阵代数系统中这些算法都是现成可用的，如R语言，MATLAB,Mathematica,SciPy, IDL(交互式数据语言), 或者GNU Octave以及OpenCV。

- 矩阵D为M × M的对角矩阵
- 各个特征值和特征向量都是配对的，m个特征值对应m个特征向量。

## 参见

- Canonical correlation
- (can replace of low-rank SVD approximation)
- 特征脸(Eigenface)
- 多线性主成分分析(Multilinear PCA)
- 独立成分分析
- 核主成分分析
- 矩阵分解
- Nonlinear dimensionality reduction
- (PCA applied to morphometry and computer vision)
- 奇异值分解
- 变换编码
- 最小二乘法
- 图模式
- 马尔可夫链
- 马尔可夫逻辑网络