〖矩阵论笔记一〗奇异值分解(SVD) | 您所在的位置:网站首页 › 什么是矩阵奇异矩阵 › 〖矩阵论笔记一〗奇异值分解(SVD) |
奇异值分解(singular value decomposition, SVD)是一种矩阵因子分解方法,是线性代数的概念,它在优化问题、最小二乘问题、广义逆矩阵及统计学习中被广泛使用,成为其重要工具。 奇异值分解 1 定义与性质2 奇异值分解算法2.1 算法一2.2 算法二 3 奇异值分解代码 1 定义与性质 奇异值分解是指任意一个mxn矩阵,都可以表示为三个矩阵的乘积(因子分解)形式,分别是m阶正交矩阵、由降序排列的非负的对角线元素组成的mxn矩形对角矩阵和n阶正交矩阵。奇异值:设A∈ C r m ∗ n C^{m*n}_r Crm∗n(r>0),求出 A A T AA^T AAT或 A T A A^TA ATA的特征值, λ 1 ≥ λ 2 ≥ λ 3 ≥ . . . ≥ λ r > 0 , λ r + 1 = λ r + 2 = . . . λ n = 0 λ_1≥λ_2≥λ_3≥...≥λ_r>0,λ_{r+1}=λ_{r+2}=...λ_n=0 λ1≥λ2≥λ3≥...≥λr>0,λr+1=λr+2=...λn=0,则称σ= λ i \sqrtλ_i λ i(i=1,2,3…n)为A的奇异值,σ= λ i \sqrtλ_i λ i(i=1,2,3…r)为A的非零奇异值。 注: A A T AA^T AAT和 A T A A^TA ATA有相同的非零奇异值。矩阵奇异值分解将矩阵分解为三个矩阵的乘积: A = U Σ V T A=UΣV^T A=UΣVT 其中: U和V是正交单位矩阵(酉矩阵),Σ为对角矩阵(不一定是方阵)。 矩阵U称为左奇异矩阵,U的列向量称为左奇异向量,V为右奇异矩阵,V的列向量称为右奇异向量。 Σ=diag( σ 1 , σ 2 , . . . σ n σ_1,σ_2,...σ_n σ1,σ2,...σn),只有其主对角线有奇异值,其余均为0。 将上诉公式 A = U Σ V T A=UΣV^T A=UΣVT改为A=U ( Σ 1 O O O ) V T \begin{pmatrix} Σ_1&O\\O&O\end{pmatrix}V^T (Σ1OOO)VT,其中 Σ 1 Σ_1 Σ1=diag( σ 1 , σ 2 , . . . σ r σ_1,σ_2,...σ_r σ1,σ2,...σr) 2 奇异值分解算法例题:求矩阵A= ( 1 2 0 0 0 0 ) \begin{pmatrix} 1&2\\0&0\\0&0\end{pmatrix} ⎝⎛100200⎠⎞的奇异值分解。 2.1 算法一(1)求正交矩阵V 可求得矩阵 A T A = A^TA= ATA= ( 1 0 0 2 0 0 ) \begin{pmatrix}1&0&0\\2&0&0\end{pmatrix} (120000) ( 1 2 0 0 0 0 ) \begin{pmatrix}1&2\\0&0\\0&0\end{pmatrix} ⎝⎛100200⎠⎞= ( 1 2 2 4 ) \begin{pmatrix}1&2\\2&4\end{pmatrix} (1224)的特征值为 λ 1 = 5 , λ 2 = 0 λ_1=5,λ_2=0 λ1=5,λ2=0, 对应特征向量为 a 1 = ( 1 , 2 ) T a_1=(1,2)^T a1=(1,2)T, a 2 = ( 2 , − 1 ) T a_2=(2,-1)^T a2=(2,−1)T 非零奇异值为 σ = 5 σ=\sqrt5 σ=5 ,所以 Σ 1 Σ_1 Σ1=( 5 \sqrt5 5 ) 使得 V T ( A T A ) V V^T(A^TA)V VT(ATA)V= ( 5 0 0 0 ) \begin{pmatrix}5&0\\0&0\end{pmatrix} (5000)成立的正交矩阵 V = ( V 1 , V 2 V=(V_1,V_2 V=(V1,V2)= ( 1 5 2 5 2 5 − 1 5 ) \begin{pmatrix}\frac{1}{\sqrt5}&\frac{2}{\sqrt5}\\\frac{2}{\sqrt5}&-\frac{1}{\sqrt5}\end{pmatrix} (5 15 25 2−5 1) (2)求正交矩阵U U 1 = A V 1 Σ 1 − 1 U_1=AV_1Σ_1^{-1} U1=AV1Σ1−1= ( 1 2 0 0 0 0 ) \begin{pmatrix}1&2\\0&0\\0&0\end{pmatrix} ⎝⎛100200⎠⎞ ( 1 5 2 5 ) \begin{pmatrix}\frac{1}{\sqrt5}\\\frac{2}{\sqrt5}\end{pmatrix} (5 15 2) ( 1 5 ) \begin{pmatrix}\frac{1}{\sqrt5}\end{pmatrix} (5 1)= ( 1 0 0 ) \begin{pmatrix}1\\0\\0\end{pmatrix} ⎝⎛100⎠⎞ 取 U 2 = ( 0 0 1 0 0 1 ) U_2=\begin{pmatrix}0&0\\1&0\\0&1\end{pmatrix} U2=⎝⎛010001⎠⎞ ,将 U 1 U_1 U1扩张成 R 3 R^3 R3的标准正交基 U = ( U 1 , U 2 ) U=(U_1,U_2) U=(U1,U2)= ( 1 0 0 0 1 0 0 0 1 ) \begin{pmatrix}1&0&0\\0&1&0\\0&0&1\end{pmatrix} ⎝⎛100010001⎠⎞ (3)分解 则A的奇异值分解为A=U ( Σ 1 O O O ) V T \begin{pmatrix} Σ_1&O\\O&O\end{pmatrix}V^T (Σ1OOO)VT= ( 1 0 0 0 1 0 0 0 1 ) \begin{pmatrix}1&0&0\\0&1&0\\0&0&1\end{pmatrix} ⎝⎛100010001⎠⎞ ( 5 0 0 0 0 0 ) \begin{pmatrix}\sqrt5&0\\0&0\\0&0\end{pmatrix} ⎝⎛5 00000⎠⎞ ( 1 5 2 5 2 5 − 1 5 ) \begin{pmatrix}\frac{1}{\sqrt5}&\frac{2}{\sqrt5}\\\frac{2}{\sqrt5}&-\frac{1}{\sqrt5}\end{pmatrix} (5 15 25 2−5 1) 2.2 算法二(1)求正交矩阵U 可求得矩阵 A A T = AA^T= AAT= ( 1 2 0 0 0 0 ) \begin{pmatrix}1&2\\0&0\\0&0\end{pmatrix} ⎝⎛100200⎠⎞ ( 1 0 0 2 0 0 ) \begin{pmatrix}1&0&0\\2&0&0\end{pmatrix} (120000)= ( 5 0 0 0 0 0 0 0 0 ) \begin{pmatrix}5&0&0\\0&0&0\\0&0&0\end{pmatrix} ⎝⎛500000000⎠⎞的特征值为 λ 1 = 5 , λ 2 = λ 3 = 0 λ_1=5,λ_2=λ_3=0 λ1=5,λ2=λ3=0,非零奇异值为 σ = 5 σ=\sqrt5 σ=5 ,所以 Σ 1 = ( 5 Σ_1=(\sqrt5 Σ1=(5 ) 求得特征向量 a 1 = ( 1 , 0 , 0 ) T a_1=(1,0,0)^T a1=(1,0,0)T, a 2 = ( 0 , 1 , 0 ) T a_2=(0,1,0)^T a2=(0,1,0)T, a 3 = ( 0 , 0 , 1 ) T a_3=(0,0,1)^T a3=(0,0,1)T 则 U = ( 1 0 0 0 1 0 0 0 1 ) U=\begin{pmatrix}1&0&0\\0&1&0\\0&0&1\end{pmatrix} U=⎝⎛100010001⎠⎞ (2)求正交矩阵V 可求得矩阵 A T A = A^TA= ATA= ( 1 0 0 2 0 0 ) \begin{pmatrix}1&0&0\\2&0&0\end{pmatrix} (120000) ( 1 2 0 0 0 0 ) \begin{pmatrix}1&2\\0&0\\0&0\end{pmatrix} ⎝⎛100200⎠⎞= ( 1 2 2 4 ) \begin{pmatrix}1&2\\2&4\end{pmatrix} (1224)的特征值为 λ 1 = 5 , λ 2 = 0 λ_1=5,λ_2=0 λ1=5,λ2=0, 对应特征向量为 a 1 = ( 1 , 2 ) T a_1=(1,2)^T a1=(1,2)T, a 2 = ( 2 , − 1 ) T a_2=(2,-1)^T a2=(2,−1)T 使得 V T ( A T A ) V V^T(A^TA)V VT(ATA)V= ( 5 0 0 0 ) \begin{pmatrix}5&0\\0&0\end{pmatrix} (5000)成立的正交矩阵 V = ( V 1 , V 2 V=(V_1,V_2 V=(V1,V2)= ( 1 5 2 5 2 5 − 1 5 ) \begin{pmatrix}\frac{1}{\sqrt5}&\frac{2}{\sqrt5}\\\frac{2}{\sqrt5}&-\frac{1}{\sqrt5}\end{pmatrix} (5 15 25 2−5 1) (3)分解 则A的奇异值分解为A=U ( Σ 1 O O O ) V T \begin{pmatrix} Σ_1&O\\O&O\end{pmatrix}V^T (Σ1OOO)VT= ( 1 0 0 0 1 0 0 0 1 ) \begin{pmatrix}1&0&0\\0&1&0\\0&0&1\end{pmatrix} ⎝⎛100010001⎠⎞ ( 5 0 0 0 0 0 ) \begin{pmatrix}\sqrt5&0\\0&0\\0&0\end{pmatrix} ⎝⎛5 00000⎠⎞ ( 1 5 2 5 2 5 − 1 5 ) \begin{pmatrix}\frac{1}{\sqrt5}&\frac{2}{\sqrt5}\\\frac{2}{\sqrt5}&-\frac{1}{\sqrt5}\end{pmatrix} (5 15 25 2−5 1) 我觉得算法二套路简单,没有算法一那么花里胡哨,但所得结果需要检验。 3 奇异值分解代码python代码:直接调用numpy的svd() import numpy as np A = np.array([[1,2],[0,0],[0,0]]) U,S,VT = np.linalg.svd(A) print("返回结果:",np.linalg.svd(A)) print("U=",U) print("S=",S) print("V^T=",VT)输出 这时我们发现矩阵S只显示对角元素的值,而矩阵中其它元素因为是0而被省略了。所以返回的时候,作为一维矩阵返回。如果我们想让矩阵S完整显示出来,可以添加以下代码进行处理 S2 = np.zeros(A.shape,S.dtype) np.fill_diagonal(S2,S) print("处理后的S=") print(S2)输出: 说明: np.fill_diagonal(S2, S)的作用是将矩阵S2的对角元素设置为S的元素 np.zeros(A.shape,S.dtype)的作用是返回来一个和矩阵A形状相同的、和矩阵S数据类型相同的、用0填充的数组。 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |