矩阵分解 - 奇异值分解 SVD
-
奇异值分解
奇异值分解,Singular value decomposition(SVD)
在推荐、图像等多个领域中,因为数据矩阵的庞大,所以经常需要对矩阵进行压缩;亦或有噪声,要进行去噪,奇异值分解就是解决方法中的一个。它将矩阵分解为三个矩阵相乘的形式,从而减小存储的大小;在截断奇异值分解中删掉奇异值,可以达到去噪的目的,而且它还可以得到一些数据中的隐语义,所以非常的通用。
矩阵 A m ∗ n A_{m*n} Am∗n,通过奇异值分解得到: 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 m∗n 的对角矩阵。
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=I,VVT=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:x→Ax,x∈Rn,Ax∈Rm
而对这一线性变换可分解为三个简单变换(奇异值定理保证此三部分解一定存在):
① 一个坐标系的旋转或反射变换;
② 一个坐标轴的缩放变换;
③ 另一个坐标系的旋转或反射变换。 -
紧奇异值分解(无损压缩)
r a n k ( A ) = r , r ≤ m i n ( m , n ) rank(A)=r,r\le min(m,n) rank(A)=r,r≤min(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ΣrVrT,Um∗r,Vn∗r,Σ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≥…≥λn≥0;
② 将特征值 λ i λ_i λi 代入特征方程计算对应的特征向量;
③ 将特征向量单位化,得到单位特征向量 v 1 , v 2 , … , v n v_1,v_2,…,v_n v1,v2,…,vn,构成 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=σj1Avj,j=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+1,ur+2,…,um},即求解 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 < r Σ_k,k<r Σk,k<r
当 r a n k ( Σ ) < r rank(Σ)<r rank(Σ)<r 时,此分解称为截断奇异值分解。
A ≈ U k Σ k V k T , 0 < k < r A\approx U_kΣ_kV_k^T,0<k<r A≈UkΣkVkT,0<k<r
U m ∗ k , U U_{m*k},U Um∗k,U 的前 k 列; V n ∗ k , V V_{n*k},V Vn∗k,V 的前 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 σi、ui。其中 i = ( 1 → n ) i=(1→n) i=(1→n) 按照降序排列。
所以在选择(截断)前 k 个奇异值时,只需计算外积展开式的前 k 项和即可。
-
-
实际意义
可以参考: