奇异值分解 (SVD) 是一种矩阵分解方法,它允许您将 n×p 维矩阵 X 近似为 3 个矩阵的乘积:X(nxp) = U(nxk).S(kxk).VT(kxp),其中 k 是从 1 到 p 的整数,S 是对角矩阵。其对角线上的值为非负值(称为奇异值),按左上角最大、右下角最小的顺序排序。S 的所有其他元素为零。
在实践中,矩阵 V(pxk)(即 VT 的转置版本)更受欢迎。
如果 k(分解算法的输入参数,也称为要保留在输出中的组件数)等于 p,则分解是精确的。如果 k 小于 p,则分解变为近似值。
SVD 的一个应用是有损数据压缩。例如,存储 X 需要 n.p 个元素,而存储三个矩阵 U、S 和 VT 需要存储 n.k + k + k.p 个元素。如果 n=1000、p=10 和 k=2,存储 X 需要 10,000 个元素,而存储近似值需要 2,000+4+20 = 2,024 个元素。较小的 k 值更加节省存储空间,而较大的 k 值会提供更准确的近似值。
根据您的数据,奇异值可能会迅速减少,从而允许您选择一个远小于 p 值的 k 值。
SVD 的另一个常见应用是执行主分量分析。
可以使用以下函数来训练和应用 SVD 模型:
有关完整示例,请参阅计算 SVD。