Autovettori di una piccola regolazione della norma


10

Ho un set di dati che sta lentamente cambiando e devo tenere traccia degli autovettori / autovalori della sua matrice di covarianza.

Ho usato scipy.linalg.eigh, ma è troppo costoso e non usa il fatto che ho già una decomposizione che è solo leggermente errata.

Qualcuno può suggerire un approccio migliore per affrontare questo problema?


1
Quanto sono grandi i tuoi dati? Hai bisogno di un intero eigensystem o solo di alcuni degli autovalori più grandi? Ne hai bisogno esattamente o farebbe un'approssimazione?
cfh

Ho bisogno di un eigensystem completo. Ho trovato un algoritmo per l'aggiornamento inverso di una matrice dopo un piccolo aggiornamento di norma usando l'interpretazione di regressione dell'inverso della matrice di covarianza, quindi ho assunto che qualcosa di simile dovrebbe esistere per gli autovettori.
Yaroslav Bulatov,

Cosa fai con quella completa eigendecomposition? Potrebbe esserci una scorciatoia migliore che non la attraversa ... E ribadisco la domanda di cfh: "quanto è grande"?
Federico Poloni,

Ho caratteristiche 8k e milioni di punti dati, quindi la covarianza è approssimativa. Questo per implementare questo algoritmo. L'aggiornamento del gradiente dipende dagli autovalori di una certa matrice di covarianza e questa matrice di covarianza cambia ad ogni passo
Yaroslav Bulatov

Risposte:


5

A(t)A(t+δt)

Un metodo di tracciamento del sottospazio è apparentemente più utile (3) . Un estratto da (4) :

Il calcolo iterativo di una coppia di autoveni estrema (massima o minima) (autovalore e autovettore) può risalire al 1966 [72]. Nel 1980 Thompson propose un algoritmo adattivo di tipo LMS per la stima dell'autovettore, che corrisponde al più piccolo autovalore della matrice di covarianza del campione, e fornì l'algoritmo di tracciamento adattivo dell'angolo / frequenza che combina con lo stimatore armonico di Pisarenko [14]. Sarkar et al. [73] ha usato l'algoritmo del gradiente coniugato per tracciare la variazione dell'autovettore estremo che corrisponde al più piccolo autovalore della matrice di covarianza del segnale che cambia lentamente e ha dimostrato la sua convergenza molto più veloce dell'algoritmo di tipo LMS di Thompson. Questi metodi sono stati utilizzati solo per tracciare un singolo valore estremo e autovettore con un'applicazione limitata, ma in seguito furono estesi per i metodi di tracciamento e aggiornamento di eigen-subspace. Nel 1990, Comon e Golub [6] hanno proposto il metodo Lanczos per tracciare il valore singolare estremo e il vettore singolare, che è un metodo comune progettato originariamente per determinare alcuni problemi di autovere simmetrici grandi e radiAx=kx

[6]: Comon, P., & Golub, GH (1990). Tracciamento di alcuni valori singolari estremi e vettori nell'elaborazione del segnale. In elaborazione dell'IEEE (pagg. 1327-1343).

[14]: Thompson, PA (1980). Una tecnica di analisi spettrale adattiva per frequenza imparziale

[72]: Bradbury, WW e Fletcher, R. (1966). Nuovi metodi iterativi per soluzioni di autov Problema. Matematica numerica, 9 (9), 259–266.

[73]: Sarkar, TK, Dianat, SA, Chen, H., & Brule, JD (1986). Stima spettrale adattiva mediante il metodo del gradiente coniugato. Transazioni IEEE su elaborazione acustica, vocale e del segnale, 34 (2), 272–284.

[74]: Golub, GH e Van Load, CF (1989). Calcolo di matrici (2a ed.). Baltimora: la John Hopkins University Press.

Dovrei anche menzionare che le soluzioni alle matrici simmetriche, come ciò che devi risolvere dato il tuo uso scipy.linalg.eigh, sono in qualche modo economiche. Se sei interessato solo ad alcuni autovalori, potresti trovare miglioramenti della velocità anche nel tuo metodo. Il metodo Arnoldi viene spesso utilizzato in tali situazioni.


1
grazie per il puntatore, l'algoritmo QR sembra un buon punto di partenza
Yaroslav Bulatov

AA+λI

ps: linalg.eigh su una matrice 4k-by-4k impiega circa 20 secondi (per qualche ragione usa solo core singolo). Ho bisogno di circa 0,25 secondi per aggiornamento
Yaroslav Bulatov,

7

sfortunatamente non ho piccoli aggiornamenti di rango, ho piccoli aggiornamenti di norma di rango completo
Yaroslav Bulatov

@YaroslavBulatov Non sono a conoscenza di un algoritmo efficiente in grado di gestire aggiornamenti di livello completo di piccola norma - il migliore che ho trovato è stato questo riferimento , ma non sembra molto promettente. Esiste ovviamente un ampio corpus di pubblicazioni sulla perturbazione degli autovalori che potresti voler guardare (vedi l'altra risposta).
GoHokies,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.