第 12 章

奇异值分解 (SVD)

线性代数的巅峰:任何矩阵的旋转-缩放-旋转分解

01

核心概念

SVD 的定义

对任意 m×n 实矩阵 A(不必方阵,不必对称),其奇异值分解为:

A = UΣVᵀ

其中:

几何直觉

SVD 揭示 A 将单位球面映射为椭球面的全过程:Vᵀ 旋转输入空间,Σ 沿坐标轴缩放,U 再旋转输出空间。奇异值 σᵢ 就是椭球面的半轴长度。

低秩逼近

SVD 给出矩阵的最佳低秩逼近。对秩为 r 的矩阵 A,其秩 k 逼近(k < r)为:

Aₖ = Σᵢ₌₁ᵏ σᵢuᵢvᵢᵀ

这是 Frobenius 范数意义下的最优逼近:||A − Aₖ||F 最小。逼近误差为 √(σₖ₊₁² + ... + σᵣ²)。

伪逆与最小二乘

A 的Moore-Penrose 伪逆可通过 SVD 定义:

A⁺ = VΣ⁺Uᵀ

其中 Σ⁺ 将非零奇异值取倒数后转置。最小二乘问题的最小范数解为 x̂ = A⁺b。

主成分分析 (PCA)

对中心化数据矩阵 X(每行/列零均值),其协方差矩阵与 XᵀX 相关。SVD 的右奇异向量 V 就是主成分方向,奇异值的平方与主成分方差成正比。PCA 本质上是通过 SVD 寻找数据最大方差方向。

关键要点

SVD 是"万能分解":任何矩阵都存在,且计算稳定。特征分解要求方阵且可对角化,SVD 没有任何限制。在数值线性代数中,SVD 是可靠性最高的矩阵分解工具。

02

计算方法

1. 手算简单 SVD(2×2 矩阵)

以 A = [[3,0],[0,−2]] 为例:

2. 用 SVD 解最小二乘

对超定方程组 Ax ≈ b:

3. 低秩逼近

保留前 k 个奇异值和对应向量,舍弃其余。若 σₖ₊₁ 很小,Aₖ 是 A 的优良近似。

03

工程应用

图像压缩

将灰度图像视为矩阵 A,通过 SVD 保留前 k 个奇异值实现压缩。存储量从 mn 降至 k(m+n+1)。例如 1000×1000 图像秩 50 逼近只需存储约 10 万像素而非 100 万,压缩比 10:1,视觉质量仍较好。

推荐系统与协同过滤

用户-评分矩阵通常稀疏且低秩。SVD 将高维用户-物品空间映射到低维隐因子空间,预测缺失评分。Netflix Prize 等推荐算法的核心就是矩阵分解(SVD 的变种)。

噪声过滤

信号通常集中在少数大奇异值,噪声分散在所有奇异值。截断小奇异值可滤除噪声(低秩逼近的去噪效应)。这是数字图像处理和语音增强中的常用技术。

主成分分析(PCA)降维

高维数据可视化与预处理依赖 PCA。SVD 直接对数据矩阵分解,无需显式计算协方差矩阵,数值稳定性更优。保留前 k 个主成分可将数据从 n 维降至 k 维,保留最大方差。

潜在语义分析(LSA)

在信息检索中,词-文档矩阵通过 SVD 降维,捕获词语间的潜在语义关联。同义词和近义词在低维空间中距离更近,改善搜索的召回率。

04

例题

例题 1:求 SVD

题目:求 A = [[1,1],[0,1],[−1,1]] 的简化 SVD。

解:

A 为 3×2 矩阵。

Step 1:AᵀA = [[2,0],[0,3]]。特征值 λ₁=3, λ₂=2。

奇异值 σ₁=√3, σ₂=√2。

Step 2:右奇异向量 vᵢ 为 AᵀA 的特征向量:v₁=(0,1), v₂=(1,0)。

V = [[0,1],[1,0]]。

Step 3:左奇异向量 uᵢ = (1/σᵢ)Avᵢ。

u₁ = (1/√3) A(0,1) = (1/√3)(1,1,1) = (1/√3, 1/√3, 1/√3)。

u₂ = (1/√2) A(1,0) = (1/√2)(1,0,−1) = (1/√2, 0, −1/√2)。

u₃ 与 u₁, u₂ 正交,可取 u₃ = (1/√6, −2/√6, 1/√6)。

Step 4:U = [u₁ u₂ u₃],Σ = [[√3,0],[0,√2],[0,0]]。

σ₁=√3, σ₂=√2;U 和 V 如上
例题 2:用 SVD 解最小二乘

题目:用 SVD 求 Ax = b 的最小二乘解,其中 A = [[1,1],[0,1],[−1,1]],b = (1,2,3)ᵀ。

解:

由例题 1,A = UΣVᵀ,其中 σ₁=√3, σ₂=√2。

伪逆 Σ⁺ = [[1/√3, 0, 0],[0, 1/√2, 0]]。

计算 Uᵀb:

u₁ᵀb = (1/√3)(1+2+3) = 6/√3 = 2√3。

u₂ᵀb = (1/√2)(1+0−3) = −2/√2 = −√2。

x̂ = VΣ⁺Uᵀb = V [[2√3/√3],[−√2/√2]] = V [[2],[−1]] = [[0,1],[1,0]] [[2],[−1]] = (−1, 2)

最小二乘解:x̂ = (−1, 2)
例题 3:图像低秩逼近

题目:设 A 为 4×4 矩阵,奇异值为 σ=(10, 5, 2, 0.1)。求秩 2 逼近的相对误差。

解:

Frobenius 范数 ||A||F² = Σσᵢ² = 100 + 25 + 4 + 0.01 = 129.01。

秩 2 逼近误差 ||A − A₂||F² = σ₃² + σ₄² = 4 + 0.01 = 4.01。

相对误差 = √(4.01 / 129.01) ≈ √0.0311 ≈ 17.6%

若舍弃 σ₄=0.1(秩 3 逼近),误差仅 √(0.01/129.01) ≈ 0.9%。

这说明小奇异值对矩阵贡献极小,截断可大幅压缩数据而损失很小。

秩 2 逼近相对误差约 17.6%
例题 4:SVD 与 PCA

题目:数据矩阵 X(已中心化)= [[2,1],[−1,0],[1,−1]](3 个样本,2 维)。求第一主成分方向及方差解释率。

解:

对 X 做 SVD:X = UΣVᵀ。

XᵀX = [[6,1],[1,2]],特征值 λ² − 8λ + 11 = 0 → λ = (8±√12)/2 = 4±√3。

λ₁ = 4+√3 ≈ 5.732,λ₂ = 4−√3 ≈ 2.268。

奇异值 σ₁=√λ₁≈2.394, σ₂=√λ₂≈1.506。

第一主成分为 v₁(XᵀX 最大特征值对应的特征向量):

(XᵀX − λ₁I)v = 0 → [[1.268, 1],[1, −2.732]] → v₁ ≈ (0.924, 0.383)。

方差解释率 = λ₁/(λ₁+λ₂) = 5.732/8 ≈ 71.7%

第一主成分方向 ≈ (0.924, 0.383),解释 71.7% 方差
05

MATLAB 代码

MATLAB · SVD 基本操作
% 任意矩阵的 SVD A = [1 1; 0 1; -1 1]; % 完整 SVD [U, S, V] = svd(A); % A = U*S*V' % 经济型 SVD(推荐) [U, S, V] = svd(A, 'econ'); % U 为 3x2, S 为 2x2 % 奇异值 sigma = svd(A) % [1.732; 1.414] = [sqrt(3); sqrt(2)] % 验证 norm(A - U*S*V', 'fro') % 接近 0
MATLAB · 低秩逼近与图像压缩
% 读取图像(灰度) I = imread('example.jpg'); I = rgb2gray(I); A = double(I); % SVD [U, S, V] = svd(A, 'econ'); % 秩 k 逼近 k = 50; A_k = U(:,1:k) * S(1:k,1:k) * V(:,1:k)'; % 显示 figure; imshow(uint8(A_k)); title(['Rank-' num2str(k) ' Approximation']); % 压缩比与误差 [m, n] = size(A); original = m*n; compressed = k*(m+n+1); ratio = original / compressed; err = norm(A - A_k, 'fro') / norm(A, 'fro');
MATLAB · PCA 实现
% 数据矩阵 X:每列一个样本 X = [2 -1 1; 1 0 -1]; % 中心化 X_centered = X - mean(X, 2); % SVD(注意转置使每列为样本) [U, S, V] = svd(X_centered, 'econ'); % 主成分方向 PC = U % 各列为主成分 % 方差解释率 variance = diag(S).^2 / sum(diag(S).^2) % 降维到 1 维 Z = U(:,1)' * X_centered % 第一主成分得分
奇异值衰减曲线(典型图像矩阵)
← 上一章:线性变换的矩阵表示 返回目录 →