奇异值分解(Singular Value Decomposition,SVD)
文章目錄
- 1. 奇異值分解的定義與性質
- 1.1 定義
- 1.2 兩種形式
- 1.2.1 緊奇異值分解
- 1.2.2 截斷奇異值分解
- 1.3 幾何解釋
- 1.4 主要性質
- 2. 奇異值分解與矩陣近似
- 2.1 弗羅貝尼烏斯范數
- 2.2 矩陣的最優近似
- 2.3 矩陣的外積展開式
- 3. 奇異值分解Python計算
- 4. SVD應用
- 一種矩陣因子分解方法
- 矩陣的奇異值分解一定存在,但不唯一
- 奇異值分解可以看作是矩陣數據壓縮的一種方法,即用因子分解的方式近似地表示原始矩陣,這種近似是在平方損失意義下的最優近似
1. 奇異值分解的定義與性質
1.1 定義
Am×n=UΣVTUUT=ImVVT=InΣ=diag(σ1,σ2,...,σp)σ1≥σ2≥...≥σp≥0p=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)Am×n?=UΣVTUUT=Im?VVT=In?Σ=diag(σ1?,σ2?,...,σp?)σ1?≥σ2?≥...≥σp?≥0p=min(m,n)
- UΣVTU \Sigma V^TUΣVT 稱為矩陣 AAA 的奇異值分解(SVD),UUU 是 mmm 階正交矩陣, VVV 是 nnn 階正交矩陣,Σ\SigmaΣ 是 m×nm \times nm×n 的對角矩陣
- σi\sigma_iσi? 稱為矩陣 AAA 的奇異值
- UUU 的列向量,左奇異向量
- VVV 的列向量,右奇異向量
1.2 兩種形式
1.2.1 緊奇異值分解
上面的SVD稱為:完全SVD
Am×n=UrΣrVrTA_{m \times n} = U_r \Sigma_r V_r^TAm×n?=Ur?Σr?VrT?
緊奇異值分解,僅由前 rrr 列得到,對角矩陣 Σr\Sigma_rΣr? 的秩與原始矩陣 AAA 的秩相等
1.2.2 截斷奇異值分解
只取最大的 k 個奇異值 (k<r,r為矩陣的秩)(k < r, r 為矩陣的秩)(k<r,r為矩陣的秩) 對應的部分,就得到矩陣的截斷奇異值分解
- 實際應用中提到的,經常指的 截斷SVD
Am×n≈UkΣkVkT,0<k<Rank(A)A_{m \times n} \approx U_k \Sigma_k V_k^T,\quad 0<k<Rank(A)Am×n?≈Uk?Σk?VkT?,0<k<Rank(A)
- 在實際應用中,常常需要對矩陣的數據進行壓縮,將其近似表示,奇異值分解提供了一種方法
- 奇異值分解是在平方損失(弗羅貝尼烏斯范數)意義下對矩陣的最優近似
- 緊奇異值分解—>無損壓縮
- 截斷奇異值分解—>有損壓縮
1.3 幾何解釋
矩陣的SVD也可以看作是將其 對應的線性變換 分解為 旋轉變換、縮放變換及旋轉變換的組合。
這個變換的組合一定存在。
1.4 主要性質
- (1) 由 A=UΣVTA=U\Sigma V^TA=UΣVT 有
ATA=(UΣVT)T(UΣVT)=V(ΣTΣ)VTAAT=(UΣVT)(UΣVT)T=U(ΣΣT)UTA^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^TATA=(UΣVT)T(UΣVT)=V(ΣTΣ)VTAAT=(UΣVT)(UΣVT)T=U(ΣΣT)UT
對稱矩陣 ATAA^TAATA 和 AATAA^TAAT 的特征分解 可由矩陣 AAA 的奇異值分解矩陣表示
-
(2)
AV=UΣ?Avj=σjuj,j=1,2,...,nATU=VΣT?ATuj=σjvj,j=1,2,...,n;ATuj=0,j=n+1,n+2,...,mAV=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,...,mAV=UΣ?Avj?=σj?uj?,j=1,2,...,nATU=VΣT?ATuj?=σj?vj?,j=1,2,...,n;ATuj?=0,j=n+1,n+2,...,m -
(3) SVD奇異值 σ1,σ1,...,σn\sigma_1,\sigma_1,...,\sigma_nσ1?,σ1?,...,σn? 是唯一的,但矩陣 U,VU,VU,V 不唯一
-
(4) 矩陣 AAA 和 Σ\SigmaΣ 的秩相等,等于正奇異值 σi\sigma_iσi? 的個數 rrr
-
(5) 矩陣 AAA 的 rrr 個右奇異向量 v1,v2,...,vrv_1,v_2,...,v_rv1?,v2?,...,vr? 構成 ATA^TAT 的值域 的一組標準正交基;
矩陣 AAA 的 n?rn-rn?r 個右奇異向量 vr+1,vr+2,...,vnv_r+1,v_r+2,...,v_nvr?+1,vr?+2,...,vn? 構成 AAA 的零空間 的一組標準正交基;
矩陣 AAA 的 rrr 個左奇異向量 u1,u2,...,uru_1,u_2,...,u_ru1?,u2?,...,ur? 構成 AAA 的值域 的一組標準正交基;
矩陣 AAA 的 m?rm-rm?r 個左奇異向量 ur+1,ur+2,...,umu_r+1,u_r+2,...,u_mur?+1,ur?+2,...,um? 構成 ATA^TAT 的零空間 的一組標準正交基
2. 奇異值分解與矩陣近似
2.1 弗羅貝尼烏斯范數
奇異值分解也是一種矩陣近似的方法,這個近似是在弗羅貝尼烏斯范數(Frobenius norm)意義下的近似
矩陣的弗羅貝尼烏斯范數是 向量的L2范數的直接推廣,對應著機器學習中的平方損失函數
設矩陣 A=[aij]m×nA=[a_{ij}]_{m \times n}A=[aij?]m×n?, 其弗羅貝尼烏斯范數為:∣∣A∣∣F=(∑i=1m∑j=1n(aij)2)1/2||A||_F = \bigg( \sum\limits_{i=1}^m \sum\limits_{j=1}^n(a_{ij})^2\bigg)^{1/2}∣∣A∣∣F?=(i=1∑m?j=1∑n?(aij?)2)1/2
假設 AAA 的奇異值分解為 A=UΣVTA=U\Sigma V^TA=UΣVT ,其中對角矩陣 Σ=diag(σ1,σ2,...,σp)\Sigma=diag(\sigma_1,\sigma_2,...,\sigma_p)Σ=diag(σ1?,σ2?,...,σp?),則 ∣∣A∣∣F=(σ12+σ22+...+σn2)1/2||A||_F = \bigg(\sigma_1^2+\sigma_2^2+...+\sigma_n^2\bigg)^{1/2}∣∣A∣∣F?=(σ12?+σ22?+...+σn2?)1/2
2.2 矩陣的最優近似
奇異值分解 是在平方損失(弗羅貝尼烏斯范數)意義下對矩陣的最優近似,即數據壓縮
- 緊奇異值分解:是在弗羅貝尼烏斯范數意義下的無損壓縮
- 截斷奇異值分解:是有損壓縮。截斷奇異值分解得到的矩陣的秩為k,通常遠小于原始矩陣的秩r,所以是由低秩矩陣實現了對原始矩陣的壓縮
2.3 矩陣的外積展開式
矩陣 AAA 的奇異值分解 UΣVTU\Sigma V^TUΣVT 也可以由外積形式表示
- 將 AAA 的奇異值分解看成矩陣 UΣU\SigmaUΣ 和 VTV^TVT 的乘積,將 UΣU\SigmaUΣ 按列向量分塊,將 VTV^TVT 按行向量分塊,即得
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.]]4. SVD應用
請參考:基于奇異值分解(SVD)的圖片壓縮實踐
總結
以上是生活随笔為你收集整理的奇异值分解(Singular Value Decomposition,SVD)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 519. 随机翻转矩阵
- 下一篇: LeetCode 281. 锯齿迭代器(