机器学习中的数学——奇异值和奇异值分解

前言

我们知道,只有方阵才有特征值和特征向量,因此只有方阵才能特征值分解, 那么非方阵怎么办?

奇异值和奇异值分解

特征值分解只适用于方阵, 奇异值分解适用于任意的矩阵.

奇异值分解 𝑆𝑖𝑛𝑔𝑢𝑙𝑎𝑟 𝑣𝑎𝑙𝑢𝑒 𝑑𝑒𝑐𝑜𝑚𝑝𝑜𝑠𝑖𝑡𝑖𝑜𝑛,𝑆𝑉𝐷 ,一种重要的矩阵分解方法以一种方便快捷的方式将我们感兴趣的矩阵分解成更简单且有直观意义的矩阵的乘积
X = U Σ V − 1 \pmb X=\pmb U\Sigma\pmb V^{-1} XXX=UUUΣVVV1

𝑈, 𝑉是两个正交阵1,𝛴是对角阵,对角元是𝑋的奇异值


例:
A = [ 4 0 3 − 5 ] \pmb A=\begin{bmatrix}4&0\\3&-5\\\end{bmatrix} AAA=[4305]想分解的形式: 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=[4035]

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=[4035][4305]=[25151525]

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λ151525λ]

λ 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]   ;SSS1=[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=[15151515]

( 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 [15151515][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=x12x22 =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.70710.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.70710.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.70710.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=AVS1AVS1AVS1=[0.44720.89440.89440.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.999904.9997][4305]

代码实例:

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]]

寻找有效特征,数据压缩



  1. 如果: 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称为正交矩阵。 ↩︎

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值