SVD奇异值分解

前言

之前的博客:特征值和特征向量,讨论了矩阵的特征分解相关的概念。公式如下所示:

A=WΣWT(1) (1) A = W Σ W T

但是特征分解有一个限制条件,即 A A 必须是方阵,如果不是方阵则上式就不能使用了。为了在A矩阵不是方阵时,即行列数不等时,也能分解矩阵的特征,就要用到SVD了。

定义

SVD的作用也是对矩阵进行分解,但是与特征分解不同,SVD 不要求待分解的矩阵必须是方阵。

假设给定了某一个矩阵 A A ,其维度是m×n。那么,定义SVD为如下式:

A=UΣVT(2) (2) A = U Σ V T

其中, U U 是一个m×m的矩阵, Σ Σ 是一个 m×n m × n 的矩阵, V V 是一个n×n的矩阵。 Σ Σ 中,除了对角线上的元素之外,其余元素的值都为0,主对角线上的每个元素都被称为奇异值。另外, U U V都是经过标准化之后的,即满足: UTU=I U T U = I VTV=I V T V = I

求解SVD过程

求解SVD的过程可以分解为,分别求解 U,Σ,V U , Σ , V 的过程。

A A 的转置与A作矩阵乘法,那么会得到 n×n n × n 的方阵 ATA A T A 。这样就可以对 ATA A T A 作特征分解了,求得的特征值与特征向量满足下式:

(ATA)vj=λjvj(3) (3) ( A T A ) v j = λ j v j

得到了 ATA A T A n n 个特征值λj以及对应的 n n 个特征向量vj。将这 n n 个特征向量vj组合成一个 n×n n × n 的矩阵 V V ,就得到了SVD公式里面的矩阵V了。通常,称 V V 中的特征向量vj为右奇异向量。

A A A的转置作矩阵乘法,则会得到 m×m m × m 的方阵 AAT A A T 。接着可以对 AAT A A T 作特征分解,求出特征值与特征向量满足下式:

(AAT)ui=λui(4) (4) ( A A T ) u i = λ u i

得到了 AAT A A T n n 个特征值λi以及对应的 n n 个特征向量ui。将这 n n 个特征向量ui组合成一个 m×m m × m 的矩阵 U U ,就得到了SVD公式里面的矩阵U了。通常,称 U U 中的特征向量ui为左奇异向量。

已经求到了 U U V了,还剩下 Σ Σ 。注意到, Σ Σ 除了对角线上是奇异值之外,其余位置都是0,那么只需要求出每个奇异值 σi σ i 就k了。

注意到:

A=UΣVTAV=UΣVTVAV=UΣAvk=σkukσk=Avkuk(5) (5) A = U Σ V T ⇒ A V = U Σ V T V ⇒ A V = U Σ ⇒ A v k = σ k u k ⇒ σ k = A v k u k

套用上式,即可求出每个奇异值 σk σ k ,得到奇异值矩阵 Σ Σ

再简要证明一下,方阵A A^T的特征向量组成的矩阵就是SVD中的 U U 矩阵,而方阵A A^T的特征向量组成的矩阵就是SVD中的V矩阵。

{A=UΣVTAT=VΣTUT{ATA=VΣTUTUΣVT=VΣTΣVTAAT=UΣVTVΣTUT=UΣΣTUT(6) (6) { A = U Σ V T A T = V Σ T U T ⇒ { A T A = V Σ T U T U Σ V T = V Σ T Σ V T A A T = U Σ V T V Σ T U T = U Σ Σ T U T

推导时用到了 UTU=I U T U = I VTV=I V T V = I 。注意到 ΣTΣ Σ T Σ 的维数为 n×n n × n ΣΣT Σ Σ T 的维数为 m×m m × m ,由于奇异值矩阵 Σ Σ 只有对角线上有元素,其余位置都是0,所以很容易证明 ΣTΣ Σ T Σ ΣΣT Σ Σ T 也是奇异值矩阵。不难看出 AAT A A T ATA A T A 的特征向量组成的矩阵分别是SVD中 U U V矩阵了吧!

不难看出 ΣTΣ Σ T Σ ΣΣT Σ Σ T 的特征值矩阵等于奇异值矩阵 Σ Σ 的平方。即有下式关系:

σk=λk(7) (7) σ k = λ k

我们可以通过求解 σij=Avjui σ i j = A v j u i 来计算奇异值,也可以通过求出 AAT A A T 或的 ATA A T A 特征值开平方根得到奇异值。

计算举例

对矩阵 A A 作奇异值分解:

A=[101101]

求出 AT A T

AT=[101101] A T = [ 1 1 0 0 1 1 ]

接着可以求出 AAT A A T ATA A T A

AAT=110121011ATA=[2112] { A A T = [ 1 1 0 1 2 1 0 1 1 ] A T A = [ 2 1 1 2 ]

先求出 AAT A A T 的特征值和特征向量:(注,将 λ λ 按照从大到小的顺序标号)

手算是套用公式 Det(AATλI)=0 D e t ( A A T − λ I ) = 0 求出特征值与特征矩阵,这里直接用matlab的eig函数求出结果了。

png

λ1=3 λ 1 = 3 u1=0.40820.81650.4082 u 1 = [ 0.4082 0.8165 0.4082 ] λ2=1 λ 2 = 1 u2=0.707100.7071 u 2 = [ − 0.7071 0 0.7071 ] λ3=0 λ 3 = 0 u3=0.57740.57740.5774 u 3 = [ 0.5774 − 0.5774 0.5774 ]

再求出 ATA A T A 的特征值和特征向量:(求解方法同上,省略)

λ1=3 λ 1 = 3 v1=[0.70710.7071] v 1 = [ 0.7071 0.7071 ] λ2=1 λ 2 = 1 v2=[0.70710.7071] v 2 = [ − 0.7071 0.7071 ]

套用公式 σk=Avkuk,k=1,2 σ k = A v k u k , k = 1 , 2 求解奇异值:

σ10.40820.81650.4082=110011[0.70710.7071]σ1=1.732 σ 1 [ 0.4082 0.8165 0.4082 ] = [ 1 0 1 1 0 1 ] [ 0.7071 0.7071 ] ⇒ σ 1 = 1.732

σ2=0.707100.7071=110011[0.70710.7071]σ2=1 σ 2 = [ − 0.7071 0 0.7071 ] = [ 1 0 1 1 0 1 ] [ − 0.7071 0.7071 ] ⇒ σ 2 = 1

当然也可以直接使用 σk=λk σ k = λ k 求出奇异值, AAT A A T ATA A T A 的特征值都为 3 3 1 0 0 没有意义,所以不讨论),所以奇异值分别为3 1 1 ,这样计算更简单。

最终得到的奇异值分解为:

A=UΣVT=[0.40820.70710.57740.816500.57740.40820.70710.5774][1.73200100][0.70710.70710.70710.7071]

SVD的性质

对于奇异值,它与特征分解中的特征值类似。在奇异值矩阵 Σ Σ 中,奇异值是按照从大到小排列,而奇异值减小的也十分快,通常前面的10%的奇异值就占掉了所有奇异值之和的90%以上。因此,我们可以使用最大的 k k 个奇异值和对应的左右奇异向量来近似表示矩阵,如下式所示:

(8)A(m×n)=U(m×m)Σ(m×n)V(n×n)TU(m×k)Σ(k×k)V(k×n)T

上式中的下标表示那个矩阵的维数。

如果 k k 是一个较小的数,而n是一个较大的数,SVD的作用就体现出来了,因为一个较大的矩阵 A A 可以用三个较小的矩阵U(m×k),Σ(k×k),V(k×n)T来表示。

由于这个特殊的性质,SVD可以用于PCA降维等,来压缩数据和去噪。

参考资料:

1、https://www.cnblogs.com/pinard/p/6251584.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值