Ich habe einen Datensatz, der sich langsam ändert, und ich muss die Eigenvektoren / Eigenwerte seiner Kovarianzmatrix verfolgen.
Ich habe es benutzt scipy.linalg.eigh
, aber es ist zu teuer und es nutzt nicht die Tatsache, dass ich bereits eine Zerlegung habe, die nur geringfügig falsch ist.
Kann jemand einen besseren Ansatz vorschlagen, um dieses Problem zu lösen?
linear-algebra
optimization
python
eigenvalues
Jaroslaw Bulatow
quelle
quelle
Antworten:
Ein naiver Ansatz besteht darin, die Eigenwertlösung Ihrer Matrix als erste Schätzung eines iterativen Eigensolvers für die Matrix A ( t + δ t ) zu verwenden . Sie können QR verwenden, wenn Sie das gesamte Spektrum benötigen, oder die Leistungsmethode anderweitig. Dies ist jedoch kein völlig robuster Ansatz, da die Eigenwerte einer Matrix nicht unbedingt nahe an einer nahezu benachbarten Matrix (1) liegen , insbesondere wenn sie schlecht konditioniert ist (2) .A ( t ) A ( t + δt )
Eine Subraum-Verfolgungsmethode ist anscheinend nützlicher (3) . Ein Auszug aus (4) :
Ich sollte auch erwähnen, dass Lösungen für symmetrische Matrizen, wie das, was Sie aufgrund Ihrer Verwendung lösen müssen
scipy.linalg.eigh
, etwas billig sind. Wenn Sie nur an einigen Eigenwerten interessiert sind, finden Sie möglicherweise auch Geschwindigkeitsverbesserungen in Ihrer Methode. In solchen Situationen wird häufig die Arnoldi-Methode angewendet.quelle
Hier sind einige relevante Referenzen:
Adaptive Eigendekomposition von Datenkovarianzmatrizen basierend auf Störungen erster Ordnung (Champagne, IEEE TSP 42 (10) 1994)
Rekursive Aktualisierung der Eigenwertzerlegung einer Kovarianzmatrix (Yu, IEEE TSP, 39 (5) 1991)
Online-Hauptkomponentenanalyse in hoher Dimension: Welchen Algorithmus wählen? (Cardot und Degras)
Ein stabiler und schneller Algorithmus zur Aktualisierung der Singularwertzerlegung (Gu und Eisenstadt, 1994)
quelle