奇异值分解 (SVD)

2025年3月1日 | 阅读 3 分钟

引言

奇异值分解 (SVD) 是线性代数中的一项基本数学技术,它将一个矩阵分解为三个更简单的矩阵,从而揭示了原始矩阵的内在几何和代数结构。给定一个 m×n 维的矩阵 AAA,SVD 将 AAA 表示为三个矩阵的乘积:A=UΣVTA = U \Sigma V^TA=UΣVT。其中,UUU 是一个 m×mm \times mm×m 的正交矩阵,其列向量是 AAA 的左奇异向量;Σ\SigmaΣ 是一个 m×nm \times nm×n 的对角矩阵,包含 AAA 的奇异值;而 VTV^TVT 是一个 n×nn \times nn×n 的正交矩阵的转置,其列向量是 AAA 的右奇异向量。这种分解为理解矩阵的性质提供了宝贵的见解,例如它的秩、值域和零空间。

SVD 在数据科学、信号处理和计算机视觉等各个领域都有广泛的应用。在数据科学中,它常用于降维、去噪以及提高 机器学习算法 的性能。例如,在推荐系统中,SVD 可以帮助提取用户-物品交互矩阵中最显著的特征,从而提高推荐的准确性。在图像处理中,SVD 用于图像压缩和增强等任务。通过仅保留最大的奇异值及其对应的奇异向量,可以在最小的质量损失下获得图像的压缩版本。这个强大的工具通过将复杂的矩阵分解为更简单的组成部分,使得数据处理和分析更加高效。

语法

MATLAB 中执行 奇异值分解 (SVD) 的语法非常简单。以下是使用 svd 函数的几种不同方式:

基本语法

仅计算奇异值

如果您只需要 A 的奇异值

S 将是一个列向量,其中包含 A 的奇异值。

经济型分解

对于大型矩阵,经济型分解可以节省计算资源

U 和 V 的尺寸将减小,以匹配 A 的秩。

在 Matlab 中,如何执行 SVD 分解?

在 MATLAB 中,使用内置的 svd 函数执行奇异值分解 (SVD) 非常简单。以下是执行此操作的分步指南:

  • 准备您的矩阵: 确保您拥有要分解的矩阵。我们将其命名为 A。
  • 使用 svd 函数: 此函数会将矩阵 A 分解为三个矩阵:U、S 和 V。

以下是 MATLAB 中的一个示例:

示例 1

输出

Singular value decomposition (SVD)

在此示例中

  • A 是您要分解的矩阵。
  • [U, S, V] = svd(A) 执行 SVD,返回矩阵 U、S 和 V。

理解输出

S 是一个对角矩阵,包含 A 的值。此外,U 是一个正交矩阵,其列向量是 A 的左向量;V 是一个正交矩阵,其列向量是 A 的右向量。

附加选项

如果您只需要 A 的奇异值,而不需要 U 和 V 矩阵,可以使用:

对于经济型分解,当 A 是一个大型矩阵时,您可以使用:

这会减小 U 和 V 矩阵的尺寸,以提高计算效率,同时仍然提供重要的奇异值。

示例 2

输出

Singular value decomposition (SVD)
Singular value decomposition (SVD)