Angenommen, ich habe eine dichte Matrix der Größe und der SVD-ZerlegungIn ich die SVD berechnen sich wie folgt: .
R
svd(A)
Wenn eine neue -te Zeile zu hinzugefügt wird , kann man die neue SVD-Zerlegung basierend auf der alten (dh unter Verwendung von , und ) ohne Neuberechnung berechnen SVD von Grund auf neu?
algorithms
svd
linear-algebra
matrix-decomposition
numerics
user1436187
quelle
quelle
rank 1 updates
. Schnelle Online-SVD-Revisionen für leichte Empfehlungssysteme von Brand sind ein zugängliches erstes Papier. Ich habe leider noch nichts für SVD in R implementiert gesehen. Dank CHOLMOD gibt es (updown
vonMatrix
) Cholesky-Updates . Die Sparsamkeit Ihrer Matrix sich wirklich von Ihrer endgültigen Lösung. Nehmen Sie eine dichte oder eine spärliche Matrix an?Antworten:
Ja, eine SVD-Zerlegung kann aktualisiert werden, nachdem der vorhandenen Matrix eine neue Zeile hinzugefügt wurde.
Im Allgemeinen wird diese Problemformulierung " Add One To " als Rang-1-Aktualisierung bezeichnet . Der von @amoeba bereitgestellte MathOverflow-Link zum Thema " Effiziente Rang-2-Aktualisierungen einer Eigenwertzerlegung " ist ein guter erster Schritt, wenn Sie sich eingehender mit der Materie befassen möchten. Das erste Papier bietet eine explizite Lösung für Ihre spezifische Frage. Nur um zu klären, was Rang eins und Rang zwei bedeuten, damit Sie nicht verwirrt werden, wenn Ihr neues ist, dass:EIN∗
Wenn und Vektoren sind, wird dies als Rang-1-Aktualisierung (oder Störung ) bezeichnet. Die Grundlagen dieses Updates werden durch die Sherman-Morrison-Formel vorgegeben . . Wenn die Störung mehr als einen Rang hat, d.u v
Die Woodbury-Formel kommt ins Spiel. Wenn Sie diese Formeln sehen, werden Sie feststellen, dass es sich um viele inverse Formeln handelt. Sie lösen diese nicht direkt. Da Sie bereits viele ihrer Subsysteme gelöst haben (dh Sie haben bereits eine gewisse Zerlegung berechnet), verwenden Sie diese, um schnellere und / oder stabilere Schätzungen zu erhalten. (Deshalb forschen die Leute immer noch auf diesem Gebiet.) Ich habe das Buch " Computational Statistics " von JE Gentle oft als Referenz verwendet. Ich denke, Kap. 5 Die numerische lineare Algebra richtet Sie richtig ein. (Der Überklassiker: " Matrix-Algebra aus Sicht eines Statistikers " von Harville geht leider überhaupt nicht auf Rangaktualisierungen ein .)
Auf der Statistik- / Anwendungsseite sind Rang-1-Aktualisierungen in Empfehlungssystemen üblich, da möglicherweise Tausende von Kundeneinträgen vorhanden sind und die SVD (oder eine bestimmte Zerlegung in diesem Fall) jedes Mal neu berechnet werden, wenn sich ein neuer Benutzer registriert oder ein neues Produkt registriert hinzugefügt oder entfernt ist ziemlich verschwenderisch (wenn nicht unerreichbar). In der Regel sind empfehlenswerte Systemmatrizen spärlich, was die Algorithmen noch effizienter macht. Ein zugängliches erstes Papier ist das Manuskript " Schnelle Online-SVD-Überarbeitungen für leichte Empfehlungssysteme " von M. Brand. Bei dichten Matrizen denke ich, dass ein Blick auf die Arbeiten von Pattern Recognition and Imaging Processing Sie ziemlich weit bringen kann, einen tatsächlichen Algorithmus zu verwenden. Zum Beispiel die Papiere:
alle scheinen das gleiche Problem in ihrem Kern anzugehen; Neue Funktionen sind hinzugekommen und wir müssen unsere Darstellung entsprechend schnell aktualisieren . Beachten Sie, dass diese Matrizen nicht symmetrisch oder sogar quadratisch sind. Eine andere Arbeit von M. Brand kann sich ebenfalls mit diesem Problem befassen (siehe den Aufsatz " Schnelle Modifikationen der Zerlegung dünner Singulärwerte in niedrigen Rängen (2006) " - dies wurde auch in dem am Anfang des Beitrags angegebenen MO-Link erwähnt.) Dort a Viele großartige Artikel zu diesem Thema, aber die meisten sind in der Regel stark mathematisch (z. B. die Artikel von Benaych-Georgesa und Nadakuditi zu " Die singulären Werte und Vektoren von Störungen mit niedrigem Rang von großen rechteckigen Zufallsmatrizen" (2012).") und ich glaube nicht, dass sie bald zu einer Lösung führen werden. Ich würde vorschlagen, dass Sie sich weiterhin auf die Bildverarbeitungsliteratur konzentrieren.
Leider bin ich auf keine R-Implementierungen für Rang-1-Aktualisierungsroutinen gestoßen. Die Antwort auf " Aktualisierbare SVD-Implementierung in Python, C oder Fortran? " Der Computational Science SE enthält eine Reihe von MATLAB- und C ++ - Implementierungen, die Sie in Betracht ziehen können. In der Regel handelt es sich bei der Implementierung von R, Python usw. um Wrapper für C-, C ++ - oder FORTRAN-Implementierungen.
quelle