我想计算一个巨大矩阵的Moore–Penrose pseudoinverse。理想情况下,我想在具有2300万行和1000列的矩阵上执行此操作,但是如果需要,我可以仅通过运行实验的一部分将行数减少到400万。
显然,将矩阵加载到内存中并在其上运行SVD是行不通的。 Wikipedia指向Krylov subspace方法,并提及Arnoldi,Lanczos,Conjugate gradient,GMRES(广义最小残差),BiCGSTAB(双共轭梯度稳定),QMR(准最小残差),TFQMR(无转置QMR)和MINRES(最小残差)方法是最好的Krylov子空间方法之一。但是我不知道从这里去哪里。计算这样一个巨大矩阵的伪逆数甚至可行吗?如果是这样,使用哪些算法或软件库?我有一个大型的计算集群,因此欢迎使用并行方法。
This answer指向R包biglm。那行得通吗?有人用过吗?我通常使用Python工作,但不介意使用其他语言和工具来完成此特定任务。
最佳答案
与直接通过伪逆计算最小二乘解相比,使用直接收敛到最小二乘解的块迭代算法可能会更好。参见Charlie Byrne的“Applied Iterative Methods”。这些算法与Krylov子空间方法密切相关,但已进行了调整,以便于计算。您可以通过阅读他的这本preprint of another的第3章获得介绍。