奇异值分解(Singular Value Decomposition,SVD)

  • 一种矩阵因子分解方法
  • 矩阵的奇异值分解一定存在,但不唯一
  • 奇异值分解可以看作是矩阵数据压缩的一种方法,即用因子分解的方式近似地表示原始矩阵,这种近似是在平方损失意义下的最优近似

1. 奇异值分解的定义与性质

1.1 定义

A m × n = U Σ V T U U T = I m V V T = I n Σ = d i a g ( σ 1 , σ 2 , . . . , σ p ) σ 1 σ 2 . . . σ p 0 p = min ( m , n ) A_{m \times n} = U \Sigma V^T\\ UU^T=I_m\\ VV^T=I_n\\ \Sigma=diag(\sigma_1,\sigma_2,...,\sigma_p) \\ \sigma_1\ge \sigma_2 \ge...\ge\sigma_p \ge0\\ p=\min(m,n)

  • U Σ V T U \Sigma V^T 称为矩阵 A A 的奇异值分解(SVD), U U m m 正交矩阵 V V n n 阶正交矩阵, Σ \Sigma m × n m \times n 的对角矩阵
  • σ i \sigma_i 称为矩阵 A A 的奇异值
  • U U 的列向量,左奇异向量
  • V V 的列向量,右奇异向量

1.2 两种形式

1.2.1 紧奇异值分解

上面的SVD称为:完全SVD
A m × n = U r Σ r V r T A_{m \times n} = U_r \Sigma_r V_r^T
紧奇异值分解,仅由前 r r 列得到,对角矩阵 Σ r \Sigma_r 的秩与原始矩阵 A A 的秩相等

1.2.2 截断奇异值分解

只取最大的 k 个奇异值 ( k < r , r ) (k < r, r 为矩阵的秩) 对应的部分,就得到矩阵的截断奇异值分解

  • 实际应用中提到的,经常指的 截断SVD

A m × n U k Σ k V k T , 0 < k < R a n k ( A ) A_{m \times n} \approx U_k \Sigma_k V_k^T,\quad 0<k<Rank(A)

  • 在实际应用中,常常需要对矩阵的数据进行压缩,将其近似表示,奇异值分解提供了一种方法
  • 奇异值分解是在平方损失(弗罗贝尼乌斯范数)意义下对矩阵的最优近似
  • 奇异值分解—>无损压缩
  • 截断奇异值分解—>有损压缩

1.3 几何解释

矩阵的SVD也可以看作是将其 对应的线性变换 分解为 旋转变换、缩放变换及旋转变换的组合。
这个变换的组合一定存在。
在这里插入图片描述

1.4 主要性质

  • (1) 由 A = U Σ V T A=U\Sigma V^T

A T A = ( U Σ V T ) T ( U Σ V T ) = V ( Σ T Σ ) V T A A T = ( U Σ V T ) ( U Σ V T ) T = U ( Σ Σ T ) U T A^TA=(U\Sigma V^T)^T(U\Sigma V^T)=V(\Sigma^T\Sigma)V^T\\ AA^T=(U\Sigma V^T)(U\Sigma V^T)^T=U(\Sigma\Sigma^T)U^T
对称矩阵 A T A A^TA A A T AA^T 的特征分解 可由矩阵 A A 的奇异值分解矩阵表示

  • (2)
    A V = U Σ A v j = σ j u j , j = 1 , 2 , . . . , n A T U = V Σ T A T u j = σ j v j , j = 1 , 2 , . . . , n ; A T u j = 0 , j = n + 1 , n + 2 , . . . , m AV=U\Sigma \Rightarrow Av_j=\sigma_ju_j,j=1,2,...,n\\ A^TU=V\Sigma^T \Rightarrow A^Tu_j=\sigma_jv_j,j=1,2,...,n;A^Tu_j=0,j=n+1,n+2,...,m

  • (3) SVD奇异值 σ 1 , σ 1 , . . . , σ n \sigma_1,\sigma_1,...,\sigma_n 唯一的,但矩阵 U , V U,V 不唯一

  • (4) 矩阵 A A Σ \Sigma 的秩相等,等于正奇异值 σ i \sigma_i 的个数 r r

  • (5) 矩阵 A A r r 个右奇异向量 v 1 , v 2 , . . . , v r v_1,v_2,...,v_r 构成 A T A^T 的值域 的一组标准正交基;
    矩阵 A A n r n-r 个右奇异向量 v r + 1 , v r + 2 , . . . , v n v_r+1,v_r+2,...,v_n 构成 A A 零空间 的一组标准正交基;
    矩阵 A A r r 个左奇异向量 u 1 , u 2 , . . . , u r u_1,u_2,...,u_r 构成 A A 的值域 的一组标准正交基;
    矩阵 A A m r m-r 个左奇异向量 u r + 1 , u r + 2 , . . . , u m u_r+1,u_r+2,...,u_m 构成 A T A^T 的零空间 的一组标准正交基

2. 奇异值分解与矩阵近似

2.1 弗罗贝尼乌斯范数

奇异值分解也是一种矩阵近似的方法,这个近似是在弗罗贝尼乌斯范数(Frobenius norm)意义下的近似
矩阵的弗罗贝尼乌斯范数是 向量的L2范数的直接推广,对应着机器学习中的平方损失函数

设矩阵 A = [ a i j ] m × n A=[a_{ij}]_{m \times n} , 其弗罗贝尼乌斯范数为: A F = ( i = 1 m j = 1 n ( a i j ) 2 ) 1 / 2 ||A||_F = \bigg( \sum\limits_{i=1}^m \sum\limits_{j=1}^n(a_{ij})^2\bigg)^{1/2}

假设 A A 的奇异值分解为 A = U Σ V T A=U\Sigma V^T ,其中对角矩阵 Σ = d i a g ( σ 1 , σ 2 , . . . , σ p ) \Sigma=diag(\sigma_1,\sigma_2,...,\sigma_p) ,则 A F = ( σ 1 2 + σ 2 2 + . . . + σ n 2 ) 1 / 2 ||A||_F = \bigg(\sigma_1^2+\sigma_2^2+...+\sigma_n^2\bigg)^{1/2}

2.2 矩阵的最优近似

奇异值分解 是在平方损失(弗罗贝尼乌斯范数)意义下对矩阵的最优近似,即数据压缩

  • 奇异值分解:是在弗罗贝尼乌斯范数意义下的无损压缩
  • 截断奇异值分解:是有损压缩。截断奇异值分解得到的矩阵的秩为k,通常远小于原始矩阵的秩r,所以是由低秩矩阵实现了对原始矩阵的压缩

2.3 矩阵的外积展开式

矩阵 A A 的奇异值分解 U Σ V T U\Sigma V^T 也可以由外积形式表示

  • A A 的奇异值分解看成矩阵 U Σ U\Sigma V T V^T 的乘积,将 U Σ U\Sigma 按列向量分块,将 V T V^T 按行向量分块,即得
    在这里插入图片描述
    在这里插入图片描述

3. 奇异值分解Python计算

import numpy as np
a = np.random.randint(-10,10,(4, 3)).astype(float)
print(a)
print("-----------------")
u, sigma, vT = np.linalg.svd(a)
print(u)
print("-----------------")
print(sigma)
print("-----------------")
print(vT)
print("-----------------")
# 将sigma 转成矩阵
SigmaMat = np.zeros((4,3))
SigmaMat[:3, :3] = np.diag(sigma)
print(SigmaMat)
print("------验证-------")
a_ = np.dot(u, np.dot(SigmaMat, vT))
print(a_)

结果:

[[-6.  8.  9.]
 [ 6.  8. -8.]
 [ 6. -1.  2.]
 [ 6.  9. -9.]]
-----------------
[[-0.30430452  0.93673281  0.17295875 -0.00395842]
 [ 0.64134399  0.19762952  0.04109474 -0.74022408]
 [ 0.06410812 -0.16033168  0.98267774  0.0672931 ]
 [ 0.70140345  0.24034966 -0.05235412  0.66897256]]
-----------------
[19.56867211 12.83046891  6.0370638 ]
-----------------
[[ 0.52466311  0.45709993 -0.71818401]
 [-0.30821258  0.88838353  0.34026417]
 [ 0.79355758  0.04282928  0.60698602]]
-----------------
[[19.56867211  0.          0.        ]
 [ 0.         12.83046891  0.        ]
 [ 0.          0.          6.0370638 ]
 [ 0.          0.          0.        ]]
------验证-------
[[-6.  8.  9.]
 [ 6.  8. -8.]
 [ 6. -1.  2.]
 [ 6.  9. -9.]]
发布了893 篇原创文章 · 获赞 2667 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/qq_21201267/article/details/105624955