Me gustaría calcular el Moore–Penrose pseudoinverse de una enorme matriz. Idealmente, me gustaría hacerlo en una matriz que tiene 23 millones de filas y 1000 columnas, pero si es necesario, puedo reducir el número de filas a 4 millones ejecutando solo una parte de mi experimento.Pseudoinverso a gran escala
Obviamente, cargar la matriz en la memoria y ejecutar SVD en ella no va a funcionar. Wikipedia puntos a Krylov subspace métodos y mencionan los métodos Arnoldi, Lanczos, Conjugate gradient, GMRES (generalizada residual mínima), BiCGSTAB (gradiente biconjugate estabilizada), QMR (cuasi mínima residual), TFQMR (transponer libre QMR), y MINRES (mínimos residuales) como uno de los mejores métodos subespaciales de Krylov. Pero no sé a dónde ir desde aquí. ¿Es factible computar el pseudoinverso de una matriz tan grande? Si es así, ¿con qué algoritmos o bibliotecas de software? Tengo un gran cluster informático disponible, por lo que los enfoques paralelos son bienvenidos.
This answer apunta al paquete R biglm. Funcionaría eso? ¿Alguien lo ha usado? Normalmente trabajo en Python, pero no me importa usar otros idiomas y herramientas para esta tarea en particular.
¿La matriz tiene alguna estructura de bloque especial? – Joel
@Joel: No, casi todos los elementos son distintos de cero. –
¿Es el pseudoinverso el producto final o está computando algo con él? – user382751