深度学习基础:线性代数(2)_奇异值分解及numpy、scipy实现

奇异值分解的意义

除了特征分解外,还有另一种分解的方法,称为奇异值分解(SVD),它可以将矩阵分解成奇异值奇异向量。相对特征分解来说,奇异值分解的应用更加广泛,每个实数矩阵都有一个奇异值分解,但不一定有特征分解。例如:非方阵的矩阵没有特征分解,但有奇异值分解。

奇异值分解

将矩阵分解成三个矩阵的乘积:

$$A = UDV^T$$

其中$A$是一个$m \times n$的矩阵,$U$是一个$m \times m$的矩阵,$D$是一个$m \times n$的矩阵,而$V$是一个$n \times n$的矩阵。而且$U$和$V$是正交矩阵,$D$是对角矩阵。

矩阵$D$对角线上的元素被称为矩阵$A$的奇异值,矩阵$U$的列向量称为左奇异向量,矩阵$V$的列向量称为右奇异向量

奇异值和奇异向量的含义

矩阵$A$的左奇异向量是$AA^T$的特征向量,矩阵$A$的右奇异向量是$A^TA$的特征向量,$A$的非零奇异值是矩阵$AA^T$或$A^TA$的特征值的平方根。

Python实现

Numpy

1
2
3
4
5
6
7
import numpy as np

A = np.array([[1,2,3,4],
[5,6,7,8],
[9,10,11,12]])
# 返回三个矩阵
np.linalg.svd(A)

Scipy

1
2
3
4
5
6
7
8
9
10
11
import numpy as np
import scipy as sp
from scipy import linalg

A = np.array([[1,2,3,4],
[5,6,7,8],
[9,10,11,12]])
# 返回奇异值
print(linalg.svdvals(A))
# 返回三个矩阵
print(linalg.svd(A))

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :