PCA主成分分析数学原理

复习完线性代数再来推导下PCA

概述

  • 主成分分析(principal component analysis)是一种数据分析方法,
    出发点:从一组特征中计算出一组按重要性从大到小排列的新特征,它们是原有特征的线性组合,并且相互之间是不相关(即不线性相关)的.
    • 重要性:通过方差衡量,方差大说明数据分布很散,含有的信息量大
    • 不相关:推导时用

具体推导

参数说明

记x1,x2…xp是P个原始特征(也就是某个样本的维度), x=(x1,x2…xp)^t,记ξ1,ξ2…ξp是p个新特征, ξ=(ξ1,ξ2…ξp)^t
新特征是原始特征的线性组合,ξi =Σαij*xj =αi^t*x 或者 ξ =A^t*x
A=(α1,α2…αp). αi=(αi1,αi2…αip)^t.
αi是新特征ξi线性组合的系数,不妨使||α||=1,即αi^t*αi=1(由后面推导过程可知,这是结果的共有部分,所以可以设为1),
ξi=αi^t*x的结果是一个数,所以对αi^t*x进行转置不影响结果)

计算第一个新特征ξ1的方差:

Var(ξ1)
= E{[ξ1-E[ξ1]]*[ξ1^t-E[ξ1^t]]}
= E[ξ1*ξ1^t]-E[ξ1]E[ξ1^t]
= E[α1^t*x*x^t*α1]-E[α1^t*x]E[x^t*α1]
= α1^t*{E[x^t*x]-E[x]E[x^t]}α1
= α1^t*Σ*α1
Σ是x的协方差矩阵,接下来在αi^t*αi=1的约束条件下求Var的极值,使用拉格朗日乘子法:
f(α1,ν)= α1^t*Σ*α1-ν(α1^t*α1-1)
关于α1求偏导并使结果等于零,可得:Σ*α1 = ν*α1 (显而易见,ν是Σ的特征值,α1是Σ对应ν的特征向量)
代回得,Var(ξ1) = ν*α1^t*α1 = ν,说明方差的最大值就是x的协方差矩阵的特征值,取最大的特征值ν,使新特征ξ1最重要

计算第二个新特征ξ2的方差:

Var(ξ2) = α2^t*Σ*α2
保持ξ1与ξ2不相关,即加入约束Cov(ξ1,ξ2)= 0
Cov(ξ1,ξ2)
= E[ξ1*ξ2^t] - E[ξ1]E[ξ2^t]
= α1^t*{E[x^t*x]-E[x]E[x^t]}*α2^t
= α1^t*Σ*α2
为利用第一个新特征的条件,求Cov(ξ2,ξ1)
Cov(ξ2,ξ1) = Cov(ξ1,ξ2)
= α2^t*Σ*α1
= ν*α2^t*α1 (因为Σ*α1 = ν*α1)
= 0
得 α2^t*α1 = 0,说明α1与α2正交,也就是说,此处不相关等价于α1与α2正交
在α2^t*α2=1和α2^t*α1 =0的约束下用拉格朗日乘子法求Var(ξ2)的最大值
f(α2,α1,m,n) = α2^t*Σ*α2 - m(α2^t*α2-1) - n*α2^t*α1
分别对α2,α1,m,n求偏导并使结果为0,得n=0, Σ*α2 = m*α2 (显而易见,m是Σ的特征值,α2是Σ对应m的特征向量)
代回得,Var(ξ2) = m

计算其余新特征ξ的方差

同理,求出ξ3,ξ4…ξp

进一步总结

  • 可以发现,每个新特征ξi的方差都是x协方差矩阵Σ的特征值,所以有了这个理论基础后可以直接求Σ的特征值,并从大到小排序,依次作为ξi的方差
  • Σ是实对称矩阵,所以Σ一定正交相似于对角矩阵,且对角矩阵的对角元素就是Σ的特征值,只需找出正交矩阵O,使O^(-1)ΣO=diag(λ1,λ2…λp)即可
  • Σ是实对称矩阵,所以Σ对应不同特征值的特征向量都是正交的,求出特征向量再对特征向量进行单位化,各个特征向量即可组成一个符合条件的正交矩阵
  • 不仅如此,我们发现,计算过程中各个组合系数αi是正交的,且长度为1,所以直接用通过Σ得到的正交矩阵的各个列向量作为αi即可!所以组合系数来的很方便,但要注意对照特征值进行排序
  • 这样一来,新旧特征之间的具体关系ξ=A^t*x就明确了,直接从原特征x协方差矩阵的特征值特征向量下手,就能得到新特征!实际中通常把主成分进行零均值化,即 ξ = A^t*(x-μ),这样协方差矩阵更容易计算,且不影响主成分的方向
  • 每个ξi都是一个主成分,全部主成分的方差之和等于x协方差矩阵特征值的和,即 ΣVar(ξi) = Σλi,也就是x协方差矩阵的迹(trace)

如何降维?

  • 通常希望用较少的主成分ξi来表示数据,前k个主成分的方差和Σλi比上所有主成分的方差和可以得到这k个主成分所占的比例,根据实际需求,比如80%,算出k的个数
  • 降维:
    • 把p维的数据减少成k维的数据(k<p),也就是用ξ的前k个维度(ξ1,ξ2…ξk)^t 描述每个样本
    • 换句话说,原来的坐标轴是(x1,x2…xp)^t,降维后的坐标轴是(ξ1,ξ2…ξk)^t.
    • 给个具体的例子,p*m维矩阵C,由m个样本构成,每个样本是p维,使用A的前k个主成分进行降维,A^t*C,即可得到降维后的数据