奇异值分解 (SVD) 计算流程笔记
核心定义
任何一个
: 一个 的正交矩阵 (Orthogonal Matrix)。其列向量 被称为左奇异向量 (Left Singular Vectors)。 (Sigma): 一个 的对角矩阵。其对角线上的元素 被称为奇异值 (Singular Values)。它们非负 ( ) 且按从大到小的顺序排列。 : 一个 的正交矩阵。其列向量 被称为右奇异向量 (Right Singular Vectors)。 是 的转置。
计算流程:三步走战略
我们的目标是依次求出
Step 1: 计算 V 和 Σ (从 入手)
-
构建
(奇异值矩阵): - 计算奇异值:
,其中 是 的特征值。 - 排序: 将奇异值从大到小排序:
(其中 是矩阵 的秩)。 - 确定形状: 创建一个与原矩阵
维度完全相同的 零矩阵 。 - 填充对角线: 从左上角
开始,沿着主对角线,依次填入排序后的奇异值 , , ...。一直填到矩阵的行或列的边界为止。
- 注:关于“消失”的小特征值
- 如果
是“宽”的 ( ) 或“高”的 ( ),那么对角线位置的数量会小于奇异值的总数。 - 这意味着较小的奇异值(尤其是0)可能没有位置可填。它们并没有被“舍弃”,而是隐式地体现在了
矩阵中用于“填充”形状的零行或零列里。 - 例如,对于一个
矩阵, 的对角线只有 和 两个位置。 即使不为0,也无法被填入。
- 如果
- 计算奇异值:
-
构建
(右奇异向量矩阵): - 排序特征向量: 找到
的所有特征向量。必须按照它们所对应的奇异值 (从大到小) 的顺序来排列这些特征向量。 - 例:
对应 , 对应 ,以此类推。
- 例:
- 单位化 (Normalize): 对每一个排好序的特征向量进行单位化,确保它们的长度都为1。这会得到一组标准正交基
。 - 构建矩阵: 将这些单位化的、排好序的特征向量作为列向量,构建
的正交矩阵 。
- 排序特征向量: 找到
Step 2: 计算 U (左奇异向量矩阵)
这一步的目标是找到输出空间的“特殊正交基”
-
计算与非零奇异值对应的
- 对于每一个非零的奇异值
(i 从 1 到 r),使用以下关系式计算对应的左奇异向量 : 这里的 是你在 Step 1 中计算出的、与 对应的右奇异向量。
- 对于每一个非零的奇异值
-
处理可能存在的“补充”向量 (如果 m > r)
- 你已经通过上面的方法得到了
个左奇异向量 。 - IF
: 恭喜,你已经找到了所有的 向量。 - IF
: 你还需要找到 个额外的向量 来填满 矩阵。这些向量构成了 的零空间 (Null Space) 的一组标准正交基。 - 解方程组
。 - 求出其解空间的一组基。
- 使用格拉姆-施密特正交化 (Gram-Schmidt Process) 方法将这组基以及之前算出的
合并,得到一个完整的标准正交基 。
- 解方程组
- 你已经通过上面的方法得到了
-
构建
- 将所有
个单位化的、互相正交的左奇异向量 作为列向量,构建 的正交矩阵 。
- 将所有
Step 3: 最终检验
- 将你计算出的
, , 相乘。 - 验证
是否等于原始矩阵 。 - 同时检查
和 是否真的是正交矩阵 ( , )。