Ich führe eine Textklassifizierungsaufgabe mit R durch und erhalte eine Dokumentterm-Matrix mit einer Größe von 22490 mal 120.000 (nur 4 Millionen Einträge ungleich Null, weniger als 1% Einträge). Jetzt möchte ich die Dimensionalität mit PCA (Principal Component Analysis) reduzieren. Leider kann R diese riesige Matrix nicht verarbeiten, daher speichere ich diese spärliche Matrix in einer Datei im "Matrix Market Format", in der Hoffnung, einige andere Techniken zur Durchführung von PCA zu verwenden.
Könnte mir jemand einige Hinweise für nützliche Bibliotheken (unabhängig von der Programmiersprache) geben, die PCA mit dieser großen Matrix mühelos ausführen können, oder selbst eine Langhand-PCA erstellen, dh zuerst die Kovarianzmatrix berechnen und Berechnen Sie dann die Eigenwerte und Eigenvektoren für die Kovarianzmatrix .
Was ich möchte, ist, alle PCs (120.000) zu berechnen und nur die Top-N-PCs auszuwählen, die 90% Abweichung ausmachen . In diesem Fall muss ich natürlich von vornherein einen Schwellenwert angeben, um einige sehr kleine Varianzwerte auf 0 zu setzen (in der Kovarianzmatrix). Andernfalls ist die Kovarianzmatrix nicht spärlich und würde eine Größe von 120.000 mal 120.000 haben unmöglich mit einer einzigen Maschine zu handhaben. Außerdem sind die Ladungen (Eigenvektoren) extrem groß und sollten in einem spärlichen Format gespeichert werden.
Vielen Dank für jede Hilfe!
Hinweis: Ich verwende einen Computer mit 24 GB RAM und 8 CPU-Kernen.
quelle
Antworten:
Ich schlage das irlba-Paket vor - es liefert praktisch die gleichen Ergebnisse wie svd, aber Sie können eine kleinere Anzahl singulärer Werte definieren, für die eine Lösung gefunden werden soll. Ein Beispiel für die Lösung des Netflix-Preises mithilfe von Sparse-Matrizen finden Sie hier: http://bigcomputing.blogspot.de/2011/05/bryan-lewiss-vignette-on-irlba-for-svd.html
quelle
Ich schlage vor, SLEPc zu verwenden, um eine partielle SVD zu berechnen. Weitere Informationen finden Sie in Kapitel 4 des Benutzerhandbuchs und in den Manpages zu SVD .
quelle
Ich stimme für Mahout, das auch für andere NLP / TA-Aufgaben gut ist und map / reduction implementiert.
quelle
Ich würde vorschlagen, eine inkrementelle Singulärwertzerlegung zu verwenden, von der es in der Literatur viele gibt. Zum Beispiel:
Alle diese Ansätze reduzieren sich auf Folgendes:
quelle
Sie können immer noch R verwenden.
Revolution R
ist ein Build von R, der Datensätze verarbeitet, die größer als RAM sind. Nutzen Sie die Funktionprincomp
.Es verfügt auch über eine Reihe von Statistikfunktionen, die speziell für Probleme mit Big Data-Stilen entwickelt wurden, die nicht in den Arbeitsspeicher passen, z. B. lineare Regression, logistische Regression, Quantile usw.
Sie können die Vollversion von Academic kostenlos herunterladen, indem Sie das Kästchen "Ich bin ein Akademiker" ankreuzen.
quelle