奇异值分解(Singular Value Decomposition, SVD)
奇异值分解(Singular Value Decomposition, SVD)是一种将任意矩阵分解为三个特定矩阵乘积的线性代数方法,广泛应用于数据降维、信号处理、推荐系统、自然语言处理(如潜在语义分析)等领域。
奇异值分解(Singular Value Decomposition, SVD)是一种将任意矩阵分解为三个特定矩阵乘积的线性代数方法,广泛应用于数据降维、信号处理、推荐系统、自然语言处理(如潜在语义分析)等领域。
1. SVD 的定义
对于任意实数矩阵 ,其 SVD 分解形式为:
其中:
-
:左奇异向量矩阵,是正交矩阵(列向量两两正交且模长为1)。
-
:对角矩阵,对角线元素为奇异值(非负,按从大到小排列),其余元素为0。
-
:右奇异向量矩阵,是正交矩阵。
2. 奇异值的性质
-
奇异值 𝜎1≥𝜎2≥⋯≥𝜎𝑟>0σ1≥σ2≥⋯≥σr>0,其中 𝑟=rank(𝐴)是矩阵𝐴的秩。
-
奇异值反映了矩阵的能量分布:较大的奇异值对应矩阵的主成分。
-
矩阵的秩:非零奇异值的个数即为矩阵的秩。
-
矩阵的范数:最大奇异值 𝜎1是矩阵的谱范数(2-范数)。
3. SVD 的几何意义
SVD 将矩阵𝐴的作用分解为三步:
-
旋转/反射:由
完成(将输入空间旋转到标准基)。
-
缩放:由
完成(沿坐标轴方向缩放)。
-
旋转/反射:由𝑈完成(将结果旋转到输出空间)。
4. SVD 的计算步骤
-
计算
和
:
-
的特征向量组成𝑉的列。
-
的特征向量组成𝑈的列。
-
-
求奇异值:
Σ的对角元素是或
的特征值的平方根(即
)。
-
排序:
奇异值按从大到小排列,并调整𝑈和𝑉的列向量顺序。
5. SVD 的应用
(1) 低秩近似(数据压缩)
通过保留前 𝑘k 个最大的奇异值,将矩阵近似为低秩矩阵:
其中 ,
,
。
-
应用场景:图像压缩、去噪、主成分分析(PCA)。
(2) 推荐系统(协同过滤)
通过 SVD 分解用户-物品评分矩阵,预测缺失值(如 Netflix 推荐算法)。
(3) 自然语言处理
-
潜在语义分析(LSA):通过 SVD 提取文档-词矩阵的潜在语义特征。
-
词嵌入降维:将高维词向量映射到低维空间。
(4) 矩阵求逆与伪逆
对于非方阵或奇异矩阵,SVD 可用于计算伪逆(Moore-Penrose 伪逆):
其中是将
的非零元素取倒数后转置。
6. SVD 与特征分解的关系
-
特征分解仅适用于方阵,且要求矩阵可对角化。
-
SVD 适用于任意矩阵(包括非方阵和非对称矩阵)。
-
若𝐴是方阵且对称正定,则其SVD与特征分解一致。
import numpy as np
# 生成一个 3x2 的矩阵
A = np.array([[1, 2], [3, 4], [5, 6]])
# 计算 SVD
U, S, VT = np.linalg.svd(A)
# 重构 Sigma 矩阵(需补零)
Sigma = np.zeros_like(A, dtype=float)
Sigma[:min(A.shape), :min(A.shape)] = np.diag(S)
# 验证分解结果
A_reconstructed = U @ Sigma @ VT
print("原始矩阵 A:\n", A)
print("重构矩阵 A_reconstructed:\n", A_reconstructed.round(2))
总结
-
SVD 是数值稳定的,适合处理病态矩阵。
-
奇异值的衰减速度反映了矩阵的信息集中程度。
-
截断 SVD(保留前 𝑘k 个奇异值)是降维和去噪的核心工具。
通过 SVD,我们能从复杂数据中提取关键特征,是数据分析与机器学习中不可或缺的数学工具。
更多推荐
所有评论(0)