SVD矩阵奇异值分解

本文介绍了SVD(奇异值分解)在处理稀疏矩阵中的应用,通过分解为正交矩阵、对角矩阵和另一个矩阵的乘积,实现矩阵的尺寸压缩并保持重要信息。文中详细阐述了特征值和特征向量的概念,以及如何通过SVD对非方阵进行分解的过程。
摘要由CSDN通过智能技术生成

SVD矩阵奇异值分解

前言

为了使计算机理解实际问题体中目标各项特征,通常使用方阵来储存这些特征值,例如一个人的年龄,身高,体重可以使用 [ 32 , 185 , 75 ] [32,185,75] [32,185,75]进行表示。但是对于有些问题,其特征矩阵是稀疏矩阵,矩阵内部许多向量都为0,例如矩阵 O O O。这即造成储存空间的浪费,同时消耗了计算资源,那能不能即压缩矩阵的大小,且保留矩阵的重要信息呢?这时候可以用到SVD矩阵奇异值分解

O = [ 0 0 ⋯ 0 0 0 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ 0 ] O=\begin{bmatrix} 0 & 0 & \cdots & 0 \\ 0 & 0 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 0 \end{bmatrix} O= 000000000

SVD矩阵奇异值分解

SVD可以将任意一个矩阵分解为一个正交矩阵、一个对焦矩阵和另外一个对角矩阵的乘积。对角矩阵的对角元称为矩阵的奇异值,可以证明,奇异值总是大于等于0的。当对角矩阵的奇异值按从大到小排列时,SVD分解是唯一的。

特征值与特征向量

理解SVD之前必需搞懂两个概念,特征值与特征向量,假设存在一个 n ∗ n n*n nn矩阵 A A A,存在一个 n n n维矩阵 x x x和一个特征值 λ \lambda λ,使得式 ( 1 ) (1) (1)成立。

A x = λ x (1) Ax = \lambda x\tag{1} Ax=λx(1)

λ \lambda λ即为 A A A的特征值, x x x A A A的特征向量。那如何求取矩阵 A A A的特征值和特征向量呢?计算如下:

A x − λ x = 0 ( A − λ E ) x = 0 \begin{align} Ax-\lambda x = 0\tag{2} \\ (A - \lambda E)x = 0 \tag{3}\\ \end{align} Axλx=0(AλE)x=0(2)(3)

如果 ( 3 ) (3) 3式成立,即求:

∣ A − λ E ∣ = 0 (4) |A- \lambda E | = 0 \tag{4} AλE=0(4)

即可求出了矩阵 A A A n n n个特征值 λ 1 ⩽ λ 2 ⩽ . . . ⩽ λ n − 1 ⩽ λ n \lambda_1 \leqslant \lambda_2 \leqslant ... \leqslant \lambda_{n-1} \leqslant \lambda_n λ1λ2...λn1λn ,以及这 n n n个特征值所对应的特征向量 x 1 , x 2 , . . . , x n − 1 , x n x_1,x_2,...,x_{n-1},x_n x1,x2,...,xn1,xn

最后矩阵 A A A就可以进行SVD分解,用 ( 5 ) (5) 5式进行表示:

A = W ∑ W − 1 (5) A= W\sum W^{-1} \tag{5} A=WW1(5)

其中 W W W是这 n n n个特征向量所张成的 n × n n×n n×n维矩阵, W = [ x 1 , x 2 , . . . , x n ] W = [x_1,x_2,...,x_n] W=[x1,x2,...,xn],而 ∑ \sum 为这 n n n个特征值为主对角线的 n × n n×n n×n维矩阵, O = [ σ 1 0 ⋯ 0 0 σ 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ σ n ] O=\begin{bmatrix}\sigma_1 & 0 & \cdots & 0 \\0 & \sigma_2& \cdots & 0 \\\vdots & \vdots & \ddots & \vdots \\0 & 0 & \cdots &\sigma_n\end{bmatrix} O= σ1000σ2000σn

W的这n个特征向量会进行标准化,即满足 ∣ ∣ W i ∣ ∣ 2 = 1 ||W_i||^2=1 ∣∣Wi2=1 ,或者 w i t w i = 1 w^t_i w_i=1 witwi=1 ,此时W的n个特征向量为标准正交基,满足 W T W = I W^TW = I WTW=I ,即 W T = W − 1 W^T = W^{-1} WT=W1 ,也就是说W为酉矩阵。

这样我们的特征分解表达式可以写成

A = W ∑ W T (6) A= W\sum W^{T} \tag{6} A=WWT(6)

注意到要进行特征分解,矩阵A必须为方阵。那么如果A不是方阵,即行和列不相同时,我们还可以对矩阵进行分解吗?答案是可以,此时我们的SVD登场了。

非方阵进行求解

假设 A A A是一个 m ∗ n m*n mn的矩阵,那么定义A都SVD分解为式 ( 6 ) (6) 6

A = U ∑ V T (7) A= U\sum V^{T} \tag{7} A=UVT(7)

其中 U U U是一个 m ∗ m* m​* m m m的矩阵, ∑ \sum 是一个 m ∗ m* m n n n的矩阵, V V V是一个 n ∗ n n*n nn的矩阵,U*和 V 都是酉矩阵,即满足 U U T = V V T = I UU^T = VV^T = I UUT=VVT=I。那如何求解这三个矩阵呢?

求解矩阵 V V V

如果我们将A的转置和A做矩阵乘法,那么会得到 n × n n×n n×n的一个方阵 A T A A^TA ATA,因为 A T = V ∑ T U T A^{T}= V\sum^{T} U^{T} AT=VTUT, U U T = I UU^T = I UUT=I。故 A T A = V U U T ∑ 2 V T = V ∑ 2 V T A^TA =V UU^T \sum^2 V^{T} =V\sum^2 V^{T} ATA=VUUT2VT=V2VT,求解特征值和特征向量满足下式(8):

( A T A ) x i = λ i x i (8) (A^TA)x_i = \lambda_i x_i \tag{8} ATAxi=λixi(8)

所以矩阵 V = [ x 1 , x 2 , . . . , x n ] , σ i = λ i V = [x_1,x_2,...,x_n],\sigma_i = \sqrt{\lambda_i} V=[x1,x2,...,xn],σi=λi .

求解矩阵 U U U

求解矩阵 U U U与求解矩阵V类似,只不过求解 A A T AA^T AAT,不在进行赘述.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值