从奇异值分解SVD到主成分分析PCA

1.奇异值分解(singular value decomposition,SVD)简介

1.1 矩阵A( A ∈ R m × n A\in R^{m\times n} ARm×n)的奇异值分解

A = U Σ V T A=U\Sigma V^T A=UΣVT

U , V 分 别 是 m 阶 、 n 阶 正 交 矩 阵 ; U,V分别是m阶、n阶正交矩阵; U,Vmn

Σ m × n = d i a g ( σ 1 , σ 2 , . . . , σ p ) \Sigma_{m\times n}=diag(\sigma _1,\sigma _2,...,\sigma _p) Σm×n=diag(σ1,σ2,...,σp)

p = min ⁡ ( m , n ) 且 σ 1 ≥ σ 2 ≥ . . . ≥ σ p ≥ 0 p=\min(m,n)且\sigma _1\ge\sigma _2\ge...\ge\sigma _p\ge0 p=min(m,n)σ1σ2...σp0

σ i 称 为 矩 阵 A 的 奇 异 值 , U 的 列 向 量 和 V 的 列 向 量 分 别 称 为 左 、 右 奇 异 向 量 。 \sigma_i称为矩阵A的奇异值,U的列向量和V的列向量分别称为左、右奇异向量。 σiA,UV

上式又被称为奇异值分解的完全(full)形式。

1.2 SVD的紧凑形式

r a n k ( A ) = r , r ≤ min ⁡ ( m , n ) rank(A)=r,r\le\min(m,n) rank(A)=r,rmin(m,n),则其紧凑(compact)形式可以表示为:

A = U r Σ r V r T \qquad \qquad A=U_r\Sigma_r V^T_r A=UrΣrVrT

其中 U r U_r Ur m × r m\times r m×r矩阵, Σ r \Sigma_r Σr r × r r\times r r×r对角矩阵, V r V_r Vr r × n r\times n r×n矩阵。

易知, r a n k ( A ) = r a n k ( Σ r ) rank(A)=rank(\Sigma_r) rank(A)=rank(Σr)

U k , V k , Σ k 可 以 分 别 通 过 U 的 前 r 列 、 V 的 前 r 列 以 及 U_k,V_k,\Sigma_k可以分别通过U的前r列、V的前r列以及 Uk,Vk,ΣkUrVr\Sigma的前r个对角线元素得到。

紧凑奇异值分解可以实现无损压缩。

1.3 SVD的截断形式

若只取最大的 k ( k < r ) k(k \lt r) k(k<r)个奇异值相应的部分,则得到奇异值分解的截断形式。

A ≈ U k Σ k V k T \qquad \qquad A\approx U_k\Sigma_k V^T_k AUkΣkVkT

其 中 U k \quad其中U_k Uk m × k m\times k m×k矩阵, Σ k \Sigma_k Σk k × k k\times k k×k对角矩阵, V k T V_k^T VkT k × n k\times n k×n矩阵;

U k , V k , Σ k 可 以 分 别 通 过 U 的 前 k 列 、 V 的 前 k 列 以 及 U_k,V_k,\Sigma_k可以分别通过U的前k列、V的前k列以及 Uk,Vk,ΣkUkVk\Sigma的前k个对角线元素得到。

r a n k ( Σ k ) < r a n k ( A ) rank(\Sigma_k)\lt rank(A) rank(Σk)<rank(A)

可以通过截断奇异值分解实现平方意义下的最优近似。

2.奇异值分解的求解过程

此部分主要参考华科教材《矩阵论》3.3节,觉得这部分写的相对更简明扼要。当然《统计学习方法》介绍的也非常好。

由 r a n k ( A T A ) = r a n k ( A ) , 且 r a n k ( A ) = r , 设 A T A 的 n 个 特 征 值 从 大 到 小 排 列 为 : 由rank(A^TA)=rank(A),且rank(A)=r,设A^TA的n个特征值从大到小排列为: rank(ATA)=rank(A)rank(A)=r,ATAn:

λ 1 ≥ λ 2 ≥ . . . ≥ λ r > 0 , λ r + 1 = . . . = λ n = 0 \\\qquad\qquad\lambda _1\ge\lambda _2\ge...\ge\lambda _r\gt0,\lambda _{r+1}=...=\lambda _n=0 λ1λ2...λr>0,λr+1=...=λn=0

则 对 实 对 称 矩 阵 A T A , 存 在 矩 阵 V ∈ R n × n , 使 得 : 则对实对称矩阵A^TA,存在矩阵V\in R^{n\times n},使得: ATAVRn×n使

v T A T A v = ( λ 1 ⋱ λ r 0 ⋱ 0 ) = ( λ 2 0 0 0 ) n × n \qquad\qquad v^TA^TAv=\begin{pmatrix} \lambda _1 & & && & & \\ &\ddots & & & & &\\ & &\lambda _r & & & \\& & & 0 & & & \\& & & & \ddots & \\ & & & &&0\end{pmatrix}=\begin{pmatrix} \lambda^2 &0\\0&0\end{pmatrix}_{n\times n} vTATAv=λ1λr00=(λ2000)n×n

V 的 n 个 列 向 量 v i 是 对 应 于 特 征 值 λ i 单 位 正 交 特 征 向 量 。 V的n个列向量v_i是对应于特征值\lambda_i单位正交特征向量。 Vnviλi

为了得到左奇异向量,先考查向量组 { A v 1 , A v 2 , . . . , A v r } \{Av _1,Av _2,...,Av _r \} { Av1,Av2,...,Avr},

( A v i , A v j ) = ( A v j ) T ( A v i ) = v j T A T A v i     = v j T λ i v i = λ i v j T v i = 0 , i ≠ j \qquad\qquad(Av _i,Av _j)=(Av _j)^T(Av _i)=v_j^TA^TAv _i\\ \qquad\qquad \qquad\quad\quad\ \ \ =v_j^T\lambda _i v _i=\lambda _iv_j^T v _i=0,i\ne j (Avi,Avj)=(Avj)T(Avi)=vjTATAvi   =vjTλivi=λivjTvi=0,i=j

因此, { A v 1 , A v 2 , . . . , A v r } \{Av _1,Av _2,...,Av _r \} { Av1,Av2,...,Avr}是一组正交向量组。

又: ∥ A v i ∥ 2 = ( A v i ) T ( A v i ) = v i T A T A v i = λ i v i T v i = σ i 2 \parallel Av _i\parallel^2=(Av _i)^T(Av _i)=v_i^TA^TAv _i=\lambda _iv_i^T v _i=\sigma _i^2 Avi2=(Avi)T(Avi)=viTATAvi=λiviTvi=σi2,

所以: ∥ A v i ∥ = σ i \parallel Av _i\parallel=\sigma _i Avi=σi

令: u i = 1 σ i A v i , i = 1 , 2 , . . . , r u_i=\cfrac{1}{\sigma _i}Av _i,i=1,2,...,r ui=σi1Avi,i=1,2,...,r

则得到一组 由 r 列 向 量 组 成 的 单 位 正 交 向 量 组 { u 1 , v 2 , . . . , u r } 由r列向量组成的单位正交向量组\{u _1,v _2,...,u_r \} r{ u1,v2,...,ur},将其扩展为 R m × m R^{m\times m} Rm×m空间的一组标准正交基,即为所求的 U U U:

U = { u 1 , v 2 , . . . , u r , . . . , u m } , 且 U ∈ R m × m \qquad\qquad U=\{u _1,v _2,...,u_r ,...,u_m\},且U \in R^{m\times m} U={ u1,v2,...,ur,...,um},URm×m

已知, A v i = σ i u i , i = 1 , 2 , . . . , r ; A v i = 0 , i = r + 1 , . . . , n Av _i=\sigma _iu_i,i=1,2,...,r;Av _i=0,i=r+1,...,n Avi=σiui,i=1,2,...,r;Avi=0,i=r+1,...,n,从而:

A v = A ( v 1 , v 2 , . . . , v n ) = ( A v 1 , A v 2 , . . . , A v r , 0 , . . . , 0 )    = ( σ 1 u 1 , σ 2 v 2 , . . . , σ r u r , 0 , . . . , 0 )    = ( u 1 , v 2 , . . . , u m ) ( σ 1 ⋯ 0 ⋮ ⋱ ⋮ 0 0 . . . σ r 0 0 ) \qquad\qquad Av=A(v _1,v _2,...,v _n)=(Av _1,Av _2,...,Av _r,0,...,0) \\\qquad\qquad\quad\ \ =(\sigma _1u _1,\sigma _2v _2,...,\sigma _ru_r,0,...,0 )\\ \qquad\qquad\quad\ \ =(u _1,v _2,...,u_m) \left( \begin{array}{ccc:c} \sigma_1 &\cdots &0& \\ \vdots &\ddots&\vdots&{\large{0}}\\0&...&\sigma _r\\ \hdashline &\large{0} &&\large{0}\end{array}\right) Av=A(v1,v2,...,vn)=(Av1,Av2,...,Avr,0,...,0)  =(σ1u1,σ2v2,...,σrur,0,...,0)  =(u1,v2,...,um)σ10...00σr00

这样便得到了奇异值分解SVD的完全(full)形式。

3.主成分分析(PCA)实现

3.1 《统计学习方法》16.2.3

《统计学习方法》P301 定理16.1:

设 x 施 m 维 随 机 变 量 , Σ 是 x 的 协 方 差 矩 阵 , Σ 的 特 征 值 从 大 到 小 排 列 分 别 是 λ 1 ≥ λ 2 ≥ . . . ≥ λ m ≥ 0 , 设x施m维随机变量,\Sigma是x的协方差矩阵,\Sigma的特征值从大到小排列分别是\lambda _1\ge\lambda _2\ge...\ge\lambda _m\ge0, xmΣxΣλ1λ2...λm0

特 征 值 对 应 的 单 位 特 征 向 量 分 别 是 α 1 , α 2 , . . . , α m , 则 x 的 第 k 个 主 成 分 是 : y k = α k T x = α 1 k x 1 + α 2 k x 2 + . . . + α m k x m , k = 1 , 2 , . . . , m 。 特征值对应的单位特征向量分别是\alpha_1,\alpha_2,...,\alpha_m,则x的第k个主成分是: y_k=\alpha_k^Tx=\alpha_{1k}x_1+\alpha_{2k}x_2+...+\alpha_{mk}x_m,k=1,2,...,m。 α1,α2,...,αm,xk:yk=αkTx=α1kx1+α2kx2+...+αmkxm,k=1,2,...,m

因此求主成分等价于求出其协方差矩阵的特征向量(按特征值大小排列),并截取其前k个。
设 有 一 个 样 本 矩 阵 X , X ∈ R m × n 设有一个样本矩阵X,X\in R^{m\times n} X,XRm×n(n个样本,每个样本有m维特征,每行元素已经进行了中心化,即均值为0)。
1) X ′ = 1 n − 1 X T , X ′ ∈ R n × m ; X'=\cfrac{1}{\sqrt{n-1}}X^T,X'\in R^{n\times m}; X=n1 1XTXRn×m;

2) 对 X ′ 进 行 截 断 奇 异 值 分 解 , 得 到 : X ′ = U n × k Σ k × k V k × m T ; 对X'进行截断奇异值分解,得到:\\ \qquad\qquad X'=U_{n\times k}\Sigma_{k\times k} V^T_{k\times m}; XX=Un×kΣk×kVk×mT;

这一步可以说比较关键。为什么对 X ′ 进 行 奇 异 值 分 解 呢 ? X'进行奇异值分解呢? X
解释如下:
X ′ T X ′ = ( 1 n − 1 X T ) T 1 n − 1 X T = 1 n − 1 X X T = S X \qquad\qquad X'^TX'=(\cfrac{1}{\sqrt{n-1}}X^T)^T\cfrac{1}{\sqrt{n-1}}X^T=\cfrac{1}{n-1}XX^T=S_X XTX=(n1 1XT)Tn1 1XT=n11XXT=SX

在第2章求解奇异值分解时,第一步就利用的是通过求 X ′ T X ′ X'^TX' XTX的特征向量得到的 V V V,那显然:
如果得到了奇异值分解后的 V V V,就等于是得到了协方差矩阵的 S X S_X SX的特征向量。这样通过第3)步就可以直接进行求解。
3)其主成分矩阵 Y = V T X , Y ∈ R k × n 。 Y=V^TX,Y\in R^{k\times n}。 Y=VTX,YRk×n

4)更进一步: Y = V T X = V T ⋅ n − 1 ⋅ X ′ T = n − 1 ( X ′ ⋅ V ) T = n − 1 ( U Σ V T ⋅ V ) T = n − 1 ( U Σ ) T Y=V^TX=V^T\cdot{\sqrt{n-1}}\cdot X'^T={\sqrt{n-1}}(X' \cdot V)^T={\sqrt{n-1}}(U\Sigma V^T \cdot V)^T={\sqrt{n-1}}(U\Sigma)^T Y=VTX=VTn1 XT=n1 (XV)T=n1 (UΣVTV)T=n1 (UΣ)T

这一大部分最绕的就是一会行向量,一会列向量,一会转置,其他地方还好…

3.2 样本数 n ≪ n\ll n特征维数 m m m时的快速算法

同 样 设 存 在 样 本 矩 阵 X , X ∈ R m × n ( n 个 样 本 , 每 个 样 本 有 m 维 特 征 , 每 行 元 素 已 经 进 行 了 中 心 化 , 即 均 值 为 0 ) 。 同样设存在样本矩阵X,X\in R^{m\times n}(n个样本,每个样本有m维特征,每行元素已经进行了中心化,即均值为0)。 X,XRm×n(nm0)

其 散 布 矩 阵 S m × m = X X T 其散布矩阵S_{m\times m}=XX^T Sm×m=XXT

散布矩阵 S = ( n − 1 ) S X S=(n-1)S_X S=(n1)SX,二者的特征向量是相同的。

如果此时样本数 n ≪ n\ll n特征维数 m m m,则直接利用散布矩阵求解特征向量,计算复杂度比较高。其中一种快速方法如下:
1)求解 X T X X^TX XTX的特征向量: X T X v = λ v X^TXv=\lambda v XTXv=λv

2)等式两边同乘以 X X X,有: X X T X v = ( X X T ) X v = S ( X v ) = λ ( X v ) XX^TXv=(XX^T)Xv=S(Xv)=\lambda (Xv) XXTXv=(XXT)Xv=S(Xv)=λ(Xv)

因此, X v Xv Xv即为S的特征向量

3)截取前 k 列 进 行 计 算 k列进行计算 k,得到主成分矩阵: Y = ( X v ) T X = v T X T X , Y ∈ R k × n 。 Y=(Xv)^TX=v^TX^TX,Y\in R^{k\times n}。 Y=(Xv)TX=vTXTX,YRk×n

参考文献

[1]李航,统计学习方法,第15-16章
[2]华科教材,矩阵论,第3.3节

猜你喜欢

转载自blog.csdn.net/WANGWUSHAN/article/details/108642979