PCA
2021-10-06

 

背景知识

  1. 协方差

    XY为两个一维随机变量,它们的协方差为:

    (1)cov(X,Y)=E[(XE[X])(YE[Y])]=i=1n(xix¯)(yiy¯)n1
  2. 协方差矩阵

    对多维随机变量X

    (2)X=(x11x12x1nx21x22x2nxm1xm2xmn)m×n=[X1,X2,,Xn]Xi=[x1i,x2i,,xmi]

    计算其两两维度之间的协方差,各协方差组成了一个n×n的矩阵,称为协方差矩阵,记为Σ。矩阵内的元素Σij

    (3)Σij=cov(Xi,Xj)=E[(XiE[Xi])(XjE[Xj])]

样本协方差矩阵:

(4)Σ=E[(XE[X])T(XE[X])]=1m1(XE[X])T(XE[X])

X的列均值为0,则:

(5)Σ=E[(XE[X])T(XE[X])]=E[XTX]=1m1XTX

PCA原理

降维概述

不加思索地认为,对矩阵X通过线性变换降维后,数据越分散,效果越好。如何度量数据的分散程度?各维度的方差越大,数据越分散。概括一下,降维后,各维度方差越大,降维效果越好。

举例:将二维数据降到一维,如果集中到了一点,那么数据就不具备可分性,自然可以认为降维效果不好。说明降维后数据越分散、越具有可分性,降维效果越好。在PCA中,选择“方差”作为衡量数据分散性的指标。

PCA旋转

降维概述:给定原始矩阵Xm×n及线性变换矩阵An×k,通过XA线性变换,将矩阵Xm×nn维降到k维,得到矩阵Ym×k,降维后的维度k,又称为主成分个数。

(6)X=(x11x12x1nx21x22x2nxm1xm2xmn)m×n

原理推导

假设:

  1. 已经对矩阵Xm×n做了标准化,其均值μ=0
  2. 矩阵An×d为正交矩阵。

首先,考虑求第一主成分:

(7)y1=Xa1a1={a11,a21,,an1}T

y1的方差:

(8)var(y1)=E{(Xa1μa1)T(Xa1μa1)}=a1TE{(Xμ)T(Xμ)}a1=a1TE{XTX}a1=a1TΣa1ΣX

优化目标:

(9)maxa1TΣa1s.t.a1Ta1=1

定义拉格朗日函数:

(10)L(a1,λ)=a1TΣa1λ(a1Ta11)

求函数L(a1,λ)a1的导数并令导数为0:

(11)La1=Σa1λa1=0

求得:

(12)Σa1=λa1

所以,λ为协方差矩阵Σ的特征值,a1为对应的单位特征向量。

进一步,优化目标可化简为:

(13)a1TΣa1=a1Tλa1=λa1Ta1=λ

假设a1Σ的第一大特征值λ1对应的单位特征向量,显然,a1λ1是以上问题的最优解。

 

然后,考虑求第二主成分:

(14)maxa2TΣa2 s.t. a1TΣa2=0a2TΣa1=0a1Ta2=0a2Ta1=0a2Ta2=1

注意到:

(15)a1TΣa2=a2TΣa1=a2Tλ1a1=λ1a2Ta1=λ1a1Ta2=0

说明,等式约束是等价的。

定义拉格朗日函数:

(16)L(a2,λ,ϕ)=a2TΣa2λ(a2Ta21)ϕa2Ta1

求函数L(a2,λ)a2的导数并令导数为0:

(17)La2=2Σa22λa2ϕa1=0

将上式左乘以a1T得:

(18)2a1TΣa22λa1Ta2ϕa1Ta1=0

此式前两项为0,且a1Ta1=1,所以,ϕ=0。根据(12)可得:

(19)Σa2λa2=0

所以,λ是协方差矩阵Σ的特征值,a2为对应的单位特征向量。于是,目标函数:

(20)a2TΣa2=a2Tλa2=λa2Ta2=λ

假设a2Σ的第二大特征值λ2对应的单位特征向量,显然,a2λ2是以上问题的最优解。

 

一般地,An×d的第k主成分是yk=Xak,并且var(yk)=λk,这里λkΣk大的特征值并且ak为对应的单位特征向量。

综上所述,为将Xm×n进行降维,只需要求其协方差矩阵的特征向量即可。

 

PCA求解

协方差矩阵的特征值分解法

  1. 数据规范化处理

    Xm×n做规范化处理,处理后,每一列的均值为0。

    (21)Xm×n=Xm×n
  2. 计算协方差矩阵

    (22)Σ=1m1XTX
  3. 求协方差矩阵的特征值和特征向量

    特征值(从大到小排列):λ1,λ2,,λk

    特征向量:An×k=[a1,a2,,ak],ai=[a1i,a2i,,ani]T

  4. k个主成分

    (23)Ym×k=Xm×nAn×k
  5. 计算k个主成分的方差贡献率

    (24)i=1kλii=1nλi

数据矩阵的奇异值分解算法

给定矩阵Xm×n,并且该矩阵每列均值为0。构造一个新矩阵:

(25)X=1m1X

那么:

(26)XTX=(1m1X)T(1m1X)=1m1XTX=S

不难得知,SX的协方差矩阵。

根据SVD分解定理:

(27)X=UΣVTS=XTX=V(ΣTΣ)VT

所以,V为协方差矩阵S的特征向量,同时也是X的右奇异矩阵。

至此,将求解矩阵Xm×n协方差矩阵的特征向量,转为求解矩阵X的右奇异矩阵。

 

基于SVD分解的PCA降维求解过程:

  1. 构造新矩阵

    (28)X=1m1X
  2. 对矩阵X进行截断奇异值分解

    (29)XUkΣkVkTUkm×kΣkkVkn×k

    矩阵Vkk个样本主成分的线性变换矩阵。

  3. 降维:n k

    (30)Ym×k=XVk

示例

问题:给定矩阵X,从2维降到1维。

(31)X=|1,21,00,02,10,1|5×2

降维步骤:

  1. 数据标准化处理:减均值,除以标准差

    (32)X=|0.91,1.830.91,00,01.83,0.910,0.91|5×2
  2. 求协方差矩阵

    (33)S=|1.25,0.830.83,1.25|5×2
  3. 求协方差矩阵的特征值和特征向量

    特征值:[2.08,0.42]

    特征向量:[[0.71,0.71],[0.71,0.71]]

  4. 求降维后的数据(第一主成分)

    (34)Xnew=|2.120.7102.120.71|5×2
  5. 求第一主成分的方差贡献

    2.08/(2.08+0.42)=0.83

 

降维结果可视化:

降维结果可视化

 

参考链接

  1. PCA与SVD应用中负号问题 - 深海里的猫 - 博客园 (cnblogs.com)
  2. 主成分分析(Principle Component Analysis) - swolf的博客 (mrswolf.github.io)
  3. 使用numpy来理解PCA和SVD - 知乎 (zhihu.com)
  4. CodingLabs - PCA的数学原理