PCA 是一种比较常用的降维方法,由于算法太常见,而且计算方法几乎是固定的,在使用的时候常常会作为一个黑盒,直接调用某个库中封装好的接口。这里想写的是,PCA 的数学/物理意义, 目的是更好的理解 PCA, 知其然且之气所以然。这样,才能在工作中指导实践,而不是一股脑地之间调用算法。
首先定义 \(SNR\) (Signal to Noise Ratio) 用来衡量数据的噪声比。
$$SNR=\frac{\sigma_{signal}^2}{\sigma_{noise}^2}$$\( SNR\) 值越大,表示数据中的噪声越低。
假设有两个随机变量,并且期望为 0:
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 $$- \( XX^T \) 的第 \( ij^{th} \) 个元素是把 \(x_i\) 和 \(x_j\) 带入到 \(\sigma_\textbf{ab}^2 \equiv \frac{1}{n-1}\textbf{ab}^T\) 中得到的
- \( S_X \) 是一个 \( m \times m \) 的对称方阵
- \( S_X \) 对角线上的元素是同一个特征的方差
- \( 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 \). 利用以上结论,可以得到: