文章目录
前言
我们知道,只有方阵才有特征值和特征向量,因此只有方阵才能特征值分解, 那么非方阵怎么办?
奇异值和奇异值分解
特征值分解只适用于方阵, 奇异值分解适用于任意的矩阵.
奇异值分解 𝑆𝑖𝑛𝑔𝑢𝑙𝑎𝑟 𝑣𝑎𝑙𝑢𝑒 𝑑𝑒𝑐𝑜𝑚𝑝𝑜𝑠𝑖𝑡𝑖𝑜𝑛,𝑆𝑉𝐷 ,一种重要的矩阵分解方法以一种方便快捷的方式将我们感兴趣的矩阵分解成更简单且有直观意义的矩阵的乘积
X
=
U
Σ
V
−
1
\pmb X=\pmb U\Sigma\pmb V^{-1}
XXX=UUUΣVVV−1
𝑈, 𝑉是两个正交阵1,𝛴是对角阵,对角元是𝑋的奇异值
例:
A
=
[
4
0
3
−
5
]
\pmb A=\begin{bmatrix}4&0\\3&-5\\\end{bmatrix}
AAA=[430−5]想分解的形式:
A
=
U
Σ
V
T
\pmb{A=U\Sigma V^T}
A=UΣVTA=UΣVTA=UΣVT.
分解步骤:
1. 求转置矩阵
A T = [ 4 3 0 − 5 ] \pmb A^T=\begin{bmatrix}4&3\\0&-5\\\end{bmatrix} AAAT=[403−5]
A T A = [ 4 3 0 − 5 ] [ 4 0 3 − 5 ] = [ 25 − 15 − 15 25 ] \pmb A^T\pmb A=\begin{bmatrix}4&3\\0&-5\end{bmatrix}\begin{bmatrix}4&0\\3&-5\\\end{bmatrix}=\begin{bmatrix}25&-15\\-15&25\\\end{bmatrix} AAATAAA=[403−5][430−5]=[25−15−1525]
2. 求特征值:
A T A − λ E = [ 25 − λ − 15 − 15 25 − λ ] \pmb A^T\pmb A-\lambda\pmb E=\begin{bmatrix}25-\lambda&-15\\-15&25-\lambda\end{bmatrix} AAATAAA−λEEE=[25−λ−15−1525−λ]
λ 1 = 40 λ 2 = 10 \lambda_1=40~~~\lambda_2=10 λ1=40 λ2=10
3. 求奇异值: s 1 = λ 1 = 6.3245 s 2 = λ 2 = 3.1622 s_1=\sqrt{\lambda_1}=6.3245~~~s_2=\sqrt{\lambda_2}=3.1622 s1=λ1=6.3245 s2=λ2=3.1622
S = [ 6.3245 0 0 3.1622 ] ; S − 1 = [ 0.1581 0 0 0.3164 ] \pmb S=\begin{bmatrix}6.3245&0\\0&3.1622\\\end{bmatrix}~~~;\pmb S^{-1}=\begin{bmatrix}0.1581&0\\0&0.3164\end{bmatrix} SSS=[6.3245003.1622] ;SSS−1=[0.1581000.3164]
针对特征值
λ
1
\lambda_1
λ1,计算特征向量:
A
T
A
−
λ
E
=
[
−
15
−
15
−
15
−
15
]
\pmb A^T\pmb A-\lambda\pmb E=\begin{bmatrix}-15&-15\\-15&-15\end{bmatrix}
AAATAAA−λEEE=[−15−15−15−15]
( A T A − λ E ) X 1 = 0 (\pmb A^T\pmb A-\lambda \pmb E)\pmb X_1=0 (AAATAAA−λEEE)XXX1=0
[ − 15 − 15 − 15 − 15 ] [ x 1 x 2 ] = 0 \begin{bmatrix}-15&-15\\-15&-15\end{bmatrix}\begin{bmatrix}x_1\\x_2\end{bmatrix}=0 [−15−15−15−15][x1x2]=0
x 1 = − x 2 ; L = x 1 2 − x 2 2 = x 1 2 x_1=-x_2;~~~~L=\sqrt{x_1^2-x_2^2}=x_1\sqrt{2} x1=−x2; L=x12−x22=x12
得: X 1 = [ x 1 / L x 2 / L ] = [ 1 / 2 − 1 / 2 ] = [ 0.7071 − 0.7071 ] \pmb X_1=\begin{bmatrix}x_1/L\\x_2/L\end{bmatrix}=\begin{bmatrix}1/\sqrt{2}\\-1/\sqrt{2}\end{bmatrix}=\begin{bmatrix}0.7071\\-0.7071\end{bmatrix} XXX1=[x1/Lx2/L]=[1/2−1/2]=[0.7071−0.7071]
同理可得 X 2 = [ 0.7071 0.7071 ] \pmb X_2=\begin{bmatrix}0.7071\\0.7071\end{bmatrix} XXX2=[0.70710.7071]
我们想分解的形式为: A = U S V T \pmb A=\pmb U\pmb S\pmb V^T AAA=UUUSSSVVVT
V = [ X 1 X 2 ] = [ 0.7071 0.7071 − 0.7071 0.7071 ] \pmb V=\begin{bmatrix}\pmb X_1&\pmb X_2\end{bmatrix}=\begin{bmatrix}0.7071&0.7071\\-0.7071&0.7071\end{bmatrix} VVV=[XXX1XXX2]=[0.7071−0.70710.70710.7071]
V T = [ 0.7071 − 0.7071 0.7071 0.7071 ] \pmb V^T=\begin{bmatrix}0.7071&-0.7071\\0.7071&0.7071\end{bmatrix} VVVT=[0.70710.7071−0.70710.7071]
U = A V S − 1 = [ 0.4472 0.8944 0.8944 − 0.4472 ] \pmb U=\pmb{AVS^{-1}}=\begin{bmatrix}0.4472&0.8944\\0.8944&-0.4472\end{bmatrix} UUU=AVS−1AVS−1AVS−1=[0.44720.89440.8944−0.4472]
A = U S V T = [ 3.9998 0 2.9999 − 4.9997 ] ≈ [ 4 0 3 − 5 ] \pmb{A=USV^{T}}=\begin{bmatrix}3.9998&0\\2.9999&-4.9997\end{bmatrix}\approx\begin{bmatrix}4&0\\3&-5\\\end{bmatrix} A=USVTA=USVTA=USVT=[3.99982.99990−4.9997]≈[430−5]
代码实例:
import numpy as np
x2 = np.array([[4, 0], [3, 5]])
u, sigma, vt = np.linalg.svd(x2)
print('u', u)
print('sigma', sigma)
print('vt', vt)
u [[-0.4472136 -0.89442719]
[-0.89442719 0.4472136 ]]
sigma [6.32455532 3.16227766]
vt [[-0.70710678 -0.70710678]
[-0.70710678 0.70710678]]
寻找有效特征,数据压缩
如果: A A T = E \pmb A\pmb A^T=\pmb E AAAAAAT=EEE( E \pmb E EEE为单位矩阵, A t \pmb A^t AAAt表示“矩阵A的转置矩阵”。)或 A T A = E \pmb A^T\pmb A=\pmb E AAATAAA=EEE,则n阶实矩阵A称为正交矩阵。 ↩︎