2010-07-21 8 views
8

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.

+0

¿La matriz tiene alguna estructura de bloque especial? – Joel

+0

@Joel: No, casi todos los elementos son distintos de cero. –

+0

¿Es el pseudoinverso el producto final o está computando algo con él? – user382751

Respuesta

2

Puede ser mejor utilizar un algoritmo iterativo de bloques que converja directamente a la solución de mínimos cuadrados que calcular la solución de mínimos cuadrados a través de la pseudoinversión. Ver "Applied Iterative Methods" por Charlie Byrne. Estos algoritmos están estrechamente relacionados con los métodos del subespacio Krylov, pero están ajustados para facilitar el cálculo. Puede obtener una introducción al mirar el capítulo 3 de este preprint of another de sus libros.

Cuestiones relacionadas