注:本文为 "线性代数 · SVD" 相关合辑。
图片清晰度受引文原图所限。
略作重排,未整理去重。
如有内容异常,请看原文。
奇异值分解(SVD 分解)------超详细讲解
快乐小脾孩于 2023-11-18 16:05:44 发布
线性代数知识回顾
在矩阵分解理论中,特征分解是针对特定类型矩阵的重要分解方法,其核心结论与应用前提如下:
对于 n 阶对称矩阵 A \boldsymbol {A} A,若存在 n 个特征值 λ 1 , λ 2 , ... , λ n \lambda_1,\lambda_2,\dots,\lambda_n λ1,λ2,...,λn,且每个特征值对应一个特征向量 q 1 , q 2 , ... , q n \boldsymbol {q}_1,\boldsymbol {q}_2,\dots,\boldsymbol {q}_n q1,q2,...,qn,当这 n 个特征向量满足线性无关 条件时,矩阵 A \boldsymbol {A} A 可通过特征分解表示为:
A = Q Σ Q − 1 \boldsymbol {A} = \boldsymbol {Q} \boldsymbol {\Sigma} \boldsymbol {Q}^{-1} A=QΣQ−1
式中各矩阵的定义如下:
- Q \boldsymbol {Q} Q:由 n 个特征向量构成的 n 阶矩阵,即 Q = ( q 1 , q 2 , ... , q n ) \boldsymbol {Q} = (\boldsymbol {q}_1, \boldsymbol {q}_2, \dots, \boldsymbol {q}_n) Q=(q1,q2,...,qn),其中 q i \boldsymbol {q}_i qi( i = 1 , 2 , ... , n i=1,2,\dots,n i=1,2,...,n)为矩阵 A \boldsymbol {A} A 对应于特征值 λ i \lambda_i λi 的特征向量;
- Σ \boldsymbol {\Sigma} Σ:由 n 个特征值构成的 n 阶对角矩阵,其形式为:
Σ = ( λ 1 λ 2 ⋯ λ n ) \boldsymbol {\Sigma} =\left ( \begin {matrix} \lambda_1 & & & \\ & \lambda_2 & & \\ & & \cdots & \\ & & & \lambda_n \\ \end {matrix} \right) Σ= λ1λ2⋯λn
上述分解过程被称为矩阵 A \boldsymbol {A} A 的相似对角化。
进一步地,若对矩阵 Q \boldsymbol {Q} Q 中的所有特征向量进行单位化 与正交化 处理 ------ 即满足单位范数条件 ∥ q i ∥ = 1 \| \boldsymbol {q}_i \| = 1 ∥qi∥=1( i = 1 , 2 , ... , n i=1,2,\dots,n i=1,2,...,n)与正交条件 q i ⋅ q j = 0 \boldsymbol {q}_i \cdot \boldsymbol {q}_j = 0 qi⋅qj=0( i ≠ j i \neq j i=j, i , j = 1 , 2 , ... , n i,j=1,2,\dots,n i,j=1,2,...,n),则矩阵 Q \boldsymbol {Q} Q 成为正交矩阵 (在复数域中亦称为酉矩阵)。根据正交矩阵的性质,其逆矩阵等于其转置矩阵,即 Q − 1 = Q T \boldsymbol {Q}^{-1} = \boldsymbol {Q}^T Q−1=QT(满足 Q Q T = I \boldsymbol {Q} \boldsymbol {Q}^T = \boldsymbol {I} QQT=I,其中 I \boldsymbol {I} I 为 n 阶单位矩阵)。此时,矩阵 A \boldsymbol {A} A 的特征分解可简化为:
A = Q Σ Q T \boldsymbol {A} = \boldsymbol {Q} \boldsymbol {\Sigma} \boldsymbol {Q}^T A=QΣQT
该分解形式被称为矩阵 A \boldsymbol {A} A 的正交对角化。
需要注意的是,上述特征分解方法存在严格的应用限制,具体如下:
- 相似对角化要求矩阵 A \mathbf{A} A 必须为 n n n 阶方阵。
- 正交对角化进一步要求矩阵 A \mathbf{A} A 必须为 n n n 阶对称方阵。
由此产生一个关键问题:对于任意维度的 n × m n \times m n×m 阶矩阵(非方阵),是否存在类似的方法可以对它进行特征分解?为解决这一问题,奇异值分解(SVD)应运而生。本质上,SVD 分解的核心作用是突破特征分解的维度与矩阵类型限制,实现对任意 n × m n \times m n×m 阶矩阵的有效分解。
SVD 分解证明
SVD 分解(Singular Value Decomposition,简称 SVD),又称奇异值分解。
定理 :对于任意一个 m × n m \times n m×n 的矩阵 A \boldsymbol{A} A,我们都可以将它分解为 A = U Σ V T \boldsymbol{A} = \boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^T A=UΣVT,其中 U \boldsymbol{U} U 是 m × m m \times m m×m 的正交矩阵, V \boldsymbol{V} V 是 n × n n \times n n×n 的正交矩阵, Σ \boldsymbol{\Sigma} Σ 是 m × n m \times n m×n 的对角矩阵,其主对角线上的每个值称为奇异值。
前提知识
对于任意一个 m × n m \times n m×n 的矩阵 A \boldsymbol{A} A,可知 A T A \boldsymbol{A}^T \boldsymbol{A} ATA( n n n 阶)和 A A T \boldsymbol{A} \boldsymbol{A}^T AAT( m m m 阶)都是对称矩阵。由实对称矩阵必可相似对角化可知,必有:
A T A = Q 1 Σ 1 Q 1 T A A T = Q 2 Σ 2 Q 2 T \boldsymbol{A}^T \boldsymbol{A} = \boldsymbol{Q}_1 \boldsymbol{\Sigma}_1 \boldsymbol{Q}_1^T \\[8pt] \boldsymbol{A} \boldsymbol{A}^T = \boldsymbol{Q}_2 \boldsymbol{\Sigma}_2 \boldsymbol{Q}_2^T ATA=Q1Σ1Q1TAAT=Q2Σ2Q2T
其中, Σ \boldsymbol{\Sigma} Σ 中的元素为对称矩阵的特征值, Q \boldsymbol{Q} Q 的列向量为对称矩阵的 n n n 个或 m m m 个正交特征向量。
设 A T A \boldsymbol{A}^T \boldsymbol{A} ATA 的一组正交单位特征向量为 v \boldsymbol{v} v( v 1 , v 2 , ... , v n \boldsymbol{v}_1, \boldsymbol{v}_2, \dots, \boldsymbol{v}_n v1,v2,...,vn),则有:
A T A v i = λ i v i \boldsymbol{A}^T \boldsymbol{A} \boldsymbol{v}_i = \lambda_i \boldsymbol{v}_i ATAvi=λivi
两边同时左乘 A \boldsymbol{A} A 得:
( A A T ) A v i = A λ i v i = λ i ( A v i ) (\boldsymbol{A} \boldsymbol{A}^T) \boldsymbol{A} \boldsymbol{v}_i = \boldsymbol{A} \lambda_i \boldsymbol{v}_i = \lambda_i (\boldsymbol{A} \boldsymbol{v}_i) (AAT)Avi=Aλivi=λi(Avi)
因此, A v i \boldsymbol{A} \boldsymbol{v}_i Avi 为矩阵 A A T \boldsymbol{A} \boldsymbol{A}^T AAT 的特征向量, λ i \lambda_i λi 也为矩阵 A A T \boldsymbol{A} \boldsymbol{A}^T AAT 的特征值。故 A T A \boldsymbol{A}^T \boldsymbol{A} ATA 和 A A T \boldsymbol{A} \boldsymbol{A}^T AAT 的特征值相同,但特征向量不同。
进一步地:
∥ A v i ∥ = v i T A T A v i = v i T λ i v i = λ i ∥ v i ∥ = λ i \| \boldsymbol{A} \boldsymbol{v}_i \| = \sqrt{\boldsymbol{v}_i^T \boldsymbol{A}^T \boldsymbol{A} \boldsymbol{v}_i} = \sqrt{\boldsymbol{v}_i^T \lambda_i \boldsymbol{v}_i} = \sqrt{\lambda_i} \| \boldsymbol{v}_i \| = \sqrt{\lambda_i} ∥Avi∥=viTATAvi =viTλivi =λi ∥vi∥=λi
因此:
A v i λ i \frac{\boldsymbol{A} \boldsymbol{v}_i}{\sqrt{\lambda_i}} λi Avi
即为 A A T \boldsymbol{A} \boldsymbol{A}^T AAT 矩阵的单位正交向量(后文用到)。
奇异值分解的证明
证明步骤概述
- 构造 V \boldsymbol{V} V 和 Σ \boldsymbol{\Sigma} Σ 矩阵
- 构造 U \boldsymbol{U} U 矩阵
- 证明 A = U Σ V T \boldsymbol{A} = \boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^T A=UΣVT
第一步:构造 V \boldsymbol{V} V 和 Σ \boldsymbol{\Sigma} Σ 矩阵
补充: A T A A^TA ATA 的特征值是非负的。
令 λ \lambda λ 是 A T A A^TA ATA 的一个特征值, x x x 是对应的特征向量,则有:
A T A x = λ x A^TAx = \lambda x ATAx=λx
两边同时乘以 x T x^T xT:
x T A T A x = λ x T x x^TA^TAx = \lambda x^Tx xTATAx=λxTx
可得 ∥ A x ∥ 2 = λ ∥ x ∥ 2 ⇒ λ = ∥ A x ∥ 2 ∥ x ∥ 2 \|Ax\|^2 = \lambda \|x\|^2 \Rightarrow \lambda = \frac{\|Ax\|^2}{\|x\|^2} ∥Ax∥2=λ∥x∥2⇒λ=∥x∥2∥Ax∥2,因此 A T A A^TA ATA 的特征值是非负的。
对于对称矩阵 A T A A^TA ATA,存在正交矩阵 V V V 和对角矩阵 Σ \Sigma Σ,使得 A T A = V Λ V T A^TA = V\Lambda V^T ATA=VΛVT,其中 Λ \Lambda Λ 是 A T A A^TA ATA 的特征值:
Λ = { λ 1 , λ 2 , ... , λ n } \Lambda = \{\lambda_1, \lambda_2, \ldots, \lambda_n\} Λ={λ1,λ2,...,λn}
计算特征值的平方根(前面证明得 A T A A^TA ATA 的特征值全部非负,因此可以计算平方根):
σ i = λ i i = 1 , 2 , ... , n \sigma_i = \sqrt{\lambda_i} \quad i = 1, 2, \ldots, n σi=λi i=1,2,...,n
设 r ( A ) = r r(A) = r r(A)=r,则可知 r ( A ) = r ( A T A ) = r r(A) = r(A^TA) = r r(A)=r(ATA)=r。由于 A T A A^TA ATA 是对称矩阵,其秩等于正的特征值的个数,因此存在 r r r 个正的特征值, n − r n-r n−r 个为 0 的特征值,即:
λ 1 , λ 2 , ... , λ r > 0 λ r + 1 , ... , λ n = 0 \lambda_1, \lambda_2, \ldots, \lambda_r > 0 \quad \lambda_{r+1}, \ldots, \lambda_n = 0 λ1,λ2,...,λr>0λr+1,...,λn=0
令对应特征值的特征向量为:
V 1 = [ v 1 , v 2 , ... , v r ] V 2 = [ v r + 1 , v r + 2 , ... , v n ] V_1 = [v_1, v_2, \ldots, v_r] \quad V_2 = [v_{r+1}, v_{r+2}, \ldots, v_n] V1=[v1,v2,...,vr]V2=[vr+1,vr+2,...,vn]
其中 V 1 V_1 V1 为对应正特征值的特征向量, V 2 V_2 V2 为对应零特征值的特征向量。
在 V 2 V_2 V2 中的特征向量都有:
A T A v j = λ j = 0 , j = r + 1 , ... , n A^TAv_j = \lambda_j = 0, \quad j = r+1, \ldots, n ATAvj=λj=0,j=r+1,...,n
因此 A V 2 = 0 AV_2 = 0 AV2=0。
那么 V = [ V 1 , V 2 ] V = [V_1, V_2] V=[V1,V2],即为奇异值分解(SVD)中需要构造的正交矩阵 V V V。
令 Σ 1 \Sigma_1 Σ1 由 A T A A^TA ATA 前 r r r 个正的特征值平方根组成的对角矩阵,即:
Σ 1 = [ σ 1 σ 2 ⋱ σ r ] \Sigma_1 = \begin{bmatrix} \sigma_1 & & \\ & \sigma_2 & \\ & & \ddots & \\ & & & \sigma_r \end{bmatrix} Σ1= σ1σ2⋱σr
可知 Σ 1 \Sigma_1 Σ1 为主对角线每个元素都大于 0 的 r r r 阶对角矩阵。
然后构造 m × n m \times n m×n 阶对角矩阵 Σ \Sigma Σ 为:
Σ = [ Σ 1 0 0 0 ] \Sigma = \begin{bmatrix} \Sigma_1 & 0 \\ 0 & 0 \end{bmatrix} Σ=[Σ1000]
即为 SVD 中需要的 Σ \Sigma Σ 矩阵。
第二步:构造 U \boldsymbol{U} U 矩阵
令:
u i = A v i σ i , i = 1 , 2 , ... , r u_i = \frac{A v_i}{\sigma_i}, \quad i = 1, 2, \ldots, r ui=σiAvi,i=1,2,...,r
则有:
U 1 = [ u 1 , u 2 , ... , u r ] U_1 = [u_1, u_2, \ldots, u_r] U1=[u1,u2,...,ur]
因此:
A V 1 = A [ v 1 , v 2 , ... , v r ] = [ A v 1 , A v 2 , ... , A v r ] = [ u 1 σ 1 , u 2 σ 2 , ... , u r σ r ] = U 1 Σ 1 AV_1 = A[v_1, v_2, \ldots, v_r] = [Av_1, Av_2, \ldots, Av_r] = [u_1\sigma_1, u_2\sigma_2, \ldots, u_r\sigma_r] = U_1\Sigma_1 AV1=A[v1,v2,...,vr]=[Av1,Av2,...,Avr]=[u1σ1,u2σ2,...,urσr]=U1Σ1
即:
A V 1 = U 1 Σ 1 AV_1 = U_1\Sigma_1 AV1=U1Σ1
其中:
Σ 1 = [ σ 1 σ 2 ⋱ σ r ] \Sigma_1 = \begin{bmatrix} \sigma_1 & & \\ & \sigma_2 & \\ & & \ddots & \\ & & & \sigma_r \end{bmatrix} Σ1= σ1σ2⋱σr
而 U 1 U_1 U1 的列向量也构成了一组正交集,因为对于 U 1 U_1 U1 中的任意两个向量都满足:
u i T u j = ( 1 σ i v i T A T ) ( 1 σ j A v j ) = 1 σ i σ j v i T ( A T A v j ) = σ j σ i v i T v j = δ i j , i = 1 , 2 , ... , r ; j = 1 , 2 , ... , r u_i^T u_j = \left( \frac{1}{\sigma_i} v_i^T A^T \right) \left( \frac{1}{\sigma_j} A v_j \right) = \frac{1}{\sigma_i \sigma_j} v_i^T (A^T A v_j) = \frac{\sigma_j}{\sigma_i} v_i^T v_j = \delta_{ij}, \quad i = 1, 2, \ldots, r; \quad j = 1, 2, \ldots, r uiTuj=(σi1viTAT)(σj1Avj)=σiσj1viT(ATAvj)=σiσjviTvj=δij,i=1,2,...,r;j=1,2,...,r
由于向量 v i v_i vi 都是正交的,因此 U 1 U_1 U1 中的向量也正交。
实际上,从前文可知, A v i Av_i Avi 实际上是矩阵 A A T AA^T AAT( m m m 阶)的正交特征向量,而矩阵 U 1 U_1 U1 中的向量为 A A T AA^T AAT 的特征向量除去 σ \sigma σ,即 A v i λ i \frac{Av_i}{\sqrt{\lambda_i}} λi Avi,因此从前文的结论可知,其为矩阵 A A T AA^T AAT( m m m 阶)的单位正交特征向量。
因此,令 U 2 = [ u r + 1 , u r + 2 , ... , u m ] U_2 = [u_{r+1}, u_{r+2}, \ldots, u_m] U2=[ur+1,ur+2,...,um],即为矩阵 A A T AA^T AAT 中除去前 r r r 个正的特征值对应的特征向量,剩下 m − r m-r m−r 个为 0 的特征值对应的特征向量,则 U 2 U_2 U2 中的向量也相互正交。
令 U = [ U 1 , U 2 ] U = [U_1, U_2] U=[U1,U2],因此 U U U 为正交矩阵。
另一种构造法如下:
若 R ( A ) ⊥ R(A)^\perp R(A)⊥ 表示 R ( A ) R(A) R(A) 的正交补,则有 R ( A ) R(A) R(A) 的维数为 r r r, R ( A ) ⊥ R(A)^\perp R(A)⊥ 的维数为 m − r m-r m−r,两者的维数之和等于 m m m。而且有 R ( A ) ⊥ = N ( A T ) R(A)^\perp = N(A^T) R(A)⊥=N(AT) 成立。
令 { u r + 1 , u r + 2 , ... , u m } \{u_{r+1}, u_{r+2}, \ldots, u_m\} {ur+1,ur+2,...,um} 为 N ( A T ) N(A^T) N(AT) 的一组标准正交基,并令:
U 2 = [ u r + 1 u r + 2 ⋯ u m ] U_2 = [u_{r+1} \quad u_{r+2} \quad \cdots \quad u_m] U2=[ur+1ur+2⋯um]
U = [ U 1 U 2 ] U = \begin{bmatrix} U_1 & U_2 \end{bmatrix} U=[U1U2]
则 u 1 , u 2 , ... , u m u_1, u_2, \ldots, u_m u1,u2,...,um 构成了 R m \mathbb{R}^m Rm 的一组标准正交基。因此, U U U 是 m m m 阶正交矩阵,这就是矩阵 A A A 的奇异值分解中的 m m m 阶正交矩阵。
第三步:证明 A = U Σ V T \boldsymbol{A} = \boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^T A=UΣVT
\\begin{aligned} U\\Sigma V\^T \&= \[U_1, U_2\] \\begin{bmatrix} \\Sigma_1 \& 0 \\ 0 \& 0 \\end{bmatrix} \\begin{bmatrix} V_1\^T \\ V_2\^T \\end{bmatrix} $$8pt\] \&= U_1 \\Sigma_1 V_1\^T $$8pt\] \&= A V_1 V_1\^T $$8pt\] \&= A \\end{aligned}
因此,对于任意一个 m × n m \times n m×n 阶矩阵 A A A,都可以特征分解为 A = U Σ V T A = U\Sigma V^T A=UΣVT,且 U U U 为正交矩阵, Σ \Sigma Σ 为对角矩阵,主对角线的元素大于等于 0,且主对角线的值即为奇异值。
总结
对于奇异值分解(SVD)的 U U U 矩阵,实际上是 A A T AA^T AAT 矩阵的单位正交特征向量; V V V 矩阵实际上是 A T A A^TA ATA 矩阵的单位正交特征向量;而 Σ \Sigma Σ 矩阵中主对角线的元素实际上是 A A T AA^T AAT 或 A T A A^TA ATA 矩阵的特征值的平方根。
具体 SVD 分解的例子
这里用一个简单的例子来说明矩阵是如何进行奇异值分解的。定义矩阵 A A A 为:
A = ( 0 1 1 1 1 0 ) A = \begin{pmatrix} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{pmatrix} A= 011110
首先求出 A T A A^TA ATA 和 A A T AA^T AAT:
A T A = ( 0 1 1 1 1 0 ) ( 0 1 1 1 1 0 ) = ( 2 1 1 2 ) A^TA = \begin{pmatrix} 0 & 1 & 1 \\ 1 & 1 & 0 \end{pmatrix} \begin{pmatrix} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{pmatrix} = \begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix} ATA=(011110) 011110 =(2112)
A A T = ( 0 1 1 1 1 0 ) ( 0 1 1 1 1 0 ) = ( 1 1 0 1 2 1 0 1 1 ) AA^T = \begin{pmatrix} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix} 0 & 1 & 1 \\ 1 & 1 & 0 \end{pmatrix} = \begin{pmatrix} 1 & 1 & 0 \\ 1 & 2 & 1 \\ 0 & 1 & 1 \end{pmatrix} AAT= 011110 (011110)= 110121011
进而求出 A T A A^TA ATA 的特征值和特征向量:
λ 1 = 3 ; v 1 = ( 1 / 2 1 / 2 ) ; λ 2 = 1 ; v 2 = ( − 1 / 2 1 / 2 ) \lambda_1 = 3; \quad v_1 = \begin{pmatrix} 1/\sqrt{2} \\ 1/\sqrt{2} \end{pmatrix}; \quad \lambda_2 = 1; \quad v_2 = \begin{pmatrix} -1/\sqrt{2} \\ 1/\sqrt{2} \end{pmatrix} λ1=3;v1=(1/2 1/2 );λ2=1;v2=(−1/2 1/2 )
再求出 A A T AA^T AAT 的特征值和特征向量:
λ 1 = 3 ; u 1 = ( 1 / 6 2 / 6 1 / 6 ) ; λ 2 = 1 ; u 2 = ( 1 / 2 0 − 1 / 2 ) ; λ 3 = 0 ; u 3 = ( 1 / 3 − 1 / 3 1 / 3 ) \lambda_1 = 3; \quad u_1 = \begin{pmatrix} 1/\sqrt{6} \\ 2/\sqrt{6} \\ 1/\sqrt{6} \end{pmatrix}; \quad \lambda_2 = 1; \quad u_2 = \begin{pmatrix} 1/\sqrt{2} \\ 0 \\ -1/\sqrt{2} \end{pmatrix}; \quad \lambda_3 = 0; \quad u_3 = \begin{pmatrix} 1/\sqrt{3} \\ -1/\sqrt{3} \\ 1/\sqrt{3} \end{pmatrix} λ1=3;u1= 1/6 2/6 1/6 ;λ2=1;u2= 1/2 0−1/2 ;λ3=0;u3= 1/3 −1/3 1/3
利用 σ i = λ i \sigma_i = \sqrt{\lambda_i} σi=λi , i = 1 , 2 i=1, 2 i=1,2,求得奇异值为 3 \sqrt{3} 3 和 1。
最终得到 A A A 的奇异值分解(SVD)为:
A = U Σ V T = ( 1 6 1 2 1 3 2 6 0 − 1 3 1 6 − 1 2 1 3 ) ( 3 0 0 0 1 0 0 0 0 ) ( 1 2 1 2 − 1 2 1 2 ) A = U\Sigma V^T = \begin{pmatrix} \frac{1}{\sqrt{6}} & \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{3}} \\ \frac{2}{\sqrt{6}} & 0 & -\frac{1}{\sqrt{3}} \\ \frac{1}{\sqrt{6}} & -\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{3}} \end{pmatrix} \begin{pmatrix} \sqrt{3} & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{pmatrix} \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ -\frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{pmatrix} A=UΣVT= 6 16 26 12 10−2 13 1−3 13 1 3 00010000 (2 1−2 12 12 1)
SVD 分解的应用
1. 图像压缩
在图像处理中,SVD 分解常被用于图像压缩。通过对图像矩阵进行 SVD 分解,可以得到较低秩的近似矩阵,从而减少存储空间和传输带宽。这种方法在 JPEG2000 等图像压缩算法中得到广泛应用。
2. 对极几何分解本质矩阵求 R \boldsymbol{R} R, t \boldsymbol{t} t
3. 推荐系统
SVD 分解在推荐系统中也有重要的应用。通过对用户评分矩阵进行 SVD 分解,可以将用户和物品映射到一个隐空间中,并预测用户对未评分物品的喜好程度。基于 SVD 的协同过滤算法在 Netflix Prize 竞赛中取得了很大成功。
4. 数据降维
SVD 分解可以将高维数据降维到低维,保留数据的主要特征。这在机器学习和数据挖掘任务中非常有用,可以提高计算效率并减少存储需求。例如,在主成分分析(PCA)中,SVD 分解被广泛用于实现数据降维。
超详细解释奇异值分解(SVD)【附例题和分析】
唠嗑!于 2024-01-02 22:19:23 发布
一. 矩阵对角化
在 线性代数 中,常出现把矩阵进行对角化的过程,然后将其应用于简化计算,解方程等。然而,只有对称矩阵才可以对角化。此外,方阵才有特征值和特征向量的说法。
给定 m m m 行 n n n 列的矩阵 A \boldsymbol{A} A,如下方程:
A x = b \boldsymbol{A} \boldsymbol{x} = \boldsymbol{b} Ax=b
该方程可能有一个解,可能有无数个解,也可能会出现无解的情况。但我们知道 A T A \boldsymbol{A}^T \boldsymbol{A} ATA 和 A A T \boldsymbol{A} \boldsymbol{A}^T AAT 都是方阵,且都是半正定矩阵,所以可以对角化而且特征值都大于等于 0。于是,以上方程有解:
A T A x = A T b \boldsymbol{A}^T \boldsymbol{A} \boldsymbol{x} = \boldsymbol{A}^T \boldsymbol{b} ATAx=ATb
二. 奇异值分解
奇异值分解(Singular Value Decomposition,SVD)是一种矩阵分解方法,适用于任意矩阵。建议读者在学习这部分内容之前,先了解矩阵的 LU 分解和 QR 分解。
对于正定矩阵(Positive Definite Matrix),如果想分析其特征值和特征向量,可以将其分解为如下形式:
Q Λ Q T \boldsymbol{Q} \boldsymbol{\Lambda} \boldsymbol{Q}^T QΛQT
其中, Λ \boldsymbol{\Lambda} Λ 为对角矩阵,对角线上的元素为原始矩阵的特征值。 Q \boldsymbol{Q} Q 为特征向量形成的矩阵。如果原始矩阵为对称矩阵,矩阵 Q \boldsymbol{Q} Q 可为标准正交矩阵,满足:
Q Q T = I \boldsymbol{Q} \boldsymbol{Q}^T = \boldsymbol{I} QQT=I
然而,当矩阵为非方阵(Rectangular Matrix)时,以上分解方法行不通,因为该矩阵没有特征值这一概念。因此,出现了对矩阵进行 SVD 分解,其通式如下:
A = U Σ V T \boldsymbol{A} = \boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^T A=UΣVT
其中, Σ \boldsymbol{\Sigma} Σ 为对角阵(非方阵),将其对角线处非零的元素记为 σ 1 , ⋯ , σ r \sigma_1, \cdots, \sigma_r σ1,⋯,σr,此对角矩阵有两种理解方式:
- A T A \boldsymbol{A}^T \boldsymbol{A} ATA 的特征值;
- A \boldsymbol{A} A 的奇异值(Singular Value)
主对角线处的元素个数与原始矩阵 A \boldsymbol{A} A 的秩有关。
备注:此处的矩阵 A \boldsymbol{A} A 可以是任意矩阵,但 A T A \boldsymbol{A}^T \boldsymbol{A} ATA 和 A A T \boldsymbol{A} \boldsymbol{A}^T AAT 都一定为方阵。所以经常会利用这两个方阵来理解奇异值和特征值的区别。
对于任意 m m m 行 n n n 列的矩阵 A \boldsymbol{A} A,奇异值分解的综合理解如下:
A = U Σ V T = ( orthogonal ) ( diagonal ) ( orthogonal ) . A = U \Sigma V^T = (\text{orthogonal}) (\text{diagonal}) (\text{orthogonal}). A=UΣVT=(orthogonal)(diagonal)(orthogonal).
- 正交矩阵 U \boldsymbol{U} U: m m m 行 m m m 列,该矩阵的每一个列向量都是 A A T \boldsymbol{A} \boldsymbol{A}^T AAT 的特征向量;
- 正交矩阵 V \boldsymbol{V} V: n n n 行 n n n 列,该矩阵的每一个列向量都是 A T A \boldsymbol{A}^T \boldsymbol{A} ATA 的特征向量;
- 对角阵 Σ \boldsymbol{\Sigma} Σ: m m m 行 n n n 列,将 A T A \boldsymbol{A}^T \boldsymbol{A} ATA 或 A A T \boldsymbol{A} \boldsymbol{A}^T AAT 的特征值开根号,得到的就是该矩阵主对角线上的元素,也可以看成矩阵 A \boldsymbol{A} A 的奇异值。
三. 对比奇异值分解与特征值分解
对于正定矩阵来讲,以上讨论的 Σ \boldsymbol{\Sigma} Σ 与 Λ \boldsymbol{\Lambda} Λ 是一样的, U Σ V T \boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^T UΣVT 与 Q Λ Q T \boldsymbol{Q} \boldsymbol{\Lambda} \boldsymbol{Q}^T QΛQT 是一样的。
对于非正定矩阵(要求是对称矩阵),此时 Λ \boldsymbol{\Lambda} Λ 会出现负数,但 Σ \boldsymbol{\Sigma} Σ 依旧为正数。
推广到复数矩阵,对于 SVD 分解 A = U Σ V H \boldsymbol{A} = \boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^H A=UΣVH,此时的 U \boldsymbol{U} U 和 V \boldsymbol{V} V 即为酉矩阵(Unitary),满足:
U H U = I , V H V = I \boldsymbol{U}^H \boldsymbol{U} = \boldsymbol{I}, \quad \boldsymbol{V}^H \boldsymbol{V} = \boldsymbol{I} UHU=I,VHV=I
其中, U H \boldsymbol{U}^H UH 和 V H \boldsymbol{V}^H VH 代表共轭转置。但 Σ \boldsymbol{\Sigma} Σ 中的元素依旧为实数。

四. SVD 分解与四大基础子空间
对于任意矩阵,有四个非常重要的子空间:列空间(Column Space),行空间(Row Space),左零空间(Left Nullspace),零空间(Nullspace)。
假定某 m m m 行 n n n 列矩阵 A \boldsymbol{A} A 的秩为 r r r,将矩阵 U \boldsymbol{U} U 和 V \boldsymbol{V} V 的列向量可以作为不同空间的标准正交基,如下:

- 矩阵 U \boldsymbol{U} U 的前 r r r 个列向量可以作为 A \boldsymbol{A} A 列空间的标准正交基;
- 矩阵 U \boldsymbol{U} U 的后 m − r m - r m−r 个列向量可以作为 A \boldsymbol{A} A 左零空间的标准正交基;
- 矩阵 V \boldsymbol{V} V 的前 r r r 个列向量可以作为 A \boldsymbol{A} A 行空间的标准正交基;
- 矩阵 V \boldsymbol{V} V 的后 n − r n - r n−r 个列向量可以作为 A \boldsymbol{A} A 零空间的标准正交基。
五. SVD 分解的正交矩阵
已知 A = U Σ V T \boldsymbol{A} = \boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^T A=UΣVT,两边同时乘以正交矩阵 V \boldsymbol{V} V,可得:
A V = U Σ \boldsymbol{A} \boldsymbol{V} = \boldsymbol{U} \boldsymbol{\Sigma} AV=UΣ
这个结果有一个很有意思的理解角度:从矩阵 V \boldsymbol{V} V 中随机抽取一个列向量 v j \boldsymbol{v}_j vj,对应位置抽取对角阵的元素 σ j \sigma_j σj,以及矩阵 U \boldsymbol{U} U 的列向量 u j \boldsymbol{u}_j uj,可得:
A v j = u j σ j \boldsymbol{A} \boldsymbol{v}_j = \boldsymbol{u}_j \sigma_j Avj=ujσj
六. 方阵与 SVD 分解
对 A A T \boldsymbol{A} \boldsymbol{A}^T AAT 做 SVD 分解,如下:
A A T = U Σ V T ( U Σ V T ) T = U Σ Σ T U T \boldsymbol{A} \boldsymbol{A}^T = \boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^T (\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^T)^T = \boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{\Sigma}^T \boldsymbol{U}^T AAT=UΣVT(UΣVT)T=UΣΣTUT
此时 U \boldsymbol{U} U 即为 A A T \boldsymbol{A} \boldsymbol{A}^T AAT 的特征向量形成的矩阵, Σ Σ T \boldsymbol{\Sigma} \boldsymbol{\Sigma}^T ΣΣT 为 A A T \boldsymbol{A} \boldsymbol{A}^T AAT 的特征值。
同理,对 A T A \boldsymbol{A}^T \boldsymbol{A} ATA 运算如下:
A T A = ( U Σ V T ) T U Σ V T = V Σ T Σ V T \boldsymbol{A}^T \boldsymbol{A} = (\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^T)^T \boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^T = \boldsymbol{V} \boldsymbol{\Sigma}^T \boldsymbol{\Sigma} \boldsymbol{V}^T ATA=(UΣVT)TUΣVT=VΣTΣVT
此时 V \boldsymbol{V} V 即为 A T A \boldsymbol{A}^T \boldsymbol{A} ATA 的特征向量形成的矩阵, Σ T Σ \boldsymbol{\Sigma}^T \boldsymbol{\Sigma} ΣTΣ 为 A T A \boldsymbol{A}^T \boldsymbol{A} ATA 的特征值。令 r r r 代表矩阵 A \boldsymbol{A} A 的秩:
- Σ Σ T \boldsymbol{\Sigma} \boldsymbol{\Sigma}^T ΣΣT 为 m m m 行 m m m 列的矩阵,主对角线的元素为 σ 1 2 , ⋯ , σ r 2 \sigma_1^2, \cdots, \sigma_r^2 σ12,⋯,σr2。
- Σ T Σ \boldsymbol{\Sigma}^T \boldsymbol{\Sigma} ΣTΣ 为 n n n 行 n n n 列的矩阵,主对角线的元素为 σ 1 2 , ⋯ , σ r 2 \sigma_1^2, \cdots, \sigma_r^2 σ12,⋯,σr2。
可以观察到 Σ T Σ \boldsymbol{\Sigma}^T \boldsymbol{\Sigma} ΣTΣ 与 Σ Σ T \boldsymbol{\Sigma} \boldsymbol{\Sigma}^T ΣΣT 都为方阵,维度是不一样的,但它们的主对角线元素是一模一样的。
七. 单位特征向量与 SVD 分解
根据六中的讨论, A T A \boldsymbol{A}^T \boldsymbol{A} ATA 的特征值为 σ 1 2 , ⋯ , σ r 2 \sigma_1^2, \cdots, \sigma_r^2 σ12,⋯,σr2,特征向量为 v j \boldsymbol{v}_j vj,由此可得:
A T A v j = σ j 2 v j \boldsymbol{A}^T \boldsymbol{A} \boldsymbol{v}_j = \sigma_j^2 \boldsymbol{v}_j ATAvj=σj2vj
两边同时乘以矩阵 A \boldsymbol{A} A 可得:
A A T A v j = σ j 2 A v j \boldsymbol{A} \boldsymbol{A}^T \boldsymbol{A} \boldsymbol{v}_j = \sigma_j^2 \boldsymbol{A} \boldsymbol{v}_j AATAvj=σj2Avj
将 A A T \boldsymbol{A} \boldsymbol{A}^T AAT 看成一个矩阵, A v j \boldsymbol{A} \boldsymbol{v}_j Avj 看成特征向量, σ j 2 \sigma_j^2 σj2 看成特征值。也就是说, A v j \boldsymbol{A} \boldsymbol{v}_j Avj 是矩阵 A A T \boldsymbol{A} \boldsymbol{A}^T AAT 的特征向量。易得:
∥ A v j ∥ 2 = σ j \| \boldsymbol{A} \boldsymbol{v}_j \|_2 = \sigma_j ∥Avj∥2=σj
所以可得单位向量为:
A v j σ j \frac{\boldsymbol{A} \boldsymbol{v}_j}{\sigma_j} σjAvj
综合可得:
A v j σ j = u j \frac{\boldsymbol{A} \boldsymbol{v}_j}{\sigma_j} = \boldsymbol{u}_j σjAvj=uj
以上过程的本质就是 A V = U Σ \boldsymbol{A} \boldsymbol{V} = \boldsymbol{U} \boldsymbol{\Sigma} AV=UΣ。
八. 例题分析:秩为 1
对以下矩阵 A \boldsymbol{A} A 进行 SVD 分解,并分析相关性质:
A = [ − 1 2 2 ] \boldsymbol{A} = \begin{bmatrix} -1 \\ 2 \\ 2 \end{bmatrix} A= −122
解:
该矩阵仅有一列,所以秩 r = 1 r = 1 r=1,这也就意味着该矩阵进行 SVD 分解,中间的对角阵 Σ \boldsymbol{\Sigma} Σ 仅有一个非零元素,如下:
SVD A = [ − 1 2 2 ] = [ − 1 3 2 3 2 3 2 3 − 1 3 2 3 2 3 2 3 − 1 3 ] [ 3 0 0 ] [ 1 0 0 ] T = U 3 × 3 Σ 3 × 1 V 1 × 1 T \text{SVD} \quad A = \begin{bmatrix} -1 \\ 2 \\ 2 \end{bmatrix} = \begin{bmatrix} -\frac{1}{3} & \frac{2}{3} & \frac{2}{3} \\ \frac{2}{3} & -\frac{1}{3} & \frac{2}{3} \\ \frac{2}{3} & \frac{2}{3} & -\frac{1}{3} \end{bmatrix} \begin{bmatrix} 3 \\ 0 \\ 0 \end{bmatrix} \begin{bmatrix} 1 \\ 0 \\ 0 \end{bmatrix}^T = U_{3 \times 3} \Sigma_{3 \times 1} V_{1 \times 1}^T SVDA= −122 = −31323232−31323232−31 300 100 T=U3×3Σ3×1V1×1T.
矩阵 A A A 的奇异值分解(SVD),其中 U U U 是一个 3 × 3 3 \times 3 3×3 的正交矩阵, Σ \Sigma Σ 是一个 3 × 1 3 \times 1 3×1 的对角矩阵, V V V 是一个 1 × 1 1 \times 1 1×1 的正交矩阵。
对角阵 Σ \boldsymbol{\Sigma} Σ 主对角线仅有一个元素 σ 1 = 3 \sigma_1 = 3 σ1=3。
易得 A T A \boldsymbol{A}^T \boldsymbol{A} ATA 为 1 × 1 1 \times 1 1×1 的矩阵, A A T \boldsymbol{A} \boldsymbol{A}^T AAT 为 3 × 3 3 \times 3 3×3 的矩阵,这两个矩阵都拥有特征值 9,开根号后刚好为 3,与以上讨论一致。
九. 例题分析:秩为 2
对以下矩阵 A A A 进行 SVD 分解,并分析相关性质:
A = [ − 1 1 0 0 − 1 1 ] A = \begin{bmatrix} -1 & 1 & 0 \\ 0 & -1 & 1 \end{bmatrix} A=[−101−101]
解:
显然,矩阵 A A A 的秩为 2,易运算 A A T AA^T AAT 如下:
A A T = [ 2 − 1 − 1 2 ] AA^T = \begin{bmatrix} 2 & -1 \\ -1 & 2 \end{bmatrix} AAT=[2−1−12]
可以分析出该方阵的特征值为 3 和 1。
对原始矩阵 A A A 进行 SVD 分解如下:
− 1 1 0 0 − 1 1 \] = U Σ V T = 1 2 \[ − 1 1 1 1 \] \[ 3 0 0 0 1 0 \] \[ 1 − 2 1 − 1 0 1 1 1 1 \] / 6 / 2 / 3 \\begin{bmatrix} -1 \& 1 \& 0 \\\\ 0 \& -1 \& 1 \\end{bmatrix} = U\\Sigma V\^T = \\frac{1}{\\sqrt{2}}\\begin{bmatrix} -1 \& 1 \\\\ 1 \& 1 \\end{bmatrix}\\begin{bmatrix} \\sqrt{3} \& 0 \& 0 \\\\ 0 \& 1 \& 0 \\end{bmatrix}\\begin{bmatrix} 1 \& -2 \& 1 \\\\ -1 \& 0 \& 1 \\\\ 1 \& 1 \& 1 \\end{bmatrix}\\begin{matrix} /\\sqrt{6} \\\\ /\\sqrt{2} \\\\ /\\sqrt{3} \\end{matrix} \[−101−101\]=UΣVT=2 1\[−1111\]\[3 00100\] 1−11−201111 /6 /2 /3 可以发现该矩阵的奇异值为 3 \\sqrt{3} 3 和 1 \\sqrt{1} 1 。 矩阵 U \\boldsymbol{U} U 的每一列可以看成 A \\boldsymbol{A} A 的左奇异向量,也可以看成 A A T \\boldsymbol{A} \\boldsymbol{A}\^T AAT 的单位特征向量; 矩阵 V \\boldsymbol{V} V 的每一列可以看成 A \\boldsymbol{A} A 的右奇异向量,也可以看成 A T A \\boldsymbol{A}\^T \\boldsymbol{A} ATA 的单位特征向量。 ### 十. 计算机网络与矩阵的秩 矩阵的秩代表的是线性独立的行向量或列向量的个数。但在实际的计算中,这个量并不容易直接分析。 在物理层安全或无线通信中,会存在噪声,这些噪声通常很小,进而延伸出矩阵的有效秩概念。 假定 ϵ \\epsilon ϵ 是一个很小的数,可以将其看成所谓的误差(roundoff error)。 以下是一些有趣的情况: 1. \[ ϵ 2 ϵ 1 2 \] \\left\[ \\begin{matrix} \\epsilon \& 2\\epsilon \\\\ 1 \& 2 \\\\ \\end{matrix} \\right\] \[ϵ12ϵ2
很明显这个矩阵的秩为 1。
2. [ ϵ 1 0 0 ] \begin{bmatrix} \epsilon & 1 \\ 0 & 0 \end{bmatrix} [ϵ010]
这个矩阵的秩也为 1。
接下来我们来看第三个有趣的例子:
ϵ 1 ϵ 1 + ϵ \] \\begin{bmatrix} \\epsilon \& 1 \\\\ \\epsilon \& 1 + \\epsilon \\end{bmatrix} \[ϵϵ11+ϵ
乍一看这个矩阵的秩为 2,但实际情况并非如此。
我们知道 A T A \boldsymbol{A}^T \boldsymbol{A} ATA 和 A A T \boldsymbol{A} \boldsymbol{A}^T AAT 均为对称的方阵,并且这两个矩阵的秩与 A \boldsymbol{A} A 相同。
对这两个矩阵而言,特征值开根号即为奇异值。根据这个角度不难分析刚才的矩阵 A \boldsymbol{A} A 的有效秩为 1(不要忘记 ϵ \epsilon ϵ 为一个很小的数)。
降维算法之奇异值分解(SVD)
在学 AI 的 Heath 已于 2023-06-24 15:43:01 修改
引言
2006 年,Netflix 发起一项推荐系统算法竞赛,赛事奖金为 100 万美元。最终获胜团队所采用的核心技术,正是矩阵分解领域的关键方法------奇异值分解(SVD) 。SVD 在推荐系统、图像处理等多个领域应用广泛,是数据降维方向的经典算法。其中,降维 属于特征提取的子任务,关于降维的详细内容,可参考下述博客:
- 降维算法之弄清原因:数据挖掘 or 图像处理,我们为啥要进行特征工程 and 降维-CSDN 博客
https://blog.csdn.net/ZuHaohua/article/details/131080245
为确保对本文内容的充分理解,建议在正式阅读前,先观看 Youtube 平台上 Serrano Academic 发布的 SVD 讲解视频,再开展文本阅读,具体视频链接如下:
- 奇异值分解(SVD)和图像压缩(中英文字幕)_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1MT4y1y75x/ - Singular Value Decomposition (SVD) and Image Compression - YouTube
https://www.youtube.com/watch?v=DG7YTlGnCEo
太长不看版:奇异值分解的通俗解释
对于诸多数学对象,可通过将其分解为多个组成部分,或挖掘其内在属性的方式,实现对该数学对象的深度理解。这些属性具有通用性,不受人为选择的表示方式影响。
以整数为例,通过质因数分解可揭示其内在性质。例如整数 12,无论采用十进制、二进制或其他进制表示,其质因数分解结果 12 = 2 × 2 × 3 12 = 2 \times 2 \times 3 12=2×2×3始终成立。从这一分解结果中,可获取诸多有效信息,如 12 无法被 5 整除、12 的倍数均能被 3 整除等。
与之对应,矩阵同样可通过分解操作,挖掘其在数组元素层面未直接体现的函数性质。特征分解是目前应用最为广泛的矩阵分解方法之一,该方法将矩阵分解为特征向量构成的矩阵与特征值构成的向量,助力分析矩阵的特定性质,其作用类似于质因数分解对理解整数的帮助。
奇异值分解 则是将矩阵分解为奇异向量 与奇异值 的过程。通过奇异值分解,可获取与特征分解类似的信息,但奇异值分解的应用范围更为广泛------所有实数矩阵均存在奇异值分解结果,而特征分解并非对所有矩阵适用(例如非方阵矩阵便无法进行特征分解)。
以矩阵 A \boldsymbol{A} A为例,若采用特征分解对其进行分析,可得到由特征向量构成的矩阵 V \boldsymbol{V} V与由特征值构成的向量 λ \boldsymbol{\lambda} λ,此时矩阵 A \boldsymbol{A} A可表示为:
A = V d i a g ( λ ) V − 1 \boldsymbol{A} = \boldsymbol{V} \, \mathrm{diag} \left( \boldsymbol{\lambda} \right) \, \boldsymbol{V}^{-1} A=Vdiag(λ)V−1
奇异值分解的原理与之类似,区别在于其将矩阵 A \boldsymbol{A} A分解为三个矩阵的乘积,具体形式如下:
A = U Σ V T \boldsymbol{A} = \boldsymbol{U} \, \boldsymbol{\varSigma} \, \boldsymbol{V}^{\mathbf{T}} A=UΣVT
上述公式中, U \boldsymbol{U} U为 m m m阶正交矩阵, V \boldsymbol{V} V为 n n n阶正交矩阵, Σ \boldsymbol{\varSigma} Σ为 m × n m \times n m×n阶矩形对角矩阵(不一定为方阵),其对角线元素以非负数值按降序排列,该对角线元素即被称为奇异值 。奇异值既是 A T A \boldsymbol{A}^T \boldsymbol{A} ATA特征值的平方根,也是 A A T \boldsymbol{A} \boldsymbol{A}^T AAT特征值的平方根。 U Σ V T \boldsymbol{U} \boldsymbol{\varSigma} \boldsymbol{V}^{\mathbf{T}} UΣVT被定义为矩阵 A \boldsymbol{A} A的奇异值分解式,其中 U \boldsymbol{U} U的列向量称为左奇异向量,是 A A T \boldsymbol{A} \boldsymbol{A}^T AAT的特征向量; V \boldsymbol{V} V的列向量称为右奇异向量,是 A T A \boldsymbol{A}^T \boldsymbol{A} ATA的特征向量。
一、奇异值分解的定义与性质
1.1 奇异值分解简介
奇异值分解(singular value decomposition, SVD)是一种矩阵因子分解方法,是线性代数的概念,但在机器学习中被广泛应用。奇异值分解将任何给定矩阵分解为三个矩阵的乘积:一个正交的左奇异向量矩阵、一个对角的奇异值矩阵和一个正交的右奇异向量矩阵。将数据集的奇异值表征按重要性排列,舍弃不重要的特征向量,达到降维的目的,从而找出数据中的主成分。矩阵的奇异值分解可以看做是矩阵数据压缩的一种方法,即用因子分解的方式近似地表示原始矩阵,这种近似是在 平方损失意义下的最优近似。它在应用如数据降维、信息检索、信号处理和图像压缩等领域具有重要作用。
1.2 奇异值分解的定义和定理
矩阵的奇异值分解是指将一个非零的实矩阵 A \boldsymbol{A} A, A ∈ R m × n \boldsymbol{A} \in \mathbb{R}^{m \times n} A∈Rm×n,表示为以下三个实矩阵乘积形式的运算,即进行矩阵的因子分解:
A = U Σ V T \boldsymbol{A} = \boldsymbol{U} \, \boldsymbol{\varSigma} \, \boldsymbol{V}^{\mathbf{T}} A=UΣVT
其中, U \boldsymbol{U} U 是 m m m 阶正交矩阵, V \boldsymbol{V} V 是 n n n 阶正交矩阵, Σ \boldsymbol{\varSigma} Σ 是由降序排列的非负的对角线元素组成的 m × n m \times n m×n 矩形对角矩阵,对角线上的元素就叫做 奇异值 ,满足:
U U T = I V V T = I Σ = d i a g ( σ 1 , σ 2 , ⋯ , σ p ) σ 1 ≥ σ 2 ≥ ⋯ ≥ σ p ≥ 0 p = min ( m , n ) \begin{aligned} &\boldsymbol{U} \boldsymbol{U}^{\mathbf{T}} = \boldsymbol{I} \\ &\boldsymbol{V} \boldsymbol{V}^{\mathbf{T}} = \boldsymbol{I} \\ &\boldsymbol{\varSigma} = \mathrm{diag} \left( \sigma_1, \sigma_2, \cdots, \sigma_p \right) \\ &\sigma_1 \geq \sigma_2 \geq \cdots \geq \sigma_p \geq 0 \\ &p = \min \left( m, n \right) \end{aligned} UUT=IVVT=IΣ=diag(σ1,σ2,⋯,σp)σ1≥σ2≥⋯≥σp≥0p=min(m,n)
U Σ V T \boldsymbol{U} \boldsymbol{\varSigma} \boldsymbol{V}^{\mathbf{T}} UΣVT 称为矩阵 A \boldsymbol{A} A 的奇异值分解, σ i \sigma_i σi 称为矩阵 A \boldsymbol{A} A 的奇异值, U \boldsymbol{U} U 的列向量被称为左奇异向量, V \boldsymbol{V} V 的列向量被称为右奇异向量。
任意给定一个实矩阵,其奇异值分解一定存在,但不唯一 ,这就是奇异值分解的 基本定理。
1.3 奇异值
分解的实例及 numpy 代码实现
奇异值分解的直观表现如下图所示:

例如一个 5 × 4 5 \times 4 5×4 的矩阵 A \boldsymbol{A} A 要进行奇异值分解,则 A \boldsymbol{A} A 的奇异值分解可表示为:
A 5 × 4 = U 5 × 5 Σ 5 × 4 V 4 × 4 \boldsymbol{A}{5 \times 4} = \boldsymbol{U}{5 \times 5} \, \boldsymbol{\varSigma}{5 \times 4} \, \boldsymbol{V}{4 \times 4} A5×4=U5×5Σ5×4V4×4
给定矩阵 A \boldsymbol{A} A:
A 5 × 4 = [ 1 0 0 0 0 0 0 4 0 3 0 0 0 0 0 0 2 0 0 0 ] \boldsymbol{A}_{5 \times 4} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 4 \\ 0 & 3 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 2 & 0 & 0 & 0 \end{bmatrix} A5×4= 10002003000000004000
它的奇异值分解由三个矩阵的乘积 U Σ V T \boldsymbol{U} \boldsymbol{\varSigma} \boldsymbol{V}^{\mathbf{T}} UΣVT,矩阵 U \boldsymbol{U} U, Σ \boldsymbol{\varSigma} Σ, V \boldsymbol{V} V 分别为:
U 5 × 5 = [ 0 0 0.2 0 0.8 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 − 0.8 0 − 0.2 ] Σ 5 × 4 = [ 4 0 0 0 0 3 0 0 0 0 5 0 0 0 0 0 2 0 0 0 ] V 4 × 4 = [ 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 ] \begin{aligned} \boldsymbol{U}{5 \times 5} &= \begin{bmatrix} 0 & 0 & \sqrt{0.2} & 0 & \sqrt{0.8} \\ 1 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & -\sqrt{0.8} & 0 & -\sqrt{0.2} \end{bmatrix} \\ \boldsymbol{\varSigma}{5 \times 4} &= \begin{bmatrix} 4 & 0 & 0 & 0 \\ 0 & 3 & 0 & 0 \\ 0 & 0 & \sqrt{5} & 0 \\ 0 & 0 & 0 & 0 \\ 2 & 0 & 0 & 0 \end{bmatrix} \\ \boldsymbol{V}_{4 \times 4} &= \begin{bmatrix} 0 & 0 & 0 & 1 \\ 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \end{aligned} U5×5Σ5×4V4×4= 01000001000.2 000−0.8 000100.8 000−0.2 = 4000203000005 0000000 = 0010010000011000
矩阵 Σ 5 × 4 \boldsymbol{\varSigma}{5 \times 4} Σ5×4 是对角矩阵,对角线外的元素都是 0,对角线上元素非负,按降序排列。矩阵 U 5 × 5 \boldsymbol{U}{5 \times 5} U5×5 和 V 4 × 4 \boldsymbol{V}_{4 \times 4} V4×4 是正交矩阵,它们与各自的转置矩阵相乘是单位矩阵 I \boldsymbol{I} I。
矩阵的奇异值分解 不唯一 ,如果在此例中选择 U \boldsymbol{U} U 为其他正交矩阵,
U = [ 0 0 0.2 0.4 − 0.4 1 0 0 0 0 0 1 0 0 0 0 0 0 0.5 0.5 0 0 0.8 − 0.1 0.1 ] U = \begin{bmatrix} 0 & 0 & \sqrt{0.2} & \sqrt{0.4} & -\sqrt{0.4} \\ 1 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & \sqrt{0.5} & \sqrt{0.5} \\ 0 & 0 & \sqrt{0.8} & -\sqrt{0.1} & \sqrt{0.1} \end{bmatrix} U= 01000001000.2 0000.8 0.4 000.5 −0.1 −0.4 000.5 0.1
而 Σ 5 × 4 \boldsymbol{\varSigma}{5 \times 4} Σ5×4 和 V 4 × 4 \boldsymbol{V}{4 \times 4} V4×4 不变,那么 U Σ V T \boldsymbol{U} \boldsymbol{\varSigma} \boldsymbol{V}^{\mathbf{T}} UΣVT 也是 A \boldsymbol{A} A 的一个奇异值分解。
使用 numpy 进行上述矩阵的奇异值分解代码如下:
python
import numpy as np
# 创建矩阵A
A = np.array([
[1, 0, 0, 0],
[0, 0, 0, 4],
[0, 3, 0, 0],
[0, 0, 0, 0],
[2, 0, 0, 0]
])
# 进行奇异值分解
U, s, V = np.linalg.svd(A)
# 打印结果
print("U:\n", U)
print("s:", s)
print("V:\n", V)
运行结果如下:
python
U:
[[ 0. 0. -0.4472136 0. -0.89442719]
[-1. 0. 0. 0. 0. ]
[ 0. -1. 0. 0. 0. ]
[ 0. 0. 0. 1. 0. ]
[ 0. 0. -0.89442719 0. 0.4472136 ]]
s: [ 4. 3. 2.23606798 0. ]
V:
[[-0. -0. -0. -1.]
[-0. -1. -0. -0.]
[-1. -0. -0. -0.]
[-0. -0. -1. -0.]]
1.4 最有用的性质:Moore-Penrose 伪逆
SVD 的一个最有用的性质可能是拓展矩阵求逆到非方的矩阵上。Moore-Penrose 伪逆使我们在求解非方矩阵的线性方程中取得了一定的进展。矩阵 A \boldsymbol{A} A 的伪逆定义为:
A + = lim α → 0 ( A T A + α I ) − 1 A T \boldsymbol{A}^+ = \lim_{\alpha \to 0} \left( \boldsymbol{A}^T \boldsymbol{A} + \alpha \boldsymbol{I} \right)^{-1} \boldsymbol{A}^T A+=α→0lim(ATA+αI)−1AT
计算伪逆的实际方法并不是基于这个定义,而是使用下面的公式:
A + = V Σ + U T \boldsymbol{A}^+ = \boldsymbol{V} \, \boldsymbol{\varSigma}^+ \, \boldsymbol{U}^T A+=VΣ+UT
其中 V \boldsymbol{V} V、 Σ \boldsymbol{\varSigma} Σ、 U \boldsymbol{U} U 是矩阵 A \boldsymbol{A} A 奇异值分解后得到的矩阵。对角矩阵 Σ \boldsymbol{\varSigma} Σ 的伪逆 Σ + \boldsymbol{\varSigma}^+ Σ+ 是其非零元素取倒数之后再转置得到的。当矩阵 A \boldsymbol{A} A 的列数多于行数时,使用伪逆求解线性方程是众多可能解法中的一种;行数多于列数时,可能没有解。
二、紧奇异值分解和截断奇异值分解
1.3 中提到的奇异值分解被称为矩阵的完全奇异值分解。实际上常用的是奇异值分解的紧凑形式和截断形式。紧奇异值分解是与原始矩阵等秩的奇异值分解,截断奇异值分解是比原始矩阵低秩的奇异值分解。
2.1 紧奇异值分解
定义 15.2 设有 m × n m \times n m×n 实矩阵 A A A,其秩为 rank ( A ) = r \text{rank}(A) = r rank(A)=r, r ≤ min ( m , n ) r \leq \min(m, n) r≤min(m,n),则称 U r Σ r V r T U_r \Sigma_r V_r^T UrΣrVrT 为 A A A 的紧奇异值分解(compact singular value decomposition),即
A = U r Σ r V r T A = U_r \Sigma_r V_r^T A=UrΣrVrT
其中 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 阶对角矩阵;矩阵 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 个对角线元素得到。紧奇异值分解的对角矩阵 Σ r \Sigma_r Σr 的秩与原始矩阵 A A A 的秩相等。
定义了紧奇异值分解(Compact SVD),其中 U r U_r Ur 和 V r V_r Vr 分别是正交矩阵, Σ r \Sigma_r Σr 是对角矩阵,包含了矩阵 A A A 的前 r r r 个奇异值。
紧奇异值分解是奇异值分解(SVD)的一种形式,适用于矩阵的秩小于其维度的情况。
紧奇异值分解的举例,还是上面那个例子。

2.2 截断奇异值分解
在矩阵的奇异值分解中,只取最大的 k k k 个奇异值( k < r k < r k<r, r r r 为矩阵的秩)对应的部分,就得到矩阵的截断奇异值分解。实际应用中提到矩阵的奇异值分解时,通常指截断奇异值分解。
定义 15.3 设 A A A 为 m × n m \times n m×n 实矩阵,其秩 rank ( A ) = r \text{rank}(A) = r rank(A)=r,且 0 < k < r 0 < k < r 0<k<r,则称 U k Σ k V k T U_k \Sigma_k V_k^T UkΣkVkT 为矩阵 A A A 的截断奇异值分解(truncated singular value decomposition)
A ≈ U k Σ k V k T A \approx U_k \Sigma_k V_k^T A≈UkΣ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 阶对角矩阵;矩阵 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 个对角线元素得到。对角矩阵 Σ k \Sigma_k Σk 的秩比原始矩阵 A A A 的秩低。
定义了截断奇异值分解(Truncated SVD),其中 U k U_k Uk 和 V k V_k Vk 分别是正交矩阵, Σ k \Sigma_k Σk 是对角矩阵,包含了矩阵 A A A 的前 k k k 个奇异值。
截断奇异值分解是奇异值分解(SVD)的一种形式,适用于需要降低矩阵维度的情况。

2.3 截断奇异值分解的 numpy 代码实现
实际上,紧奇异值分解就是截断奇异值分解的一种特殊表现形式。将矩阵 A \boldsymbol{A} A 进行紧奇异值分解的代码如下(设置 k = 2 k = 2 k=2,指定要保留的前 2 个奇异值),如果设置 k = 3 k = 3 k=3,即可实现紧奇异值分解:
python
import numpy as np
# 创建矩阵A
A = np.array([
[1, 0, 0, 0],
[0, 0, 0, 4],
[0, 3, 0, 0],
[0, 0, 0, 0],
[2, 0, 0, 0]
])
# 进行截断奇异值分解
k = 2 # 指定要保留的前 k 个奇异值
U, s, V = np.linalg.svd(A, full_matrices=False)
# 仅保留前 k 个奇异值及相应的奇异向量
U_k = U[:, :k]
s_k = s[:k]
V_k = V[:k, :]
# 构建紧奇异值分解的近似矩阵
A_k = U_k.dot(np.diag(s_k)).dot(V_k)
# 打印结果
print("U_k:\n", U_k)
print("s_k:", s_k)
print("V_k:\n", V_k)
print("A_k:\n", A_k)
运行结果如下所示:
python
U_k:
[[ 0. 0.]
[-1. 0.]
[ 0. -1.]
[ 0. 0.]
[ 0. 0.]]
s_k: [4. 3.]
V_k:
[[-0. -0. -0. -1.]
[-0. -1. -0. -0.]]
A_k:
[[0. 0. 0. 0.]
[0. 0. 0. 4.]
[0. 3. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
结果基本上与例 15.3 保持一致。
实际应用中,常常需要对矩阵的数据进行压缩,将其近似表示,奇异值分解提供了一种方法。奇异值分解是在平方损失意义下对矩阵的最优近似。紧奇异值分解对应无损压缩,截断奇异值分解对应有损压缩。
三、奇异值分解的几何解释
矩阵的奇异值分解也可以看做是:一个坐标系的旋转或反射变换、一个坐标轴的缩放变换、另一个坐标系的旋转或反射变换。奇异值定理保证这种分解一定存在,这就是奇异值分解的几何解释。

四、如何理解"奇异值分解是在平方损失意义下对矩阵的最优近似"?
4.1 范数及最优近似
奇异值分解是在平方损失(弗罗贝尼乌斯范数)意义下对矩阵的最优近似,即数据压缩。矩阵的弗罗贝尼乌斯范数是向量的 L 2 \boldsymbol{L}_2 L2 范数的直接推广,对应机器学习中的平方损失函数。
矩阵 A = [ a i j ] m × n \boldsymbol{A} = \left[ a_{ij} \right]{m \times n} A=[aij]m×n 的弗罗贝尼乌斯范数为:
∥ A ∥ F = ∑ i = 1 m ∑ j = 1 n ∥ a i j ∥ 2 \| \boldsymbol{A} \|F = \sqrt{\sum{i=1}^{m} \sum{j=1}^{n} \| a_{ij} \|^2} ∥A∥F=i=1∑mj=1∑n∥aij∥2
在秩不超过 k k k 的 m × n m \times n m×n 矩阵集合中,存在矩阵 A \boldsymbol{A} A 的弗罗贝尼乌斯范数意义下的最优近似矩阵 X \boldsymbol{X} X。秩为 k k k 的截断奇异值分解得到的矩阵 A k \boldsymbol{A}k Ak 能够达到这个最优值。也就是说, A k = U Σ ′ V \boldsymbol{A}k = \boldsymbol{U} \, \boldsymbol{\varSigma}' \, \boldsymbol{V} Ak=UΣ′V 是达到最优值的一个矩阵。即:
∥ A − X ∥ F = ( σ k + 1 2 + σ k + 2 2 + ⋯ + σ k + n 2 ) 1 2 = ∥ A − A k ∥ F \| \boldsymbol{A} - \boldsymbol{X} \|F = \left( \sigma{k+1}^2 + \sigma{k+2}^2 + \cdots + \sigma{k+n}^2 \right)^{\frac{1}{2}} = \| \boldsymbol{A} - \boldsymbol{A}_k \|_F ∥A−X∥F=(σk+12+σk+22+⋯+σk+n2)21=∥A−Ak∥F
事实上,前面提到的紧奇异值分解是在弗罗贝尼乌斯范数意义下的无损压缩,截断奇异值分解是有损压缩。截断奇异值分解得到的矩阵的秩为 k k k,通常远小于原始矩阵的秩 r r r,所以是由低秩矩阵实现了对原始矩阵的压缩。
4.2 矩阵的外积展开式
A \boldsymbol{A} A 的奇异值分解也可以由外积的形式表示,可以写成下面的形式:
A = ∑ k = 1 n A k = ∑ k = 1 n σ k u k v k T \boldsymbol{A} = \sum_{k=1}^n \boldsymbol{A}k = \sum{k=1}^n \sigma_k \, \boldsymbol{u}_k \, \boldsymbol{v}_k^T A=k=1∑nAk=k=1∑nσkukvkT
其中, A k = σ k u k v k T \boldsymbol{A}_k = \sigma_k \, \boldsymbol{u}_k \, \boldsymbol{v}_k^T Ak=σkukvkT 是 m × n m \times n m×n 矩阵。上式将矩阵 A \boldsymbol{A} A 分解为矩阵的有序加权和,展开可得到:
A = σ 1 u 1 v 1 T + σ 2 u 2 v 2 T + ⋯ + σ n u n v n T \boldsymbol{A} = \sigma_1 \, \boldsymbol{u}_1 \, \boldsymbol{v}_1^T + \sigma_2 \, \boldsymbol{u}_2 \, \boldsymbol{v}_2^T + \cdots + \sigma_n \, \boldsymbol{u}_n \, \boldsymbol{v}_n^T A=σ1u1v1T+σ2u2v2T+⋯+σnunvnT
当 n = k n = k n=k 时,矩阵 A \boldsymbol{A} A 的秩为 k k k,并且 A k \boldsymbol{A}_k Ak 是秩为 k k k 的矩阵中在弗罗贝尼乌斯范数意义下 A \boldsymbol{A} A 的最优近似矩阵。矩阵 A k \boldsymbol{A}_k Ak 就是 A \boldsymbol{A} A 的截断奇异值分解。
通常奇异值 σ i \sigma_i σi 递减得很快,因此 k k k 取很小值时, A k \boldsymbol{A}_k Ak 也可以对 A \boldsymbol{A} A 有很好地近似。
4.3 举个例子
视频中的例子:例如一个 4 × 4 4 \times 4 4×4 的矩阵 A \boldsymbol{A} A,可被分解成 4 个秩为 1 的外积展开形式,如下图所示。

具体到某个矩阵如下图所示。

实际上,在这个例子中, k = 2 k = 2 k=2 时的值已经非常接近原始矩阵了。这样就实现了矩阵在某种程度上的降维。
五、截断奇异值分解在 sklearn 中的体现
在 sklearn 中,奇异值分解主要以截断奇异值分解 sklearn.decomposition.TruncatedSVD 的形式体现。在官方文档中,奇异值分解用于图像压缩总共有三个示例:使用 SVD 进行简单矩阵降维、使用完全随机树的哈希特征转换,以及手写数字识别的嵌入(embedding)表示。
5.1 使用 SVD 进行简单矩阵降维并计算可解释方差比例
代码如下所示:
python
#计算可解释方差比例的代码
from sklearn.decomposition import TruncatedSVD
from scipy.sparse import csr_matrix
import numpy as np
np.random.seed(0)
X_dense = np.random.rand(100, 100)
X_dense[:, 2 * np.arange(50)] = 0
X = csr_matrix(X_dense)
svd = TruncatedSVD(n_components=5, n_iter=7, random_state=42)
svd.fit(X)
print(svd.explained_variance_ratio_)
print(svd.explained_variance_ratio_.sum())
print(svd.singular_values_)
输出结果如下:
python
[0.01570766 0.05122679 0.04998062 0.04795064 0.04539933]
0.21026503465070345
[35.24105443 4.5981613 4.54200434 4.44866153 4.32887456]
5.2 使用完全随机树的哈希特征转换
RandomTreesEmbedding
提供了一种将数据映射到非常高维、稀疏表示的方法,这可能有利于分类。这种映射是完全无监督的,而且非常有效。这个转换可以用于特征选择、数据压缩、非线性降维等任务,它可以帮助提取和表示数据中的结构信息,用于后续的机器学习任务。相邻的点往往共享树的同一片叶子,因此共享其哈希表示的大部分内容。这样就可以简单地根据截断的 SVD 转换后的数据的主成分来分离两个同心圆。

5.3 手写数字识别的嵌入(embedding)表示
嵌入的目的是将高维数据(在这里是 64 维的手写数字图像数据)映射到低维空间(通常是 2 维或 3 维),以便更好地理解和可视化数据的结构和特征。通过降低数据的维度,我们可以在更低的维度下观察和解释数据之间的关系,发现潜在的聚类、分布或其他模式。这可以帮助我们进行数据分析、可视化和模型构建等任务。在这个例子中,通过使用不同的嵌入方法,可以将手写数字数据集投影到二维空间,并观察不同数字之间的分布和关系。
在这里,截断 SVD(TruncatedSVD
)被用作一种降维方法来进行嵌入。通过将原始特征矩阵进行降维,将 64 维的手写数字图像数据映射到 2 维空间。降维后的结果可以用于可视化手写数字数据集,观察数字之间的分布和关系。

六、如何使用奇异值分解进行图像压缩?
奇异值分解(SVD)可以有效地应用于图像压缩,具体步骤如下:
- 导入图像:将图像文件导入程序中,并将其转换为数字矩阵。对于彩色图像,它通常有三个通道(红、绿、蓝),需要分别对每个通道进行处理。
- 计算奇异值分解 :对每个颜色通道的矩阵执行 SVD 操作,得到对应的 U \boldsymbol{U} U、 Σ \boldsymbol{\varSigma} Σ 和 V T \boldsymbol{V}^{\mathbf{T}} VT 矩阵。这需要单独对红、绿、蓝通道执行 SVD。
- 选择奇异值个数 :选择要使用的奇异值数量 k k k,这将直接影响压缩率和图像质量。较低的 k k k 值会产生更高的压缩率,但图像质量可能降低;较高的 k k k 值会保留更多图像细节,但压缩率较低。
- 截断奇异值矩阵 :截取每个通道的前 k k k 个奇异值,同时截取相应的 U \boldsymbol{U} U 和 V T \boldsymbol{V}^{\mathbf{T}} VT 矩阵的前 k k k 列,从而获得截断后的 U \boldsymbol{U} U、 Σ \boldsymbol{\varSigma} Σ 和 V T \boldsymbol{V}^{\mathbf{T}} VT 矩阵。
- 图像重建 :将截断后的 U \boldsymbol{U} U、 Σ \boldsymbol{\varSigma} Σ 和 V T \boldsymbol{V}^{\mathbf{T}} VT 矩阵相乘,得到近似的颜色通道矩阵。将每个通道的近似矩阵组合,形成近似的图像矩阵。这相当于只保留了原始图像数据中最重要的 k k k 个特征。
- 导出压缩后的图像:将近似的图像矩阵转换为相应的图像格式(如 JPEG、PNG 等)并导出。
使用 SVD 进行图像压缩的一个主要优点是它可以自适应地找到能够最大程度保留图像信息的最佳低维表示。然而,选择合适的 k k k 值在很大程度上取决于需要保留的图像质量和压缩率的权衡。
需要注意的是,SVD 压缩不是一种无损压缩方法,因为丢弃一部分奇异值会导致信息丢失。然而,在许多情况下,SVD 能够提供令人满意的图像质量和压缩率。
ref:
- 《机器学习高频面试题详解》2.4:降维算法-奇异值分解_牛客网
https://www.nowcoder.com/discuss/495703568469471232
这里是 Github 上一个大佬写的 SVD 进行图像压缩的代码,也使用图像的方式对 4.3 节的内容进行了生动的演示,比较清晰易懂。
七、奇异值分解在推荐系统中的应用
奇异值分解在推荐系统中的应用主要侧重于 基于模型的协同过滤。SVD 通过对用户项目评分矩阵进行分解,捕获用户和项目之间的潜在关系,从而预测用户对未评分项目的潜在评分,进行个性化推荐。
以下是在推荐系统中应用 SVD 的具体步骤:
- 构建评分矩阵:首先构建一个用户 - 项目评分矩阵,其中每行表示一个用户,每列表示一个项目,矩阵中的元素表示用户对项目的评分。通常,这个矩阵是稀疏的,因为用户只对部分项目进行了评分。
- 计算奇异值分解 :对评分矩阵进行奇异值分解,得到 U \boldsymbol{U} U、 Σ \boldsymbol{\varSigma} Σ 和 V T \boldsymbol{V}^{\mathbf{T}} VT。 U \boldsymbol{U} U 和 V \boldsymbol{V} V 分别表示左奇异向量和右奇异向量矩阵,而 Σ \boldsymbol{\varSigma} Σ 是一个对角矩阵,其对角线上的元素表示奇异值。
- 选择潜在因子数量 :选择一个减小维度的值 k k k,用于表示潜在因子的数量。选择较小的 k k k 值可以实现压缩评分矩阵,但过小的 k k k 可能损失较多信息。选择合适的 k k k 值需要在压缩程度和损失信息之间取得平衡。
- 重构低秩评分矩阵 :通过截取 U \boldsymbol{U} U、 Σ \boldsymbol{\varSigma} Σ 和 V T \boldsymbol{V}^{\mathbf{T}} VT 中前 k k k 个奇异值及相应的向量,重新构建近似评分矩阵。这个近似矩阵将捕获用户和项目之间的主要潜在关系,但使用较少的存储空间。
- 预测未评分项目:使用重构的评分矩阵来预测用户对尚未评分项目的评分。通过比较重构矩阵中用户行和项目列的值,可以估计用户对每个项目的潜在评分。
- 计算推荐:根据预测的评分,为每个用户推荐具有最高潜在评分的项目。
SVD 能有效找到原始评分矩阵中的潜在关系,从而实现高效的推荐。不过,在推荐系统实际应用中,奇异值分解可能需要面临大规模且稀疏的矩阵。
具体示例可参见《机器学习实战》第 14 章:260~266。
via:
- 奇异值分解(SVD分解)---------超详细讲解-CSDN博客
https://blog.csdn.net/weixin_48144140/article/details/134479023 - 超详细解释奇异值分解(SVD)【附例题和分析】-CSDN博客
https://blog.csdn.net/forest_LL/article/details/135343642 - 降维算法之奇异值分解SVD_奇异值分解降维-CSDN博客
https://blog.csdn.net/ZuHaohua/article/details/131101037