深度学习基础:线性代数(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))
上一篇 深度学习基础:线性代数(1)_特征分解及numpy、scipy实现
下一篇 深度学习基础:线性代数(3)_逆矩阵与伪逆矩阵
目录
文章列表
1 Android渗透测试注意事项
Android渗透测试注意事项
2
设计模式(14)迭代器模式
设计模式(14)迭代器模式
3
PHP file_get_contents获取表单POST请求内容为空问题
PHP file_get_contents获取表单POST请求内容为空问题
4
Python Selenium警告框处理
Python Selenium警告框处理
5
Windows下安装OpenSSL
Windows下安装OpenSSL
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。