一、奇异值分解SVD讲解
1、奇异值分解SVD介绍
奇异值分解SVD(Singular Value Decomposition)是线性代数中一种非常重要的矩阵分解方法。在SVD中,一个m×n的矩阵A可以被分解为三个矩阵的乘积:
(1)左奇异向量(U)
U 是一个 m×m 的矩阵。U的列向量是矩阵A作用下输入空间的正交基。矩阵A作用于这些向量后,会沿着这些基的方向进行拉伸或压缩。U矩阵确保了变换前后保持列空间的正交性,相当于在输入空间进行了一个正交旋转。
(2)奇异值(Σ)
Σ 是一个 m×n 的对角矩阵,对角线上的元素是非负实数,称为矩阵A的奇异值,记作σ_1, σ_2, ..., σ_min(m,n),按照非递减顺序排列。非对角元素都是0。对角线上的非零元素σ_i表示矩阵A在不同方向上的拉伸因子。大值的σ_i对应于矩阵的主要特征或最重要的方向,而小值的σ_i对应于次要特征或噪声。
(3)右奇异向量(V)
V 是一个 n×n矩阵,V的列向量是矩阵A作用后输出空间的正交基。
奇异值分解在多个领域都有广泛的应用,例如:
- 数据压缩和降维:通过保留最大的几个奇异值和对应的奇异向量,可以近似重构矩阵,常用于主成分分析(PCA)和图像压缩。
- 矩阵求逆和求解线性方程组:奇异值分解可以用来稳定地计算矩阵的逆,尤其当矩阵接近奇异或病态时。
- 机器学习:SVD在推荐系统中用于协同过滤算法。
- 信号处理:用于信号的谱分析和滤波。
2、矩阵U求解
因为矩阵A是一个m x n矩阵,A^T是一个n x m的矩阵,所以将A和A的转置相乘,会得到一个m x m的方阵, 这时可以进行特征分解,得到特征向量和特征值,如下所示:
通过计算可以得到(A^T)(A)的m个特征值对应的m个特征向量U。
3、矩阵V求解
因为A^T是一个n x m的矩阵,矩阵A是一个m x n矩阵,所以将A的转置和A相乘,会得到一个n x n的方阵, 这时可以进行特征分解,得到特征向量和特征值,如下所示:
4、矩阵Σ求解
利用特征值矩阵等于奇异值矩阵的平方,可以求出每个奇异值:
5、奇异值SVD求解的案例
设矩阵A = [
[1, 2],
[3, 4]
]
试求其SVD。
步骤-1:计算(A^T)*A
分析各个矩阵的维度:A为2 x 2维度 ;A^T为2x2维度;(A^T)*A2x2维度;为Σ为2x2维度;U为2x2维度;V^T2x2维度。
import numpy as np
# 定义两个矩阵
AT = np.array([[1, 3], [2,4]])
A = np.array([[1, 2], [3,4]])
# 使用numpy的dot函数进行矩阵乘法
ATA = np.dot(AT, A)
print(ATA)