0%

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} $$