Skip to content

奇异值分解

奇异值分解(Singular Value Decomposition, SVD)是重要的矩阵分解方法,可用于降维、推荐系统、图像压缩和噪声过滤。

概念详解

任意矩阵 ARm×n 都可以分解为:

A=UΣVT

其中 UV 是正交矩阵,Σ 的对角线元素为奇异值。

数学公式及其推导

A=UΣVT 可得:

ATA=VΣTΣVT

因此:

ATAvi=σi2vi

奇异值满足:

σi=λi

其中 λiATA 的特征值。保留前 k 个奇异值可以得到低秩近似:

Ak=UkΣkVkT

它是 Frobenius 范数意义下最优的秩 k 近似。

应用代码

python
import numpy as np

A = np.array([[5, 5, 0, 0], [5, 4, 0, 0], [0, 0, 4, 5], [0, 0, 5, 4]], dtype=float)
U, S, Vt = np.linalg.svd(A, full_matrices=False)

k = 2
A_k = U[:, :k] @ np.diag(S[:k]) @ Vt[:k, :]

print("奇异值:", S)
print(np.round(A_k, 2))

小结

SVD 把矩阵拆成“方向 + 强度 + 方向”的形式。较大的奇异值对应主要结构,较小的奇异值往往对应噪声或细节。