矩阵分解 - 奇异值分解 SVD

  • 奇异值分解

    奇异值分解,Singular value decomposition(SVD)

    在推荐、图像等多个领域中,因为数据矩阵的庞大,所以经常需要对矩阵进行压缩;亦或有噪声,要进行去噪,奇异值分解就是解决方法中的一个。它将矩阵分解为三个矩阵相乘的形式,从而减小存储的大小;在截断奇异值分解中删掉奇异值,可以达到去噪的目的,而且它还可以得到一些数据中的隐语义,所以非常的通用。


    矩阵 A m ∗ n A_{m*n} Amn,通过奇异值分解得到: U Σ V T UΣV^T UΣVT,即 A = U Σ V T A=UΣV^T A=UΣVT

    其中, U U U 为 m 阶正交矩阵, V V V 为 n 阶正交矩阵, Σ Σ Σ 为由降序排列的非负元素组成的 m ∗ n m*n mn 的对角矩阵。

    U U T = I , V V T = I , Σ = d i a g ( σ 1 , σ 2 , … , σ k ) UU^T=I,VV^T=I,Σ=diag(σ_1,σ_2,…,σ_k) UUT=IVVT=IΣ=diag(σ1σ2σk)

    σ i σ_i σi 为矩阵的奇异值,U为左奇异向量,V为右奇异向量。


    奇异值分解有一个特殊定理:奇异值分解一定存在,但不是唯一的

    奇异值分解中,奇异值 σ 1 , σ 2 , … , σ k σ_1,σ_2,…,σ_k σ1σ2σk 是唯一的,而矩阵 U,V 不是唯一的。

    奇异值分解可以看做是矩阵压缩的方法,用因子分解近似原始数据矩阵,它是在平方损失意义下的最优近似。

  • 几何解释

    以几何对奇异值分解进行解释:

    奇异值分解可以理解为对于矩阵 A A A,从 n 维空间 R n R^n Rn 到 m 维空间的一个线性变换

    T : x → A x , x ∈ R n , A x ∈ R m T: x→Ax,x∈R^n,Ax∈R^m T:xAxxRnAxRm

    而对这一线性变换可分解为三个简单变换(奇异值定理保证此三部分解一定存在):

    ① 一个坐标系的旋转或反射变换;
    ② 一个坐标轴的缩放变换;
    ③ 另一个坐标系的旋转或反射变换。

  • 紧奇异值分解(无损压缩)

    r a n k ( A ) = r , r ≤ m i n ( m , n ) rank(A)=r,r\le min(m,n) rank(A)=rrmin(m,n)

    A = U r Σ r V r T , U m ∗ r , V n ∗ r , Σ r A=U_rΣ_rV_r^T,U_{m*r},V_{n*r},Σ_r A=UrΣrVrTUmrVnrΣr Σ Σ Σ 的前 r 个对角元素得到。

    r a n k ( Σ ) = r rank(Σ)=r rank(Σ)=r 时,此分解称为紧奇异值分解。

    • 计算方法

      ① 首先计算 A A T AA^T AAT 的特征值,并按降序进行排列得到 λ 1 ≥ λ 2 ≥ … ≥ λ n ≥ 0 λ_1 \ge λ_2 \ge…\geλ_n\ge0 λ1λ2λn0

      ② 将特征值 λ i λ_i λi 代入特征方程计算对应的特征向量;

      ③ 将特征向量单位化,得到单位特征向量 v 1 , v 2 , … , v n v_1,v_2,…,v_n v1v2vn,构成 n 阶正交矩阵 V;

      ④ 计算奇异值 σ i = λ i , i = 1 , 2 , … , n σ_i=\sqrt{λ_i},i=1,2,…,n σi=λi i=1,2,,n,将 σ i σ_i σi 作为对角元素构成对角矩阵 Σ = d i a g ( σ 1 , σ 2 , … , σ k ) Σ=diag(σ_1,σ_2,…,σ_k) Σ=diag(σ1σ2σk)

      ⑤ 对 A 的前 r 个正奇异值计算, u j = 1 σ j A v j , j = 1 , 2 , … , r u_j=\frac{1}{σ_j}Av_j,j=1,2,…,r uj=σj1Avjj=1,2,,r,得到 U 1 = [ u 1    u 2    …    u r ] U_1=[u_1~~u_2~~…~~u_r] U1=[u1  u2    ur]

      ⑥ 求 AT的零空间的一组标准正交基 { u r + 1 , u r + 2 , … , u m u_{r+1},u_{r+2},…,u_m ur+1ur+2um},即求解 A T x = 0 A^Tx=0 ATx=0 U 2 = [ u r + 1    u r + 2    …    u m ] U_2=[u_{r+1}~~u_{r+2}~~…~~u_m] U2=[ur+1  ur+2    um]

      ⑦ 令 U = [ U 1    U 2 ] U=[U_1~~U_2] U=[U1  U2],得到 m 阶正交矩阵 U;

      ⑧ 最终得到 A = U Σ V T A=UΣV^T A=UΣVT

  • 截断奇异值分解(有损压缩)

    截断奇异值分解,顾名思义是选取了部分进行分解。即只取最大的 k 个奇异值组成 Σ k , k &lt; r Σ_k,k&lt;r Σkk<r

    r a n k ( Σ ) &lt; r rank(Σ)&lt;r rank(Σ)<r 时,此分解称为截断奇异值分解。

    A ≈ U k Σ k V k T , 0 &lt; k &lt; r A\approx U_kΣ_kV_k^T,0&lt;k&lt;r AUkΣkVkT0<k<r

    U m ∗ k , U U_{m*k},U UmkU 的前 k 列; V n ∗ k , V V_{n*k},V VnkV 的前 k 列; Σ k Σ_k Σk Σ Σ Σ 前 k 个奇异值组成。

    由于通常奇异值 σ i σ_i σi 递减很快,所以当 k 很小时, A k A_k Ak 也可以对 A 有很好的近似。所以截断奇异值分解更加常用。

    • 计算方法(矩阵的外积展开式)

      将 A 的奇异值分解看成两部分: U Σ UΣ UΣ V T V^T VT 乘积,将 U Σ UΣ UΣ 按列向量分块,将 V V V 也按列向量分块,得

      U Σ = [ σ 1 u 1    σ 2 u 2    …    σ n u n ] UΣ=[σ_1u_1~~σ_2u_2~~…~~σ_nu_n] UΣ=[σ1u1  σ2u2    σnun]

      V = [ v 1    v 2    …    v n ] V=[v_1~~v_2~~…~~v_n] V=[v1  v2    vn]

      A = σ 1 u 1 v 1 T + σ 2 u 2 v 2 T + … + σ n u n v n T A=σ_1u_1v_1^T+σ_2u_2v_2^T+…+σ_nu_nv_n^T A=σ1u1v1T+σ2u2v2T++σnunvnT,此式称为外积展开式。

      根据紧奇异值分解的计算方法易得 σ i 、 u i σ_i、u_i σiui。其中 i = ( 1 → n ) i=(1→n) i=(1n) 按照降序排列。

      所以在选择(截断)前 k 个奇异值时,只需计算外积展开式的前 k 项和即可。

  • 实际意义

    可以参考:

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值