详细推导PCA算法(包括算法推导必备的知识)

本文主要思路如下:
在这里插入图片描述

1 PCA优化目标

PCA(主成分分析)是一种数据降维的方法,即用较少特征地数据表达较多特征地数据(数据压缩,PCA属于有损压缩)。PCA推导有两种主要思路:

  1. 最大化数据投影后的的方差(让数据更分散)
  2. 最小化投影造成的损失

本文采用第一种思路完成推导过程,下图中旋转的是新坐标轴,每个数据点在改坐标轴上垂直投影,最佳的坐标轴为数据投影后的数据之间距离最大。

要完成PCA推导过程,需要如下第 2 章部分的理论依据

2 理论依据

2.1 矩阵换基底

坐标变换地目标是,找到一组新的正交单位向量,替换原来的正交单位向量。下面通过具体例子说明。
假设存在向量 a ⃗ = [ 3 2 ] \vec{a}=\begin{bmatrix} 3\\2\end{bmatrix} a =[32] ,要变换导以 u ⃗ = [ 1 2 1 2 ] \vec{u}=\begin{bmatrix}{1\over\sqrt{2}}\\ {1\over\sqrt{2}}\end{bmatrix} u =[2 12 1], v ⃗ = [ − 1 2 1 2 ] \vec{v}=\begin{bmatrix}-{1\over\sqrt{2}}\\ {1\over\sqrt{2}}\end{bmatrix} v =[2 12 1] 为新基底地坐标上,求在心坐标系中的坐标
在这里插入图片描述
∵ \because 向量 a ⃗ \vec{a} a 在向量 u ⃗ \vec{u} u 上的投影距离 s:
s = ∣ ∣ a ⃗ ∣ ∣ ⋅ cos ⁡ θ = a ⃗ ⋅ u ⃗ ∣ ∣ u ⃗ ∣ ∣ = a ⃗ ⋅ u ⃗ s=||\vec{a}||\cdot \cos\theta = {\vec{a}\cdot\vec{u}\over ||\vec{u}||}=\vec{a}\cdot\vec{u} s=a cosθ=u a u =a u
其中: θ \theta θ 表示两个向量之间的夹角
∴ a u = u ⃗ T ⋅ a ⃗ ,   a v = v ⃗ T ⋅ a ⃗ \therefore a_u=\vec{u}^T\cdot \vec{a},\ a_v=\vec{v}^T\cdot \vec{a}\\ au=u Ta , av=v Ta

∴ \therefore 向量 a ⃗ \vec{a} a 在新坐标系中的坐标可以表示为:
a ⃗ n e w = [ u ⃗ v ⃗ ] T ⋅ a ⃗ = [ u ⃗ T ⋅ a ⃗ v ⃗ T ⋅ a ⃗ ] \vec{a}_{new} =\begin{bmatrix}\vec{u}&\vec{v}\end{bmatrix}^T\cdot \vec{a} =\begin{bmatrix} \vec{u}^T\cdot\vec{a}\\ \vec{v}^T\cdot\vec{a}\\ \end{bmatrix}\\ a new=[u v ]Ta =[u Ta v Ta ]
如果矩阵 A 的列向量分别表示原来坐标系中的点,那么在新坐标系中的坐标为:
A n e w = [ u ⃗ v ⃗ ] T ⋅ A A_{new} =\begin{bmatrix}\vec{u}&\vec{v}\end{bmatrix}^T\cdot A\\ Anew=[u v ]TA
如果 a ⃗ c e n t e r \vec{a}_{center} a center 表示一系列数据点的中心,那么可以证明:
a ⃗ n e w c e n t e r = [ u ⃗ v ⃗ ] T ⋅ a ⃗ c e n t e r \vec{a}_{newcenter}=\begin{bmatrix}\vec{u}&\vec{v}\end{bmatrix}^T\cdot \vec{a}_{center}\\ a newcenter=[u v ]Ta center
经过上面的变换之后,新坐标系相比原坐标系顺时针旋转了45度; a ⃗ \vec{a} a 相对新坐标系位置和相对原坐标系位置发生了逆时针旋转45度。即:上述变换过程为向量的旋转过程,旋转的角度=-坐标系旋转角度

如果 ∣ ∣ u ⃗ ∣ ∣ ≠ 1 , ∣ ∣ v ⃗ ∣ ∣ ≠ 1 ||\vec{u}||\neq1, ||\vec{v}||\neq 1 u ̸=1,v ̸=1 ,那么:
u ⃗ T ⋅ a ⃗ = s ⋅ ∣ ∣ u ⃗ ∣ ∣ v ⃗ T ⋅ a ⃗ = s ⋅ ∣ ∣ v ⃗ ∣ ∣ \vec{u}^T\cdot \vec{a}=s\cdot ||\vec{u}||\\ \vec{v}^T\cdot \vec{a}=s\cdot ||\vec{v}||\\ u Ta =su v Ta =sv
即: a ⃗ n e w \vec{a}_{new} a new 相比 a ⃗ \vec{a} a ,2个坐标分别放大了 ∣ ∣ u ⃗ ∣ ∣ ||\vec{u}|| u 倍和 ∣ ∣ v ⃗ ∣ ∣ ||\vec{v}|| v 倍。即向量发生了伸缩

2.2 拉格朗日乘子法

拉格朗日乘子法主要提供了一种求解函数在约束条件下极值的方法。下面还是通过一个例子说明。
假设存在一个函数 f ( x , y ) f(x,y) f(x,y) ,求该函数在 g ( x , y ) = c g(x,y)=c g(x,y)=c 下的极值(可以是极大,也可以极小)

通过观察我们发现,在极值点的时候两个函数必然相切,即此时各自的导数成正比,从而:
∂ f ∂ x = λ ∂ g ∂ x   ∂ f ∂ y = λ ∂ g ∂ y   g ( x , y ) = c {\partial f\over\partial x}=\lambda{\partial g\over\partial x}\\ \ \\ {\partial f\over\partial y}=\lambda{\partial g\over\partial y}\\ \ \\ g(x,y)=c\\ xf=λxg yf=λyg g(x,y)=c
通过联立上述三个公式,既可以求出最终结果。拉格朗日算子的主要思路同上,不过他假设了一个新的函数:
F ( x , y , λ ) = f ( x , y ) + λ [ c − g ( x , y ) ] F(x,y,\lambda)=f(x,y)+\lambda[c-g(x,y)]\\ F(x,y,λ)=f(x,y)+λ[cg(x,y)]
然后分解求:
∂ F ∂ x = 0   ∂ F ∂ y = 0   ∂ F ∂ λ = 0 {\partial F\over\partial x}=0\\ \ \\ {\partial F\over\partial y}=0\\ \ \\ {\partial F\over\partial \lambda}=0\\ xF=0 yF=0 λF=0
从而完成求解过程

2.3 协方差矩阵

假设有一组数据:
样 本 编 号 变 量 x ( 如 发 传 单 数 量 ) 变 量 y ( 如 购 买 数 量 ) 变 量 z ( 如 购 买 总 价 ) 1 1 2 3 2 35 25 55 ⋯ ⋯ ⋯ ⋯ \begin{array}{c|cccc} 样本编号&变量x(如发传单数量)&变量y(如购买数量)&变量z(如购买总价)\\ \hline 1& 1 &2&3\\ 2&35&25&55\\ \cdots&\cdots&\cdots&\cdots\\ \end{array} 12x135y225z355
协方差研究的目的是变量(特征)之间的关系,也就是上表中的发传单数量、购买数量、购买总额之间的相关情况
上表数据用矩阵表示为:
X = [ 1 35 ⋯ 2 25 ⋯ 3 55 ⋯ ] X=\begin{bmatrix} 1&35&\cdots\\ 2&25&\cdots\\ 3&55&\cdots\\ \end{bmatrix}\\ X=123352555
那么两两变量之间的关系:
c o v ( x , y ) = E [ ( 1 − E ( x ) ) ( 2 − E ( y ) ) + ( 35 − E ( x ) ) ( 25 − E ( y ) ) + ⋯   ] c o v ( x , z ) = E [ ( 1 − E ( x ) ) ( 3 − E ( z ) ) + ( 35 − E ( x ) ) ( 55 − E ( z ) ) + ⋯   ] ⋯ cov(x,y)=E[(1-E(x))(2-E(y))+(35-E(x))(25-E(y))+\cdots]\\ cov(x,z)=E[(1-E(x))(3-E(z))+(35-E(x))(55-E(z))+\cdots]\\ \cdots\\ cov(x,y)=E[(1E(x))(2E(y))+(35E(x))(25E(y))+]cov(x,z)=E[(1E(x))(3E(z))+(35E(x))(55E(z))+]
如果 E ( x ) = E ( y ) = E ( z ) = 0 E(x)=E(y)=E(z)=0 E(x)=E(y)=E(z)=0(可以通过数据初始化实现),那么上述的协方差关系可以用如下矩阵乘法表示:
c o v ( X ) = 1 m X X T = [ c o v ( x , x ) c o v ( x , y ) c o v ( x , z ) c o v ( y , x ) c o v ( y , y ) c o v ( y , z ) c o v ( z , x ) c o v ( z , y ) c o v ( z , z ) ] cov(X)={1\over m}XX^T=\begin{bmatrix} cov(x,x)&cov(x,y)&cov(x,z)\\ cov(y,x)&cov(y,y)&cov(y,z)\\ cov(z,x)&cov(z,y)&cov(z,z)\\ \end{bmatrix}\\ cov(X)=m1XXT=cov(x,x)cov(y,x)cov(z,x)cov(x,y)cov(y,y)cov(z,y)cov(x,z)cov(y,z)cov(z,z)
如果把对角线上的数据加起来会发现:
c o v ( x , x ) + c o v ( y , y ) + c o v ( z , z ) = E [ ( [ ( 1 − E ( x ) ] 2 + [ 2 − E ( y ) ] 2 + [ 3 − E ( z ) ] 2 ) + ⋯   ] = 1 m ∑ i = 1 m ∣ ∣ X i − X c e n t e r ∣ ∣ 2 cov(x,x)+cov(y,y)+cov(z,z)=E[([(1-E(x)]^2+[2-E(y)]^2+[3-E(z)]^2)+\cdots]={1\over m}\sum_{i=1}^m||X_i-X_{center}||^2\\ cov(x,x)+cov(y,y)+cov(z,z)=E[([(1E(x)]2+[2E(y)]2+[3E(z)]2)+]=m1i=1mXiXcenter2
也就是说每个样本点到样本中心距离的平方和的平均 = 样本各个特征方差和(自身协方差)= ​ ∑ d i a g ( 1 m X X T ) \sum diag({1\over m}XX^T) diag(m1XXT) ,即样本的方差

2.4 特征向量和奇异值分解

2.4.1 特征向量

参考:特征值和特征向量

假设:左侧矩形由 [ i ⃗ j ⃗ ] = [ 1 0 0 1 ] \begin{bmatrix} \vec{i}&\vec{j} \end{bmatrix}=\begin{bmatrix} 1&0\\ 0&1\\ \end{bmatrix} [i j ]=[1001] 定义,右侧矩形由 [ i ′ ⃗ j ′ ⃗ ] = [ 2 0 0 0.5 ] \begin{bmatrix} \vec{i'}&\vec{j'} \end{bmatrix}=\begin{bmatrix} 2&0\\ 0&0.5\\ \end{bmatrix} [i j ]=[2000.5] 定义。

根据 2.1 矩阵拉伸变换的结果,变换矩阵 A = [ u ⃗ T v ⃗ T ] = [ 2 0 0 0.5 ] A=\begin{bmatrix} \vec{u}^T\\ \vec{v}^T\\ \end{bmatrix}=\begin{bmatrix} 2&0\\ 0&0.5\\ \end{bmatrix} A=[u Tv T]=[2000.5] ,即:
A ⋅ [ i ⃗ j ⃗ ] = [ i ′ ⃗ j ′ ⃗ ] A\cdot\begin{bmatrix} \vec{i}&\vec{j} \end{bmatrix}=\begin{bmatrix} \vec{i'}&\vec{j'}\\ \end{bmatrix}\\ A[i j ]=[i j ]
在应用变换矩阵变换时,我们发现存在与上图中红色向量平行的向量 \vec{a} ,他们总满足:
A ⋅ a ⃗     / /     a ⃗ A\cdot \vec{a}\ \ \ //\ \ \ \vec{a}\\ Aa    //   a
即:
A ⋅ a ⃗ = λ ⋅ a ⃗ A\cdot \vec{a}=\lambda\cdot \vec{a}\\ Aa =λa
所以:红色的特征向量不受变换矩阵的影响,仍保持原来的方向,我们称这类向量为变换矩阵A的特征向量,对应的 \lambda 为特征值。又因为特征向量有很多个,即:
A ⋅ a i ⃗ = λ i ⋅ a i ⃗ A\cdot \vec{a_i}=\lambda_i\cdot \vec{a_i}\\ Aai =λiai
所以:
A ⋅ [ a 1 ⃗ a 2 ⃗ ⋯ ] = [ a 1 ⃗ a 2 ⃗ ⋯ ] ⋅ [ λ 1 λ 2 ⋱ ] ⇒ A = Q ⋅ Σ ⋅ Q − 1 A\cdot\begin{bmatrix} \vec{a_1}&\vec{a_2}&\cdots \end{bmatrix}=\begin{bmatrix} \vec{a_1}&\vec{a_2}&\cdots \end{bmatrix}\cdot\begin{bmatrix} \lambda_1&&\\ &\lambda_2&\\ &&\ddots \end{bmatrix}\Rightarrow A=Q\cdot \Sigma\cdot Q^{-1}\\ A[a1 a2 ]=[a1 a2 ]λ1λ2A=QΣQ1
其中:Q的列向量都是A变换矩阵的特征向量
另外,在做旋转变换时,要求变换前后的坐标维度不发生改变,即A须为方阵
综上:如果方阵A满足 A = Q ⋅ Σ ⋅ Q − 1 A=Q\cdot \Sigma\cdot Q^{-1} A=QΣQ1 ,那么Q为特征向量, Σ \Sigma Σ 为对应的特征值

2.4.2 奇异值分解

奇异值分解(svd: singular value decomposition)定义:对于任意的矩阵A,存在:
A m × n = U m × m ⋅ Σ m × n ⋅ V n × n T A_{m\times n}=U_{m\times m}\cdot\Sigma_{m\times n}\cdot V_{n\times n}^T\\ Am×n=Um×mΣm×nVn×nT
其中:
U T ⋅ U = I m V T ⋅ V = I n U^T\cdot U=I_m\\ V^T\cdot V=I_n\\ UTU=ImVTV=In
即:U的列向量两两正交且模为1,V列向量两两正交且模为1,即:
U T = U − 1 V T = V − 1 U^T=U^{-1}\\ V^T=V^{-1}\\ UT=U1VT=V1

2.4.3 特征向量和奇异值分解的关系

对于任意矩阵 A ,对A做svd有:
A A T = U Σ V T ⋅ V Σ U T = U Σ 2 U − 1 AA^T=U\Sigma V^T\cdot V\Sigma U^T=U\Sigma^2U^{-1}\\ AAT=UΣVTVΣUT=UΣ2U1
Σ ′ = Σ 2 \Sigma'=\Sigma^2 Σ=Σ2 ,则:
A A T = U Σ ′ U − 1 满 足 A = Q Σ Q − 1 特 征 向 量 定 义 AA^T=U\Sigma' U^{-1}\\ 满足A=Q\Sigma Q^{-1}特征向量定义\\ AAT=UΣU1A=QΣQ1
所以 AA^T 能实现特征分解,又因为:
A A T = U ′ ′ Σ ′ ′ V ′ ′ T ⎵ s v d AA^T=\underbrace{U''\Sigma'' V''^T}_{svd}\\ AAT=svd UΣVT
所以:
U = U ′ ′ Σ ′ = Σ ′ ′ U − 1 = V ′ ′ T ⇒ U = V ′ ′ U=U''\\ \Sigma'=\Sigma''\\ U^{-1}=V''^T\Rightarrow U=V'' U=UΣ=ΣU1=VTU=V
因此:对 A A T AA^T AAT 做SVD,那么得到的U’'列向量为特征向量(对应A的U矩阵), Σ ′ ′ \Sigma'' Σ 为特征值对角阵

同理:对 A T A A^TA ATA做SVD,那么得到的U’'列向量为特征向量(对应A的V矩阵), Σ ′ ′ \Sigma'' Σ 为特征值对角矩阵

3 PCA

3.1 PCA推导

PCA的目标是找到一组新的正交基 { u 1 , u 2 , ⋯   , u k } \{u_1,u_2,\cdots,u_k\} {u1,u2,,uk} (从n维下降到k维),使得数据点在该正交基构成的平面上投影后,数据间的距离最大,即数据间的方差最大。如果数据在每个正交基上投影后的方差最大,那么同样满足在正交基所构成的平面上投影距离最大。

根据2.1,设正交基 u j u_j uj ,数据点 x i x_i xi 在该基底上的投影距离为 x i T ⋅ u j x_i^T\cdot u_j xiTuj ,所以所有数据在该基底上投影的方差 J j J_j Jj 为:
J j = 1 m ∑ i = 1 m ( x i T u j − x c e n t e r T u j ) 2 J_j={1\over m}\sum_{i=1}^m(x_i^Tu_j-x_{center}^Tu_j)^2\\ Jj=m1i=1m(xiTujxcenterTuj)2
其中:m为样本数量,在数据运算之前对数据 x 进行0均值初始化,即 x_{center}=0 ,从而:
J j = 1 m ∑ i = 1 m ( x i T u j ) 2 = 1 m ∑ i = 1 m ( u j T x i ⋅ x i T u j ) = u j T ⋅ 1 m ∑ i = 1 m ( x i x i T ) ⋅ u j J_j={1\over m}\sum_{i=1}^m(x_i^Tu_j)^2 ={1\over m}\sum_{i=1}^m(u_j^Tx_i\cdot x_i^T u_j) =u_j^T\cdot {1\over m}\sum_{i=1}^m(x_ix_i^T)\cdot u_j \\ Jj=m1i=1m(xiTuj)2=m1i=1m(ujTxixiTuj)=ujTm1i=1m(xixiT)uj
所以:
J j = u j T ⋅ 1 m ( x 1 x 1 T + x 2 x 2 T + ⋯ + x m x m T ) ⋅ u j = u j T ⋅ 1 m ( [ x 1 ⋯ x m ] ⋅ [ x 1 ⋮ x m ] ) ⋅ u j = = 1 m u j T X X T u j J_j =u_j^T\cdot {1\over m}(x_1x_1^T+x_2x_2^T+\cdots+x_mx_m^T)\cdot u_j =u_j^T\cdot {1\over m}(\begin{bmatrix}x_1&\cdots&x_m\end{bmatrix}\cdot\begin{bmatrix}x_1\\ \vdots \\x_m\end{bmatrix})\cdot u_j =={1\over m}u_j^TXX^Tu_j\\ Jj=ujTm1(x1x1T+x2x2T++xmxmT)uj=ujTm1([x1xm]x1xm)uj==m1ujTXXTuj
由于 1 m X X T {1\over m}XX^T m1XXT 为常数,这里假设 S = 1 m X X T S={1\over m}XX^T S=m1XXT ,则: J j = u j T ⋅ S ⋅ u j J_j=u_j^T\cdot S\cdot u_j Jj=ujTSuj ,根据PCA目标,我们需要求解 J j J_j Jj 最大时对应的 u j u_j uj
根据 2.2 中的拉格朗日算子(求极值)求解:
J j = u j T S u j   s . t .   u j T u j = 1 J_{j}=u_j^TSu_j\\\ \\s.t.\ u_j^Tu_j=1\\ Jj=ujTSuj s.t. ujTuj=1
则构造函数:
F ( u j ) = u j T S u j + λ j ( 1 − u j T u j ) F(u_j)=u_j^TSu_j+\lambda_j(1-u_j^Tu_j)\\ F(uj)=ujTSuj+λj(1ujTuj)
求解 ∂ F ∂ u j = 0 {\partial F\over\partial u_j}=0 ujF=0 ,得:
2 S ⋅ u j − 2 λ j ⋅ u j = 0    ⇒    S u j = λ j u j 2S\cdot u_j-2\lambda_j\cdot u_j=0\ \ \Rightarrow\ \ Su_j=\lambda_ju_j\\ 2Suj2λjuj=0    Suj=λjuj
结合2.4.1则:当 u j 、 λ j u_j、\lambda_j ujλj 分别为S矩阵的特征向量、特征值时, J j J_j Jj 有极值,把上述结果带回公式得:
J j m = u j T λ j u j = λ j {J_j}_m=u_j^T\lambda_j u_j=\lambda_j\\ Jjm=ujTλjuj=λj
所以对于任意满足条件的正交基,对应的数据在上面投影后的方差值为S矩阵的特征向量,从而:
J m a x = ∑ j = 1 k λ j , λ 从 大 到 小 排 序 J_{max}=\sum_{j=1}^k \lambda_j,\lambda从大到小排序\\ Jmax=j=1kλjλ
所以投影正交基为S的特征向量中的前k个最大特征值对应的特征向量。
接下来对S进行特征分解,根据2.4.3特征向量和svd的关系结论,S的特征向量集合:
U = U   o f   s v d ( S ) = U   o f   s v d ( 1 m X X T ) U = U\ of\ svd(S)=U\ of\ svd({1\over m}XX^T)\\ U=U of svd(S)=U of svd(m1XXT)
另外,由于 S = 1 m X X T S={1\over m}XX^T S=m1XXT 由于X已0均值处理,根据2.3 协方差矩阵定义:S为数据集X的协方差矩阵。
综上,即可得到满足投影后数据距离最大的新的正交基 { u 1 , u 2 , ⋯   , u k } \{u_1,u_2,\cdots,u_k\} {u1,u2,,uk}
因此:
X n e w k × m = [ u 1 T u 2 T ⋮ u k T ] k × n ⋅ X n × m X_{new_{k\times m}}=\begin{bmatrix} u_1^T\\ u_2^T\\ \vdots\\ u_k^T\\ \end{bmatrix}_{k\times n}\cdot X_{n\times m}\\ Xnewk×m=u1Tu2TukTk×nXn×m

3.2 PCA过程总结

PCA流程如下:

  1. 初始化X,使得所有样本之间的特征值均值为0,同时应用feature scaling,缩放到-0.5~0.5 ;
  2. 计算X的协方差矩阵S;
  3. 对S进行SVD分解,U即我们要求的新坐标系集合, Σ \Sigma Σ 为特征值集合(计算时特征值都会大于0,且结果会从小到大排列);
  4. 按照特征值从大到小排序,要降低为k维,那么取前k个特征值对应的特征向量,就是新的k个坐标轴
  5. 把X映射到新的坐标系中,完整降维操作;

根据之前的公式,做PCA投影后,投影数据的方差:
V a r X p r o j e c t = ∑ j = 1 k J j = ∑ j = 1 k λ j Var_{X_{project}}=\sum_{j=1}^kJ_j=\sum_{j=1}^k\lambda_j\\ VarXproject=j=1kJj=j=1kλj
又因为:数据从n维投影新的n维的坐标系,方差不会发生改变(向量的模长度相等且为1,可以用2D坐标系投影到45-135度坐标系验证),即:
V a r X = V a r X p r o j e c t = ∑ j = 1 n J j = ∑ j = 1 n λ j Var_X=Var_{X_{project}}=\sum_{j=1}^nJ_j=\sum_{j=1}^n\lambda_j\\ VarX=VarXproject=j=1nJj=j=1nλj
即:X的协方差矩阵的特征值和对应X的方差

  • 14
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值