Was ist der beste Weg, um die Singulärwertzerlegung (SVD) einer sehr großen positiven Matrix (65M x 3,4M) zu berechnen, bei der die Daten extrem dünn sind?
Weniger als 0,1% der Matrix ist nicht Null. Ich brauche einen Weg, der:
- passt in den Speicher (ich weiß, dass Online-Methoden existieren)
- wird in einer angemessenen Zeit berechnet: 3,4 Tage
- wird genau genug sein, aber Genauigkeit ist nicht mein Hauptanliegen und ich möchte in der Lage sein zu kontrollieren, wie viel Ressourcen ich in sie stecke.
Es wäre toll, eine Haskell-, Python-, C # - usw. Bibliothek zu haben, die diese implementiert. Ich benutze weder Mathlab noch R, kann aber bei Bedarf mit R gehen.
Antworten:
Wenn es in den Speicher passt, konstruieren Sie mit dem Matrix-Paket eine dünne Matrix in R und versuchen Sie es mit irlba für die SVD. Sie können angeben, wie viele singuläre Vektoren im Ergebnis enthalten sein sollen. Auf diese Weise können Sie die Berechnung einschränken.
Das ist eine ziemlich große Matrix, aber ich habe mit dieser Methode in der Vergangenheit sehr gute Ergebnisse erzielt.
irlba
ist ziemlich auf dem neuesten Stand der Technik. Es verwendet den implizit neu gestarteten Bidiagonalisierungsalgorithmus von Lanczos .Es kann den Netflix-Preisdatensatz (480.189 Zeilen x 17.770 Spalten, 100.480.507 Einträge ungleich Null) in Millisekunden durchkauen. Ihr Dataset ist ca. 200.000-mal größer als das Netflix-Dataset, daher dauert es erheblich länger. Es ist zu erwarten, dass die Berechnung in ein paar Tagen durchgeführt werden kann.
quelle
Matrix
? Versuchen Sie, die Anzahl der von Ihnen berechneten Singularwerte zu begrenzen. Schauen Sie sich vielleicht nur die Top 10 an.quelle