Ich löse ein System mit Singularwertzerlegung. Die Singularwerte (vor der Skalierung) sind:
1.82277e+29
1.95011e+27
1.15033e+23
1.45291e+21
4.79336e+17
7.48116e+15
8.31087e+12
1.71838e+11
5.63232e+08
2.17863e+08
9.02783e+07
1.72345e+07
1.73889e+05
8.09382e+02
2.16644e+00
Ich habe festgestellt, dass das Akzeptieren aller Singularwerte und des damit verbundenen Beitrags zu meinem Lösungsvektor zu schlechten Ergebnissen führt. Ich skaliere sie alle nach der größten Zahl und erhalte singuläre Werte von:
1.0
1.06986e-02
6.31091e-07
7.97089e-09
2.62971e-12
4.10428e-14
4.55948e-17
9.42732e-19
3.08998e-21
1.19523e-21
4.95281e-22
9.45510e-23
9.53980e-25
4.44040e-27
1.18854e-29
Die beste Lösung wird nur schlecht, wenn ich die letzten beiden einbeziehe, und wird erst um die Amtszeit gut.
Wenn ich die letzten beiden Begriffe einbeziehe, sinkt die Genauigkeit stark. Warum ist das so? Was sind die Kriterien für das Einschließen / Nichteinschließen von Singularwerten?
Ich beurteile die Antworten auf meine Lösungen daran, wie gut sie meinen verrauschten Daten entsprechen.
linear-algebra
regression
svd
drjrm3
quelle
quelle
Antworten:
Wie JM erwähnte, ist es jedoch viel stabiler, die Bildung von zu vermeiden :AHA
Zuerst müssen wir die Singularwertzerlegung dann können wir die Pseudoinverse durch wobei
Die Lösung kann dann berechnet werden als
quelle
Augh !! Nein, nein , tausendmal, nein !
Der Grund, warum Menschen SVD verwenden, besteht genau darin, zu vermeiden, dass die produktübergreifende Matrix , da die Bildung dieser Matrix ein gutes Rezept für die Bildung schlecht konditionierter linearer Systeme ist! Die Zerlegung soll direkt auf angewendet werden . (Siehe auch einige meiner vorherigen Antworten .)A⊤A A
Ich habe Ihnen bereits erwähnt, dass das übliche Kriterium für das Nullstellen von Singularwerten darin besteht, sie mit dem Produkt aus dem größten Singularwert und dem Maschinen-Epsilon zu vergleichen. Dies wird jedoch durch Ihre Bildung der Kreuzproduktmatrix in Frage gestellt. Bitte versuchen Sie erneut, die Zerlegung auszuführen, diesmal jedoch auf der Entwurfsmatrix selbst anstelle der produktübergreifenden Matrix. Jeder andere Weg ist ein offensichtlicher Missbrauch der Zersetzung.
quelle
Ich denke, dass mehrere Leute hier wertvolle Tipps für Ihr Problem gegeben haben.
Zum späteren Nachschlagen könnte Ihre Frage, wie ein schlecht gestelltes lineares Problem der kleinsten Quadrate gelöst werden kann, durch einen Blick auf die immense Literatur zu diesem Problem beantwortet werden.
Insbesondere können Sie die TSVD (Truncated Singular Value Decomposition) als einfache Methode verwenden, um die Lösung zu erhalten: wobei der i-te Singularwert ist, und die i-te Spalte in den Matrizen sind und aus der Faktorisierung , ist die rechte Seite Ihres Problems, und die Notation bedeutet das komplexe Konjugat der Einträge und wird dann zu einer Zeile Vektor, so dass
Das Hauptproblem in dieser Einstellung ist, abgesehen davon, dass die SVD berechnet werden muss, was ziemlich teuer ist, die Auswahl der Anzahl der zu verwendenden Singularwerte, dh . Auch hier gibt es eine Reihe von Möglichkeiten, aber die beliebtesten sind das Diskrepanzprinzip, die generalisierte Kreuzvalidierungsmethode und die L-Kurve.k
All dies (und noch viel mehr) ist in Matlab in der hervorragenden Toolbox Regularization Tools implementiert, die von Prof. Per Christian Hansen verfasst wurde, der auch mehrere Artikel und einige Bücher zu inversen Problemen veröffentlicht hat. Die Toolbox ist einfach zu bedienen und sollte sich leicht in andere Programmiersprachen übersetzen lassen.
Während andere wichtige Erkenntnisse zu Ihrer Anwendung geliefert haben, die darauf hindeuten, dass andere Ansätze besser geeignet sind, ist das Obige eine kurze Zusammenfassung darüber, wie Sie das Problem lösen können, wenn Sie es noch benötigen.
quelle