推荐系统里有一张「用户 × 电影」的评分表,几十万行、几万列,其中绝大多数格子是空的。想从这张表里提炼出「有哪几类口味」,得先把它压小,这也是很多 AI 推荐模型在训练前的头一步。奇异值分解处理的就是这类任务:任意形状的矩阵都能拆成三个矩阵相乘,中间那个是对角阵,装着按大小排好的奇异值。名字听起来抽象,做的事其实很具体——找出矩阵里最重要的几个方向。
方阵之外,矩阵也能拆
特征值分解只对方阵有效,而真实的数据表几乎都不是方的。SVD 没有这个限制:m 行 n 列的矩阵 A 拆成 U、Σ、V 的转置三部分。U 的列叫左奇异向量,V 的列叫右奇异向量,Σ 除对角线外全是零,对角线上就是奇异值,按从大到小排好。
「从大到小」不是巧合,它让截断变得合理:只保留前 k 个奇异值得到的近似矩阵,在所有秩为 k 的矩阵里误差最小。这条性质是 SVD 能当压缩工具用的理论依据,也是它比手工挑特征更可靠的原因。这一族方法的整体关系,见矩阵分解。
几种分解,能做的事和代价差很远
| 分解方法 | 能做什么 | 代价 |
|---|---|---|
| 特征值分解 | 方阵对角化,求矩阵幂、解微分方程、分析系统稳定性 | 只对方阵有效,且不总能对角化;病态矩阵上数值不稳 |
| 满秩 SVD | 任意矩阵的精确分解,求伪逆、算秩、做最小二乘 | 计算量约与 m×n×min(m,n) 同阶,大矩阵上很慢 |
| 截断 SVD | 降维、去噪、压缩、推荐系统补全缺失评分 | 要选 k;k 太小丢信息,太大起不到压缩作用 |
| 随机化 SVD | 超大稀疏矩阵的近似分解,速度提升明显 | 结果只是近似,奇异值衰减慢时误差偏大 |
四行的差别不在数学,在「要精确还是要够用」。推荐系统里评分矩阵极稀疏,满秩分解既慢又没意义,截断或随机化才是常规选择;需要求伪逆做最小二乘时,就得用满秩。
奇异值说的是这个方向有多重要
把矩阵看成一个变换,奇异值就是各个方向被拉伸的倍数。大的方向承载主要变化,小的方向往往是噪声或细节。图像压缩是最直观的例子:一张图做 SVD,只留前几十个奇异值,轮廓还在,细节糊掉,存储体积降一个量级。
选 k 常用两个办法。累计能量比:前 k 个奇异值的平方和占总平方和的比例,到 90% 或 95% 就停。看下降曲线:奇异值排序后通常先陡降再变平,拐点附近就是分界。两种都是经验判断,没有通用答案,最终要看下游任务的效果。
和 PCA 是同一件事的两种说法
数据先中心化,每列减去均值,再对得到的矩阵做 SVD,右奇异向量就是主成分,奇异值的平方除以样本数就是各主成分的方差。所以很多库内部用 SVD 实现 PCA——不构造协方差矩阵,数值上更稳,特征量纲差异大时区别尤其明显。两者的取舍和适用场景见PCA 降维。
反过来也成立:不中心化直接做 SVD,得到的方向会被均值主导,第一主成分往往就是「整体水平」,降维结果没有解释价值。这一步漏掉,后面全错。
数值上的四个坑
缺失值:SVD 要求矩阵完整,评分表却大量为空。直接补零等于把「没看过」当成「评 0 分」,通常的做法是只用观测到的项做加权分解,或用交替最小二乘。稀疏性:稀疏矩阵直接做 SVD 会退化成稠密运算,必须用专门的稀疏求解器。符号不唯一:奇异向量整体取反仍是合法解,两次运行结果可能正负相反,比较前要先对齐符号。规模:百万级矩阵用满秩分解会直接卡死,先降到几千维再做。
还有一个容易忽略的点:SVD 对异常值敏感。一个行为极端的用户可能独占一个主成分,把它当成「主要口味」就错了。做之前先看分布,必要时截尾。
它给出的方向,没有名字
奇异值大只说明这个方向在数据里变化大,不说明它有业务含义,更不说明它和结果有因果关系。第一主成分可能是「活跃度」,也可能是「注册时长」,还可能两者混在一起,要靠人去解读。把数值上的重要直接当成业务上的重要,是最常见的误读。
它是线性方法,数据里的非线性结构抓不到,这类场景要用核方法或自编码器。它也替代不了聚类:SVD 给的是连续的方向,聚类给的是离散的分组,想直接得到「这几个人是一类」,见K-means 聚类。降维压到多少维、对下游有什么影响,还得结合具体任务定,压缩率高的方案不一定在下游更好用。
速查:用 SVD 之前先确认四件事
- 矩阵是不是已经中心化?没中心化就先补上。
- 缺失值怎么处理?补零会把「没有」当成「为零」。
- k 取多少?看累计能量到 90% 或曲线拐点。
- 分解出的方向有没有业务解释?没有就只当压缩用。
- 矩阵多大?百万级先考虑截断或随机化。


