2010-07-21 11 views
8

Ich möchte die Moore–Penrose pseudoinverse einer enormen Matrix berechnen. Idealerweise würde ich das gerne auf einer Matrix machen, die 23 Millionen Zeilen und 1000 Spalten hat, aber wenn nötig, kann ich die Anzahl der Zeilen auf 4 Millionen reduzieren, indem ich nur einen Teil meines Experiments durchführe.Large-scale pseudoinverse

Offensichtlich funktioniert das Laden der Matrix in den Speicher und das Ausführen von SVD nicht. Wikipedia Punkte auf Krylov subspace Methoden und erwähnen den Arnoldi, Lanczos, Conjugate gradient, GMRES (verallgemeinerte minimalen Rest-), ​​BiCGStab (biconjugate Gradienten stabilisierte), QMB (quasi minimal residual), TFQMR (transponiert freie QMB) und MINRES (minimal residual) Methods als eine der besten Krylov-Subraum-Methoden. Aber ich weiß nicht, wo ich von hier aus hingehen soll. Ist die Berechnung der Pseudoinverse einer so großen Matrix überhaupt machbar? Wenn ja, mit welchen Algorithmen oder Softwarebibliotheken? Ich habe einen großen Computer-Cluster zur Verfügung, so dass parallele Ansätze willkommen sind.

This answer verweist auf das R-Paket biglm. Funktioniert das? Hat jemand es benutzt? Normalerweise arbeite ich in Python, aber es macht mir nichts aus, andere Sprachen und Werkzeuge für diese spezielle Aufgabe zu verwenden.

+0

Hat die Matrix eine spezielle Blockstruktur? – Joel

+0

@Joel: Nein, fast alle Elemente sind ungleich Null. –

+0

Ist das Pseudoinverse das Endprodukt oder berechnen Sie etwas damit? – user382751

Antwort

2

Sie könnten besser einen iterativen Blockalgorithmus verwenden, der direkt zur Lösung der kleinsten Quadrate konvergiert, als die Berechnung der kleinsten Quadrate durch die Pseudoinverse. Siehe "Applied Iterative Methods" von Charlie Byrne. Diese Algorithmen sind eng mit den Krylov-Subraummethoden verwandt, sind jedoch auf einfache Berechnungen abgestimmt. Sie können eine Einführung erhalten, indem Sie Kapitel 3 dieser preprint of another seiner Bücher betrachten.