PCA Step by Step

PCA 是一种比较常用的降维方法, 由于算法太常见, 而且计算方法几乎是固定的, 在使用的时候常常会作为一个黑盒, 直接调用某个库中封装好的接口. 这里想写的是, PCA 的数学/物理意义, 目的是更好的理解PCA, 知其然且之气所以然. 这样, 才能在工作中指导实践, 而不是一股脑地之间调用算法.

首先定义 \(SNR\) (Signal to Noise Ratio) 用来衡量数据的噪声比.
$$SNR=\frac{\sigma_{signal}^2}{\sigma_{noise}^2}$$
\( SNR\) 值越大, 表示数据中的噪声越低.
假设有两个随机变量, 并且期望为0:
$$ A=\{a_1,\dots, a_n\}, \quad B=\{b_1, \dots, b_n\}$$
A和B的方差定义如下:
$$ \sigma_A^2={\langle a_ia_i \rangle_i}, \quad \sigma_B^2={\langle b_ib_i \rangle_i} $$
其中,期望是在\(n\)个变量上的平均, 那么, A和B的协方差(\(covariance\))为:
$$ \text{covariance of A and B} \equiv \sigma_{AB}^2={\left \langle a_ib_i \right \rangle_i} $$
$$ \sigma_{\textbf{ab}}^2=\frac{1}{n-1}\textbf{ab}^T $$
协方差矩阵为:
$$ S_X \equiv \frac{1}{n-1}\textbf{XX}^T $$

  1. \( XX^T \) 的第 \( ij^{th} \) 个元素是把 \(x_i\) 和 \(x_j\) 带入到 \(\sigma_\textbf{ab}^2 \equiv \frac{1}{n-1}\textbf{ab}^T\) 中得到的
  2. \( S_X \) 是一个 \( m \times m \) 的对称方阵
  3. \( S_X \) 对角线上的元素是同一个特征的方差
  4. \( S_X \) 的非对角线上的元素是不同特征的协方差

PCA 的目的是去除数据中的冗余, 非对角线上的元素是不同特征之间的协方差, 去除冗余, 目的就是让协方差矩阵中的非对角线上的元素为 0.

那么, 接下来要做的就是寻找矩阵\(P\) 使得 \(Y=PX\) 从而使得 \( S_Y \equiv \frac{1}{n-1}YY^T \) 是 \(X\)主成分, 即 \(YY^T\) 是对角矩阵. 首先给出 \(S_Y\) 的表达式
$$ \begin{equation} \begin{split} S_Y=& \frac{1}{n-1}YY^T\\ =& \frac{1}{n-1}(PX)(PX)^T\\ =& \frac{1}{n-1}PXX^TP^T\\ =& \frac{1}{n-1}P(XX^T)P^T\\ =& \frac{1}{n-1}PAP^T \end{split} \end{equation} $$
现在,我们的目标是想说明对已一个对称矩阵 \(A\) 可以通过它的特征向量组成的正交矩阵来对角化. 对于一个对称矩阵 A, 有如下结论:
$$ A=EDE^T $$
其中 \(D\) 是对角矩阵, \(E\) 是由 \(A\) 的特征向量按列排排成的矩阵.
很幸运的是, 这样的 \(P\) 是存在的, 其中 \(P\) 的每一行\( p_i \)都是\( XX^T \)的特征向量, 这样的话, \( P \equiv E^T \), 因而, \( A=P^TDP \). 利用以上结论, 可以得到:
$$ \begin{equation} \begin{split} S_Y&= \frac{1}{n-1}PAP^T \\ & =\frac{1}{n-1}P(P^TDP)PT \\ & =\frac{1}{n-1}(PP^T)D(PP^T) \\ & =\frac{1}{n-1}(PP^{-1})D(PP^{-1}) \\ & =\frac{1}{n-1}D \end{split} \end{equation} $$