深度学习基础:线性代数(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
import numpy as np
A = np.array([[1,2,3,4],
[5,6,7,8],
[9,10,11,12]])
# 返回三个矩阵
np.linalg.svd(A)
Scipy
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))
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/04/01/fundamentals-of-deep-learning-linear-algebra-singular-value-decomposition-and-implementation-of-numpy-and-scipy/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论