Trattare con l'inverso di una matrice simmetrica (covarianza) definita positiva?


27

In statistica e nelle sue varie applicazioni, spesso calcoliamo la matrice di covarianza , che è definita positiva (nei casi considerati) e simmetrica, per vari usi. A volte, abbiamo bisogno dell'inverso di questa matrice per vari calcoli (forme quadratiche con questo inverso come la (sola) matrice centrale, per esempio). Date le qualità di questa matrice e gli usi previsti, mi chiedo:

Qual è il migliore, in termini di stabilità numerica, il modo di fare informatica o usare (diciamo per forme quadratiche o moltiplicazione matrice-vettore in generale) questo inverso? Qualche fattore che può tornare utile?

Risposte:


14

La fattorizzazione di Cholesky porta a una fattorizzazione di tipo Cholesky dell'inverso con la matrice triangolare superiore .C=RTRC1=SSTS=R1

In pratica, è meglio mantenere il fattore inverso. Se è scarso, di solito è ancora meglio mantenere implicito, poiché i prodotti vettore-matrice possono essere calcolati risolvendo i due sistemi triangolari e .RSy=C1xRTz=xRy=z


25

Una fattorizzazione di Cholesky ha più senso per la migliore stabilità e velocità quando si lavora con una matrice di covarianza, poiché la matrice di covarianza sarà una matrice simmetrica semi-definita positiva. Cholesky è naturale qui. MA...

Se hai intenzione di calcolare una fattorizzazione di Cholesky, prima di calcolare la matrice di covarianza, fatti un favore. Rendi il problema al massimo stabile calcolando una fattorizzazione QR della tua matrice. (Anche un QR è veloce.) Cioè, se si calcolasse la matrice di covarianza come

C=ATA

dove ha rimosso la colonna significa, quindi vedi che quando formi , piazza il numero della condizione. Quindi meglio è quello di formare i fattori QR piuttosto che calcolare esplicitamente una fattorizzazione di Cholesky di .ACAATA

A=QR

Poiché Q è ortogonale,

C=(QR)TQR=RTQTQR=RTIR=RTR

Quindi otteniamo il fattore Cholesky direttamente dalla fattorizzazione QR, sotto forma di . Se un -less fattorizzazione QR è disponibile, questo è ancora meglio dal momento che non è necessario . Un QR -less è una cosa veloce da calcolare, dal momento che non viene mai generato. Diventa semplicemente una sequenza di trasformazioni delle famiglie. (Una colonna ruotata, -less QR sarebbe logicamente ancora più stabile, al costo di un lavoro extra per scegliere i perni.)RTQQQQQ

La grande virtù dell'utilizzo del QR qui è che è altamente numericamente stabile su problemi spiacevoli. Ancora una volta, questo perché non abbiamo mai dovuto formare la matrice di covarianza direttamente per calcolare il fattore Cholesky. Non appena si forma il prodotto , si piazza il numero della condizione della matrice. In effetti, perdi informazioni nelle parti di quella matrice in cui inizialmente avevi pochissime informazioni.ATA

Infine, come sottolinea un'altra risposta, non è nemmeno necessario calcolare e archiviare affatto l'inverso, ma usarlo implicitamente sotto forma di backsolve su sistemi triangolari.


5
E se è necessario valutare una forma quadratica basata su , è possibile farlo stabilmente calcolando , ovvero facendo una sostituzione in avanti e prendendo la norma. C1x,C1x=x,(RTR)1x=RTx2
Christian Clason,

3

L'ho fatto per la prima volta di recente, usando i suggerimenti di MathSE.

SVD è stato raccomandato dalla maggior parte di me, ma ho optato per la semplicità di Cholesky:

Se la matrice , allora decompongo in una matrice triangolare usando Cholesky, in modo tale che . Quindi uso backsubstitution o forwardsstitution (a seconda che scelga L come triangolare superiore o inferiore), per invertire , in modo da avere . Da questo, posso calcolare rapidamente .M=AAMLM=LLLL1M1=(LL)1=LL1


Iniziare con:

M=AA , dove è noto ed è implicitamente simmetrico ed è anche definito positivo.M

Fattorizzazione di Cholesky:

MLL , dove è quadrata e non singolareL

Back-sostituzione:

LL1 , probabilmente il modo più veloce per invertire (non citarmi su questo però)L

Moltiplicazione:

M1=(LL)1=LL1

Notazione utilizzata: gli indici inferiori sono righe, gli indici superiori sono colonne e è la trasposizione diLL1


Il mio algoritmo Cholesky (probabilmente da Ricette numeriche o Wikipedia)

Lij=MijMiMjMiiMiMi

Questo può quasi essere fatto sul posto (è necessario solo spazio temporaneo per gli elementi diagonali, un accumulatore e alcuni iteratori interi).


Il mio algoritmo di sostituzione sostitutiva (da Ricette numeriche, controlla la loro versione poiché potrei aver fatto un errore con il markup LaTeX)

(L1)ij={1/Liiif i=j(Li(LT)j)/Liiotherwise

Poiché appare nell'espressione, l'ordine in cui si itera sulla matrice è importante (alcune parti della matrice dei risultati dipendono da altre parti di essa che devono essere calcolate in anticipo). Controlla il codice Ricette numeriche per un esempio completo nel codice. [Modifica]: in realtà, controlla l'esempio delle ricette numeriche. Ho semplificato troppo usando i punti-prodotti, al punto che l'equazione di cui sopra ha una dipendenza ciclica, indipendentemente dall'ordine in cui iterate ...LT


2

Se sai che la matrice ha un inverso (cioè, se è effettivamente definito positivo) e se non è troppo grande, la decomposizione di Cholesky fornisce un mezzo appropriato per caratterizzare l'inverso di una matrice.

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.