奇异值分解(Singular Value Decomposition, SVD)是一种将任意矩阵分解为三个特定矩阵乘积的线性代数方法,广泛应用于数据降维、信号处理、推荐系统、自然语言处理(如潜在语义分析)等领域。

1. SVD 的定义

对于任意实数矩阵 $A\in\mathbb{R}^{m\times n}$,其 SVD 分解形式为:

$A=U\Sigma V^T$

其中:

  • $U\in\mathbb{R}^{m\times m}$:左奇异向量矩阵,是正交矩阵(列向量两两正交且模长为1)。

  • $\Sigma\in\mathbb{R}^{m\times n}$:对角矩阵,对角线元素为奇异值(非负,按从大到小排列),其余元素为0。

  • $\ V\in\mathbb{R}^{n\times n}$:右奇异向量矩阵,是正交矩阵。


2. 奇异值的性质

  • 奇异值 𝜎1≥𝜎2≥⋯≥𝜎𝑟>0σ1​≥σ2​≥⋯≥σr​>0,其中 𝑟=rank(𝐴)是矩阵𝐴的秩。

  • 奇异值反映了矩阵的能量分布:较大的奇异值对应矩阵的主成分。

  • 矩阵的秩:非零奇异值的个数即为矩阵的秩。

  • 矩阵的范数:最大奇异值 𝜎1是矩阵的谱范数(2-范数)。


3. SVD 的几何意义

SVD 将矩阵𝐴的作用分解为三步:

  1. 旋转/反射:由$V^T$完成(将输入空间旋转到标准基)。

  2. 缩放:由$\Sigma$完成(沿坐标轴方向缩放)。

  3. 旋转/反射:由𝑈完成(将结果旋转到输出空间)。


4. SVD 的计算步骤

  1. 计算A^TAAA^T

    • A^TA的特征向量组成𝑉的列。

    • AA^T的特征向量组成𝑈的列。

  2. 求奇异值

    Σ的对角元素是A^TAAA^T的特征值的平方根(即$\sigma_i=\sqrt{\lambda_i}$​​)。
  3. 排序

    奇异值按从大到小排列,并调整𝑈和𝑉的列向量顺序。

5. SVD 的应用

(1) 低秩近似(数据压缩)

通过保留前 𝑘k 个最大的奇异值,将矩阵近似为低秩矩阵:

$A \approx U_k \Sigma_k V_k^T$

其中 $U_k \in \mathbb{R}^{m \times k}$$\Sigma_k \in \mathbb{R}^{k \times k}$$V_k \in \mathbb{R}^{n \times k}$

  • 应用场景:图像压缩、去噪、主成分分析(PCA)。

(2) 推荐系统(协同过滤)

通过 SVD 分解用户-物品评分矩阵,预测缺失值(如 Netflix 推荐算法)。

(3) 自然语言处理
  • 潜在语义分析(LSA):通过 SVD 提取文档-词矩阵的潜在语义特征。

  • 词嵌入降维:将高维词向量映射到低维空间。

(4) 矩阵求逆与伪逆

对于非方阵或奇异矩阵,SVD 可用于计算伪逆(Moore-Penrose 伪逆):

$A^+=V\Sigma^+U^T$

其中$\Sigma^+$是将$\Sigma$的非零元素取倒数后转置。\displaystyle


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,我们能从复杂数据中提取关键特征,是数据分析与机器学习中不可或缺的数学工具。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐