奇异值分解与主成分分析


奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,可以用于降维算法中的特征分解(如主成分分析)。

奇异值分解

对于一个 n n n阶方阵 A A A,如果它有 n n n个线性无关的特征向量,我们可以将其分解为 A = P Σ P − 1 A=P \Sigma P^{-1} A=PΣP1的形式。但对于一个一般的 m × n m \times n m×n矩阵,需要用SVD进行分解1

1)奇异值分解基本定理

A A A m × n m \times n m×n矩阵, A ∈ R m × n A∈R^{m \times n} ARm×n,则 A A A的奇异值分解存在
A = U Σ V T A=U \Sigma V^{T} A=UΣVT
其中 U U U m m m阶正交矩阵, V V V n n n阶正交矩阵, Σ \Sigma Σ m × n m \times n m×n阶矩形对角阵,其对角线元素非负,且按降序排列。

2)奇异值分解的计算

  1. 求对称矩阵 W = A T A W=A^TA W=ATA的特征值 λ i λ_i λi i = 1 , 2 , . . . , n i=1,2,...,n i=1,2,...,n)和特征向量 v i v_i vi i = 1 , 2 , . . . , n i=1,2,...,n i=1,2,...,n
  2. n n n阶正交矩阵 V V V:将特征向量单位化,构成 V V V
    V = [ v 1 v 2 . . . v n ] V=[v_1 \quad v_2 \quad... \quad v_n] V=[v1v2...vn]
  3. m × n m \times n m×n阶矩形对角阵 Σ \Sigma Σ
    σ i = λ i , i = 1 , 2 , . . . , n σ_i=\sqrt{λ_i},i=1,2,...,n σi=λi ,i=1,2,...,n Σ = d i a g ( σ 1 , σ 2 , . . . , σ n ) \Sigma = diag(σ_1,σ_2,...,σ_n) Σ=diag(σ1,σ2,...,σn)
  4. m m m阶正交矩阵 U U U
    A A A的前 r r r个奇异值( r r r A A A的秩),令 u j = 1 σ j A v j u_j=\frac{1}{\sigma_j}Av_j uj=σj1Avj U 1 = [ u 1 u 2 . . . u r ] U_1=[u_1 \quad u_2 \quad... \quad u_r] U1=[u1u2...ur]
    A T A^T AT的零空间一组标准正交基 { u 1 u 2 . . . u m } {\left \{ u_1 \quad u_2 \quad ... \quad u_m \right \} } {u1u2...um},并令 U = [ U 1 U 2 ] U=[U_1 \quad U_2] U=[U1U2]
  5. 得到奇异值分解 A = U Σ V T A=U \Sigma V^{T} A=UΣVT

3)紧奇异值分解和截断奇异值分解

1)定理中给出的奇异值分解 A = U Σ V T A=U \Sigma V^{T} A=UΣVT称为完全奇异值分解,而实际中常用的是奇异值分解的紧凑形式和截断形式

  1. 紧奇异值分解
    A = U r Σ r V r T A=U_r \Sigma_r V_r^{T} A=UrΣrVrT
    其中 r r r A A A的秩, U r U_r Ur m × r m\times r m×r矩阵, V r V_r Vr n × r n\times r n×r矩阵, Σ r \Sigma_r Σr r × r r\times r r×r阶对角阵。
    U r U_r Ur U U U的前 r r r列, V r V_r Vr V V V的前 r r r列, Σ r \Sigma_r Σr Σ \Sigma Σ的前 r r r个对角线元素。

  2. 截断奇异值分解
    A ≈ U k Σ k V k T A\approx U_k \Sigma_k V_k^{T} AUkΣkVkT
    其中 U k U_k Uk m × k m\times k m×k矩阵, V k V_k Vk n × k n\times k n×k矩阵, Σ k \Sigma_k Σk k × k k\times k k×k阶对角阵。
    U k U_k Uk U U U的前 k k k列, V k V_k Vk V V V的前 k k k列, Σ k \Sigma_k Σk Σ \Sigma Σ的前 k k k个对角线元素。

在实际应用中,常常需要对矩阵数据进行压缩、降维,紧奇异值对应无损压缩,截断奇异值对应有损压缩。关于SVD的直观意义,可以看看这个视频

主成分分析

PCA(Principal Component Analysis),即主成分分析方法,也称为主分量分析,是一种使用最广泛的数据降维算法。PCA通过线性变换将原始数据(n维特征)变换为一组各维度(k维特征)线性无关的数据,其中k维特征是全新的正交特征也被称为主成分2。关于详细的原理证明和推导这个视频讲的非常不错。

我们先记录PCA的算法步骤,再说明为什么PCA能够实现数据的降维。

1)PCA算法步骤(特征分解版)

设有 m m m n n n维数据,将其拼成 m × n m\times n m×n阶矩阵 X X X

  1. X X X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
  2. 求出协方差矩阵 C = 1 n X X T C=\frac{1}{n}XX^T C=n1XXT
  3. 求协方差矩阵的特征值和对应的特征向量
  4. 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 k k k行组成矩阵 P P P
  5. Y = P X Y=PX Y=PX即为降维到 k k k维后的数据

这里计算的核心问题落在了协方差矩阵 C = 1 n X X T C=\frac{1}{n}XX^T C=n1XXT的特征分解(求 P P P矩阵)上

2)用SVD求解 P P P矩阵

前面提到,在 A = U Σ V T A=U \Sigma V^{T} A=UΣVT中,有 A T A = ( U Σ V T ) T U Σ V T = V Σ T U T U Σ V T = V Σ T Σ V T = V Σ 2 V T A^{T} A=\left(U \Sigma V^{T}\right)^{T} U \Sigma V^{T}=V \Sigma^{T} U^{T} U \Sigma V^{T}=V \Sigma^{T} \Sigma V^{T}=V \Sigma^{2} V^{T} ATA=(UΣVT)TUΣVT=VΣTUTUΣVT=VΣTΣVT=VΣ2VT V V V A T A A^TA ATA特征值分解的特征向量按列组成的正交矩阵。
因此,若取 A = X T n A=\frac{X^{T}}{\sqrt{n}} A=n XT,则有
A T A = ( X T m ) T X T m = 1 m X X T A^{T} A=\left(\frac{X^{T}}{\sqrt{m}}\right)^{T} \frac{X^{T}}{\sqrt{m}}=\frac{1}{m} X X^{T} ATA=(m XT)Tm XT=m1XXT
因此,SVD中的 V V V即为所求的 P P P

那么,用SVD求解有什么好处呢?
  • 一般 X X X的维度很高, A T A A^TA ATA的计算量很大
  • 方阵的特征值分解计算效率不高
  • SVD除了特征值分解这种求解方式外,还有更高效且更准确的迭代求解法(如Lanczos算法和lobpcg算法等3),避免了 A T A A^TA ATA特征值、特征向量的计算

3)PCA的数学原理

PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维1 4

首先,降维就意味着信息的丢失,不过鉴于实际数据本身常常存在的相关性,我们可以想办法在降维的同时将信息的损失尽量降低。直观的图形解释可以看看这个视频中的展示。

对于一个 N N N维的向量,直接舍弃其中的若干维度显然是不可行的。PCA的思想是,对坐标系进行旋转变换,使得数据投影到坐标轴上的方差最大,这样能使得投影后的投影值尽可能分散。同时,我们在选择坐标轴时,希望坐标轴之间相互“垂直”(即相互正交),这样能保证不同维度上尽可能的不包含相关的信息。

至此,我们得到了降维问题的优化目标:将一组 N N N维向量降为 K K K维( K K K大于0,小于 N N N),其目标是选择 K K K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的 K K K个方差)。

每个样本可以理解为一个p维的随机向量。同时,每个维度可以理解为一个随机变量。样本的协方差矩阵说的是,p个随机变量之间的协方差,所构成的矩阵。因此,上述优化,等价于将协方差矩阵对角化

协方差矩阵的定义为 M = [ c o v ( x 1 , x 1 ) ⋯ c o v ( x 1 , x d ) ⋮ ⋱ ⋮ c o v ( x d , x 1 ) ⋯ c o v ( x m , x m ) ] ∈ R m × m M=\left[\begin{array}{ccc} cov\left(x_{1}, x_{1}\right) & \cdots & cov\left(x_{1}, x_{d}\right) \\ \vdots & \ddots & \vdots \\ cov\left(x_{d}, x_{1}\right) & \cdots & cov\left(x_{m}, x_{m}\right) \end{array}\right] \in \mathbb{R}^{m \times m} M= cov(x1,x1)cov(xd,x1)cov(x1,xd)cov(xm,xm) Rm×m

另一方面,协方差矩阵 M = 1 m X X T M=\frac{1}{m}XX^T M=m1XXT5。这就是PCA算法上来就对样本协方差矩阵进行特征分解的原因。

4)主成分方差贡献率

PCA的主要目的是降维,所以一般选择 k ( k < < n ) k(k<<n) k(k<<n)个主成分来代替原来 n n n个变量。选择 k k k的方法,通常用主成分的方差贡献率。

k k k个主成分 y k y_k yk的方差贡献率为 η k = λ k ∑ i = 1 n λ i \eta_k = \frac { \lambda_k}{\sum_{i=1}^{n} \lambda_i} ηk=i=1nλiλk
k k k个主成分 y 1 , y 2 , . . . , y k y_1,y_2,...,y_k y1,y2,...,yk的累计方差贡献率为 ∑ i = 1 k η k = ∑ i = 1 k λ i ∑ i = 1 n λ i \sum_{i=1}^{k}\eta_k = \frac { \sum_{i=1}^{k}\lambda_i}{\sum_{i=1}^{n} \lambda_i} i=1kηk=i=1nλii=1kλi

通常取 k k k使得累计方差贡献率达到规定百分比以上。累计方差贡献率反映了主成分保留信息的比例。

5)因子负荷量

k k k个主成分 y k y_k yk与变量 x i x_i xi的相关系数 ρ ( y k , x i ) \rho(y_k,x_i) ρ(yk,xi)称为因子负荷量,它表示第 k k k个主成分 y k y_k yk与变量 x i x_i xi的相关关系
ρ ( y k , x i ) = λ k α i k σ i i \rho(y_k,x_i)=\frac{\sqrt{\lambda_k }\alpha_{ik}}{\sqrt{\sigma_{ii}}} ρ(yk,xi)=σii λk αik
自然地,前 k k k个主成分 y 1 , y 2 , . . . , y k y_1,y_2,...,y_k y1,y2,...,yk对原有变量 x i x_i xi的贡献率 v i v_i vi定义为 x i x_i xi ( y 1 , y 2 , . . . , y k ) (y_1,y_2,...,y_k) (y1,y2,...,yk)的相关系数的平方
v i = ρ 2 ( x i , ( y 1 , y 2 , . . . , y k ) ) v_i=\rho^2(x_i,(y_1,y_2,...,y_k)) vi=ρ2(xi,(y1,y2,...,yk)) v i = ∑ j = 1 k ρ 2 ( x i , y j ) = ∑ j = 1 k λ j α i j 2 σ i i v_i=\sum_{j=1}^{k}\rho^2(x_i,y_j)= \sum_{j=1}^{k}\frac{\lambda_j\alpha_{ij}^2}{\sigma_{ii}} vi=j=1kρ2(xi,yj)=j=1kσiiλjαij2


  1. 《统计学习方法(第2版)》,李航 ↩︎ ↩︎

  2. https://blog.csdn.net/foneone/article/details/88881334 ↩︎

  3. https://blog.csdn.net/qq_36793268/article/details/112798163 ↩︎

  4. http://blog.codinglabs.org/articles/pca-tutorial.html ↩︎

  5. https://www.cnblogs.com/qizhou/p/13495598.html ↩︎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值