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


前言
该文章转载自
https://blog.csdn.net/QQ2627866800/article/details/86656237
自己做了点修订
在这里插入图片描述


1. PCA优化目标

用较少特征地数据表达较多特征地数据
PCA推导有两种主要思路:
        1 最大化数据投影后的的方差(让数据更分散)
        2 最小化投影造成的损失
        下图中旋转的是新坐标轴,每个数据点在该坐标轴上垂直投影,最佳的坐标轴为数据投影后各点数据之间距离最大。
在这里插入图片描述

2.理论依据

2.1 矩阵换基底

坐标变换的目标是,找到一组新的正交单位向量,替换原来的正交单位向量。
 假设存在向量  a ⃗ = [ 3 2 ] ,  要将其变换为以  u ⃗ = [ 1 2 1 2 ] , v ⃗ = [ − 1 2 1 2 ]  为新基底地坐标上, 求在新坐标系中的坐标  \text { 假设存在向量 } \vec{a}=\left[\begin{array}{l} 3 \\ 2 \end{array}\right], \text { 要将其变换为以 } \vec{u}=\left[\begin{array}{l} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{array}\right], \vec{v}=\left[\begin{array}{c} -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{array}\right] \text { 为新基底地坐标上, 求在新坐标系中的坐标 }  假设存在向量 a =[32], 要将其变换为以 u =[2 12 1],v =[2 12 1] 为新基底地坐标上求在新坐标系中的坐标 
在这里插入图片描述
∵ \because 向量 a ⃗ \vec{a} a 在向量 u ⃗ \vec{u} u 上的投影距离 s : \mathrm{s}: s:
s = ∥ a ⃗ ∥ ⋅ cos ⁡ θ = a ⃗ ⋅ u ⃗ ∥ u ⃗ ∥ = a ⃗ ⋅ u ⃗ s=\|\vec{a}\| \cdot \cos \theta=\frac{\vec{a} \cdot \vec{u}}{\|\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}_{n e w}=\left[\begin{array}{ll} \vec{u} & \vec{v} \end{array}\right]^{T} \cdot \vec{a}=\left[\begin{array}{l} \vec{u}^{T} \cdot \vec{a} \\ \vec{v}^{T} \cdot \vec{a} \end{array}\right] a new=[u v ]Ta =[u Ta v Ta ]
如果矩阵 A \mathrm{A} A 的列向量分别表示原来坐标系中的点, 那么在新坐标系中的坐标为:
A n e w = [ u ⃗ v ⃗ ] T ⋅ A A_{n e w}=\left[\begin{array}{ll} \vec{u} & \vec{v} \end{array}\right]^{T} \cdot A Anew=[u v ]TA

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 \begin{array}{l} \frac{\partial f}{\partial x}=\lambda \frac{\partial g}{\partial x} \\ \frac{\partial f}{\partial y}=\lambda \frac{\partial g}{\partial y} \\ g(x, y)=c \end{array} xf=λxgyf=λygg(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 \begin{array}{l} \frac{\partial F}{\partial x}=0 \\ \frac{\partial F}{\partial y}=0 \\ \frac{\partial F}{\partial \lambda}=0 \end{array} xF=0yF=0λF=0
从而完成求解过程

2.3 协方差矩阵

假设有一组数据:
 样本编号   变量  x  (如发传单数量)   变量  y  (如购买数量)   变量  z  (如购买总价  ) 1 1 2 3 2 35 25 55 ⋯ ⋯ ⋯ ⋯ \begin{array}{c|ccc} \text { 样本编号 } & \text { 变量 } x \text { (如发传单数量) } & \text { 变量 } y \text { (如购买数量) } & \text { 变量 } z \text { (如购买总价 }) \\ \hline 1 & 1 & 2 & 3 \\ 2 & 35 & 25 & 55 \\ \cdots & \cdots & \cdots & \cdots \end{array}  样本编号 12 变量 x (如发传单数量135 变量 y (如购买数量225 变量 z (如购买总价 )355
协方差研究的目的是变量 (特征) 之间的关系, 也就是上表中的发传单数量、购买数量、购买总额之间的相关情况 上表数据用矩阵表示为:
X = [ 1 35 ⋯ 2 25 ⋯ 3 55 ⋯ ] X=\left[\begin{array}{lll} 1 & 35 & \cdots \\ 2 & 25 & \cdots \\ 3 & 55 & \cdots \end{array}\right] X=123352555
那么两两变量之间的关系:
cov ⁡ ( x , y ) = E [ ( 1 − E ( x ) ) ( 2 − E ( y ) ) + ( 35 − E ( x ) ) ( 25 − E ( y ) ) + ⋯   ] cov ⁡ ( x , z ) = E [ ( 1 − E ( x ) ) ( 3 − E ( z ) ) + ( 35 − E ( x ) ) ( 55 − E ( z ) ) + ⋯   ] \begin{array}{l} \operatorname{cov}(x, y)=E[(1-E(x))(2-E(y))+(35-E(x))(25-E(y))+\cdots] \\ \operatorname{cov}(x, z)=E[(1-E(x))(3-E(z))+(35-E(x))(55-E(z))+\cdots] \end{array} 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 (可以通过数据初始化实现,即减去平均值),那么上述的协方差关系可以用如下矩阵乘法表示:
cov ⁡ ( X ) = 1 m X X T = [ 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 ) ] \operatorname{cov}(X)=\frac{1}{m} X X^{T}=\left[\begin{array}{lll} \operatorname{cov}(x, x) & \operatorname{cov}(x, y) & \operatorname{cov}(x, z) \\ \operatorname{cov}(y, x) & \operatorname{cov}(y, y) & \operatorname{cov}(y, z) \\ \operatorname{cov}(z, x) & \operatorname{cov}(z, y) & \operatorname{cov}(z, z) \end{array}\right] 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)

2.4 特征向量和奇异值分解

2.4.1 特征向量

在这里插入图片描述

假设:左侧矩形由 [ i j ] = [ 1 0 0 1 ] \left[\begin{array}{ll}i & j\end{array}\right]=\left[\begin{array}{ll}1 & 0 \\ 0 & 1\end{array}\right] [ij]=[1001] 定义, 右侧矩形由 [ i ⃗ ′ j ⃗ ′ ] = [ 2 0 0 0.5 ] \left[\begin{array}{ll}\vec{i}^{\prime} & \vec{j}^{\prime}\end{array}\right]=\left[\begin{array}{cc}2 & 0 \\ 0 & 0.5\end{array}\right] [i j ]=[2000.5] 定义。
根据 2.1 矩阵拉伸变换的结果, 变换矩阵 A = [ u ⃗ T v ⃗ T ] = [ 2 0 0 0.5 ] , A=\left[\begin{array}{c}\vec{u}^{T} \\ \vec{v}^{T}\end{array}\right]=\left[\begin{array}{cc}2 & 0 \\ 0 & 0.5\end{array}\right], A=[u Tv T]=[2000.5], 即 :
A ⋅ [ i j ⃗ ] = [ i ⃗ ′ j ⃗ ′ ] A \cdot\left[\begin{array}{ll} i & \vec{j} \end{array}\right]=\left[\begin{array}{ll} \vec{i}^{\prime} & \vec{j}^{\prime} \end{array}\right] A[ij ]=[i j ]
在应用变换矩阵变换时,我们发现存在与上图中红色向量平行的向量 a ⃗ , \vec a , 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的特征向量, 对应的 Vambda 为特征值。又因为特征向量有很多个, 即 :
A ⋅ a ⃗ i = λ i ⋅ a ⃗ i A \cdot \vec{a}_{i}=\lambda_{i} \cdot \vec{a}_{i} Aa i=λia i
所以:
A ⋅ [ a ⃗ 1 a ⃗ 2 ⋯ ] = [ a ⃗ 1 a ⃗ 2 ⋯ ] ⋅ [ λ 1 λ 2 ⋱ ] ⇒ A = Q ⋅ Σ ⋅ Q − 1 A \cdot\left[\begin{array}{lll} \vec{a}_{1} & \vec{a}_{2} & \cdots \end{array}\right]=\left[\begin{array}{lll} \vec{a}_{1} & \vec{a}_{2} & \cdots \end{array}\right] \cdot\left[\begin{array}{lll} \lambda_{1} \\ & \lambda_{2} \\ & & \ddots \end{array}\right] \Rightarrow A=Q \cdot \Sigma \cdot Q^{-1} A[a 1a 2]=[a 1a 2]λ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 \begin{array}{l} U^{T} \cdot U=I_{m} \\ V^{T} \cdot V=I_{n} \end{array} UTU=ImVTV=In即:U的列向量两两正交且模为1, V列向量两两正交且模为1,即:
U T = U − 1 U^{T}=U^{-1} UT=U1 V T = V − 1 V^{T}=V^{-1} VT=V1

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

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

3 PCA

3.1 PCA推导

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

根据2.1,先考虑一个正交基 u j , u_{j}, uj, 数据点 x i x_{i} xi 在该基底上的投影距离为 x i T ⋅ u j , x_{i}^{T} \cdot u_{j}, xiTuj, 所以所有的 m m m n n n维样本数据在该基底上投影的方差 J j J_{j} Jj 为:
J j = 1 m ∑ i = 1 m ( x i T u j − x center T u j ) 2 J_{j}=\frac{1}{m} \sum_{i=1}^{m}\left(x_{i}^{T} u_{j}-x_{\text {center}}^{T} u_{j}\right)^{2} Jj=m1i=1m(xiTujxcenterTuj)2 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}=\frac{1}{m} \sum_{i=1}^{m}\left(x_{i}^{T} u_{j}\right)^{2}=\frac{1}{m} \sum_{i=1}^{m}\left(u_{j}^{T} x_{i} \cdot x_{i}^{T} u_{j}\right)=u_{j}^{T} \cdot \frac{1}{m} \sum_{i=1}^{m}\left(x_{i} x_{i}^{T}\right) \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 T ⋮ x m T ] ) ⋅ u j = = 1 m u j T X X T u j J_{j}=u_{j}^{T} \cdot \frac{1}{m}\left(x_{1} x_{1}^{T}+x_{2} x_{2}^{T}+\cdots+x_{m} x_{m}^{T}\right) \cdot u_{j}=u_{j}^{T} \cdot \frac{1}{m}\left(\left[\begin{array}{lll} x_{1} & \cdots & x_{m} \end{array}\right] \cdot\left[\begin{array}{c} x_{1} ^{T}\\ \vdots \\ x_{m}^{T} \end{array}\right]\right) \cdot u_{j}==\frac{1}{m} u_{j}^{T} X X^{T} u_{j} Jj=ujTm1(x1x1T+x2x2T++xmxmT)uj=ujTm1[x1xm]x1TxmTuj==m1ujTXXTuj
假设 S n × n = 1 m X X T , S_{n\times n}=\frac{1}{m} X X^{T}, Sn×n=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 J_{j}=u_{j}^{T} S u_{j} Jj=ujTSuj  s.t.  u j T u j = 1 \text { s.t. } u_{j}^{T} u_{j}=1  s.t. ujTuj=1
则构造函数:
F ( u j ) = u j T S u j + λ j ( 1 − u j T u j ) F\left(u_{j}\right)=u_{j}^{T} S u_{j}+\lambda_{j}\left(1-u_{j}^{T} u_{j}\right) F(uj)=ujTSuj+λj(1ujTuj)
求解 ∂ F ∂ u j = 0 , \frac{\partial F}{\partial u_{j}}=0, ujF=0, 得:
2 S ⋅ u j − 2 λ j ⋅ u j = 0 ⇒ S u j = λ j u j 2 S \cdot u_{j}-2 \lambda_{j} \cdot u_{j}=0 \Rightarrow S u_{j}=\lambda_{j} u_{j} 2Suj2λjuj=0Suj=λjuj
结合2.4.1则:当 u j 、 λ j u_{j} 、 \lambda_{j} ujλj 分别为S矩阵的特征向量、特征值时, J j J_{j} Jj 有极值, 把上述结果带回公式得 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
所以对于任意满足条件的正交基 { u 1 , u 2 , ⋯   , u k } \left\{u_{1}, u_{2}, \cdots, u_{k}\right\} \quad {u1,u2,,uk} ,对应的数据在上面投影后的方差值为S矩阵的特征向量, 从而:
J max ⁡ = ∑ j = 1 k λ j , λ  人大到小排序  J_{\max }=\sum_{j=1}^{k} \lambda_{j}, \lambda \text { 人大到小排序 } Jmax=j=1kλj,λ 人大到小排序 
所以投影正交基为S的特征向量中的前k个最大特征值对应的特征向量。 接下来对S进行特征分解, 根据2.4.3特征向量和svd的关系结论, S的特征向量集合:
U = U  of  svd ⁡ ( S ) = U  of  svd ⁡ ( 1 m X X T ) U=U \text { of } \operatorname{svd}(S)=U \text { of } \operatorname{svd}\left(\frac{1}{m} X X^{T}\right) U=U of svd(S)=U of svd(m1XXT)另外, 由于 S = 1 m X X T S=\frac{1}{m} X X^{T} S=m1XXT 由于X已0均值处理, 根据2.3 协方差矩阵定义:S为数据集X的协方差矩阵。 综上, 即可得到满足投影后数据距离最大的新的正交基 { u 1 , u 2 , ⋯   , u k } \left\{u_{1}, u_{2}, \cdots, u_{k}\right\} {u1,u2,,uk} 因此降维后的数据为:
X n e w k × m = [ u 1 T ′ u 2 T ⋮ u k T ] k × n ⋅ X n × m X_{n e w_{k \times m}}=\left[\begin{array}{c}u_{1}^{T^{\prime}} \\u_{2}^{T} \\\vdots \\u_{k}^{T} \end{array}\right]_{k \times n} \cdot X_{n \times m} Xnewk×m=u1Tu2TukTk×nXn×m

3.2 PCA过程总结

PCA流程如下:

  1. 初始化 X , X, X, 使得所有样本之间的特征值均值为0, 同时应用feature scaling, 缩放到-0.5 ∼ 0.5 \sim 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 V a r_{X_{p r o j e c t}}=\sum_{j=1}^{k} J_{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 project  = ∑ j = 1 n J j = ∑ j = 1 n λ j V a r_{X}=V a r_{X_{\text {project }}}=\sum_{j=1}^{n} J_{j}=\sum_{j=1}^{n} \lambda_{j} VarX=VarXproject =j=1nJj=j=1nλj
    即:X的协方差矩阵的特征值和对应X的方差
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值