PCA相关总结

什么是PCA?

PCA(principal component analysis),也就是主成分分析,是一种算法,主要用来数据降维。

PCA是将原始的样本矩阵XX转换成降维后的新样本YY的一种方法。

为了实现维度变化我们需要一个

变换矩阵UUYr×n=UTr×mXm×nY_{r \times n} = {U^T}_{r \times m}X_{m \times n}(这里是先转置,再取前n行),用于对行进行压缩

或者矩阵VVYm×r=Xm×nVn×r{Y_{m \times r}} = {X_{m \times n}}{V_{n \times r}},用于对列进行压缩。

一般不会对样本数量降维,都是对样本的特征数量降维,也就是用少量的特征数量去表征样本的特征,这样就实现了数据降维。

怎么计算PCA?

PCA计算一般有两种常用的方法,分别是特征值分解法和奇异值分解法。

特征值分解:

推导:

PCA是要求降维后的数据YY的方差最大,并且基向量之间正交。

数据的方差计算公式:

1n1i=1n(UiTXiUiTμ)2=1n1i=1nUiTXXTUi\frac{1}{n - 1}\sum\limits_{i = 1}^n (U_i^T{X_i} - U_i^T\mu)^2 = \frac{1}{n - 1}\sum\limits_{i = 1}^n {U_i^T \cdot X'X'^T \cdot {U_i}}

其中的S=XXTS = X'{X'}^T就是为XX'的协方差矩阵,而μ\mu表示样本的平均值。

注意其中UU是正交矩阵,也就是UTU=I{U^T}U = I,并且协方差矩阵的特征值和特征向量满足:SUi=λUiS{U_i} = \lambda {U_i},也就是UiTSUi = λiU_i^TS{U_i}{\text{ = }}\lambda_i,代入上面式子,方差计算最后的结果就是1n1i=1nλi\frac1{n - 1}\sum\limits_{i = 1}^n {\lambda_i}

所以,选择特征值越大的特征向量,越能代表数据的原始特征。

计算步骤(并不是代码,简单表明一下计算步骤):

  • 样本均值化:X=XμX'=X-\mu
  • 计算协方差矩阵:S=XXTS=X'{X'}^T或者S=XTXS'={X'}^TX
  • 计算协方差矩阵的特征值和特征向量:λ,V=eig(S)\lambda,V=eig(S')或者 λ,U=eig(S)\lambda,U=eig(S)
  • 最后计算降维后的数据:Ym×r=Xm×nVn×r{Y_{m \times r}} = {X_{m \times n}}{V_{n \times r}}或者Yr×n=UTr×mXm×n{Y_{r \times n}} = {U^T}_{r \times m}{X_{m \times n}}

奇异值分解,SVD,Singular value decomposition

为什么要用奇异值分解?

从上面可以看出来,特征值分解的方法计算比较耗费时间。

而SVD分解的方法在计算UUVV时有些情况下会更快。因此SVD可以实现PCA。

奇异值分解原理:

其实奇异值分解的原始计算方法还是利用特征值分解,具体方法如下:

  • 首先一个矩阵可以分解成这种形式:Xm×n=Um×mΣm×nVn×nTX_{m\times n}=U_{m\times m}\Sigma_{m\times n} V^{T}_{n\times n}(证明略)
  • 其协方差矩阵就是XX=UΣ1VTVΣ1TUT=UΣ1Σ1TUT=UΣUTX{X'} = U{\Sigma _1}{V^T}V{\Sigma _1}^T{U^T} = U{\Sigma _1}{\Sigma _1}^T{U^T} = U\Sigma {U^T},这里加了下标的就是前面的那个$\Sigma $矩阵,没加下标的矩阵是另一个矩阵,以示区别。
  • 所以UU就是协方差矩阵SS的特征向量构成的矩阵,当然VV也是SS'的特征向量构成的矩阵
  • SSSS'进行特征值分解就可以得到UUVV
  • Σ\Sigma 是一个对角矩阵,主对角元素是奇异值,一般从大到小排列,我们只需要用得到的特征值这样 σi=λi\sigma_i = \sqrt \lambda_i 就可以得到奇异值矩阵 Σ\Sigma

奇异值分解与特征值分解

  • 奇异值分解和特征值分解均是为了得到变换矩阵UUVV
  • 实际计算时,一些框架如numpy会有特殊的算法来计算奇异值分解,速度会更快,所以使用SVD可以提高PCA的步骤。

奇异值分解计算PCA的步骤

  • X=UΣVTX=U\Sigma V^{T}(先对XX做均值化操作)
  • Ym×r=Xm×nVn×r{Y_{m \times r}} = {X_{m \times n}}{V_{n \times r}} 或者 Yr×n=UTr×mXm×n{Y_{r \times n}} = {U^T}_{r \times m}{X_{m \times n}}

小记

花了一晚上来写,主要是公式有点多,写的也不是很熟练。我也是网上查别人的博客结合个人理解总结的,如有不对请指正。