基于QR分解方法的SVD分解:
矩阵的 SVD 分解并不唯一。主要的并行算法子程序都是基于经典求解矩阵奇异值的串行方法而实现的。
基于 QR 迭代求解矩阵奇异值的方法,是求解双对角矩阵所有奇异值最快速的算法,求解出的奇异值可以达到较高的相对精度;
分而治之方法,它是求解全部矩阵奇异值和奇异向量速度很快的算法,但是当求解微小的奇异值时,往往不能保证很高的相对精度,对于一般应用来说,分而治之算法求解出的奇异值已经足够精确;
对分法和逆迭代方法,它求解矩阵奇异值可以保证奇异值达到较高的相对精度,但是求解出的奇异向量偶尔会损失正交性;
Jacobi 方法,该方法求解出的矩阵奇异值拥有较高的相对精度、求解出的奇异向量正交性好、有较强的数值稳定性,并且算法实现简单有利于并行,成为求解矩阵奇异值问题中一个活跃的研究课题。
参考:徐士良C常用算法程序集(第二版)
机器学习之旅—奇异值分解
设矩阵 A∈Rm×n ,对于矩阵 A 的SVD分解的时间复杂度在 m 大于n 的情况下,为 O(m×n2) ;
基于Jacobi方法的SVD分解
经典(双边)Jacobi方法:
由SVD分解的形式: A=UΣVT 可得, ATA=VΣ2VT , VT(ATA)V=Σ2 为对角阵,所以正交矩阵 V 为A的右奇异向量,也为 ATA 的特征向量,
同理可得:矩阵 U 为矩阵 A 的左奇异向量,也为 AAT 的特征向量。
因此双边Jacobi方法的核心思想是:将对称矩阵 ATA 转化为对角矩阵,其转化矩阵即为右奇异矩阵 V
步骤:选择Jacobi矩阵 J ,类似Givens矩阵 G (标准正交矩阵), J=GT
Jacobi 矩阵可以将 i 行 j 行与 i 列 j 列的四个角点上的元素进行正交变换, 使非对角线上的元素 Ai,j 化为0,将矩阵 A 经过右连乘 Ji,j 矩阵将上对角线元素全部化为0,并 左连乘 Gi,j 矩阵将下对角线元素全部化为0(数值计算中可能为一个很小的数字也可),矩阵 A 为对称矩阵, Ai,j=Aj,i :
JTk...JT2JT1(ATA)J1J2...Jk=Λ=Σ2 ;
因此右奇异矩阵 V=J1J2...Jk ,标准正交阵的连乘也为标准正交阵;
奇异值 σ 为对角阵 Λ 的对角元素的开方,选择非零奇异值对应的特征向量 Vi 按奇异值大小排列;
根据公式 Ui=AViσ<