Lidando com o inverso de uma matriz simétrica definida positiva (covariância)?

27

Nas estatísticas e suas diversas aplicações, geralmente calculamos a matriz de covariância , que é positiva definida (nos casos considerados) e simétrica, para vários usos. Às vezes, precisamos do inverso dessa matriz para vários cálculos (formas quadráticas com esse inverso como a (única) matriz central, por exemplo). Dadas as qualidades dessa matriz e os usos pretendidos, eu me pergunto:

Qual é o melhor caminho, em termos de estabilidade numérica, para calcular ou usar (digamos, para formas quadráticas ou multiplicação de vetores de matriz em geral) esse inverso? Alguma fatoração que pode ser útil?

Benjamin Allévius
fonte

Respostas:

14

A fatoração de Cholesky leva a uma fatoração de Cholesky do inverso com a matriz triangular superior .C=RTRC1=SSTS=R1

Na prática, é melhor manter o inverso fatorado. Se é escasso, geralmente é ainda melhor manter implícito, pois os produtos vetoriais de matriz podem ser calculados resolvendo os dois sistemas triangulares e .RSy=C1xRTz=xRy=z

Arnold Neumaier
fonte
25

Uma fatoração de Cholesky faz mais sentido para a melhor estabilidade e velocidade quando você está trabalhando com uma matriz de covariância, uma vez que a matriz de covariância será uma matriz simétrica semi-definida positiva. Cholesky é natural aqui. MAS...

Se você pretende calcular uma fatoração de Cholesky, antes de calcular a matriz de covariância, faça um favor a si mesmo. Torne o problema estável ao máximo, calculando uma fatoração QR da sua matriz. (Um QR também é rápido.) Ou seja, se você calcular a matriz de covariância como

C=ATA

onde teve os meios da coluna removidos, veja que quando você forma , ele quadratura o número da condição. Então é melhor é formar os fatores de QR de em vez de computação explicitamente uma fatoração de Cholesky de .C A A T AACAATA

A=QR

Como Q é ortogonal,

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

Assim, obtemos o fator de Cholesky diretamente da fatoração QR, na forma de . Se um -menos fatoração QR está disponível, este é ainda melhor desde que você não precisa . Um QR sem é uma coisa rápida de calcular, pois nunca é gerado. Torna-se apenas uma sequência de transformações de chefe de família. (Uma coluna dinâmica, o QR sem seria logicamente ainda mais estável, com o custo de algum trabalho extra para escolher as dinâmicas.) Q Q Q Q QRTQQQQQ

A grande virtude de usar o QR aqui é que ele é altamente numericamente estável em problemas desagradáveis. Novamente, isso ocorre porque nunca tivemos que formar a matriz de covariância diretamente para calcular o fator de Cholesky. Assim que você formar o produto , você quadrará o número da condição da matriz. Efetivamente, você perde informações nas partes dessa matriz em que originalmente tinha muito pouca informação para começar.ATA

Finalmente, como outra resposta aponta, você nem precisa calcular e armazenar o inverso, mas usa-o implicitamente na forma de backsolves em sistemas triangulares.

pentavalentcarbon
fonte
5
E se você precisar avaliar uma forma quadrática com base em , poderá fazer isso de forma estável calculando , ou seja, fazendo uma substituição direta e adotando a norma. x , C - 1 x = x , ( R t R ) - 1 x = C1x,C1x=x,(RTR)1x=RTx2
Christian Clason
3

Fiz isso pela primeira vez recentemente, usando sugestões do mathSE.

Acho que o SVD foi recomendado pela maioria, mas optei pela simplicidade de Cholesky:

Se a matriz , decomponho em uma matriz triangular usando Cholesky, de modo que . Em seguida, uso a substituição traseira ou substituição anterior (dependendo de escolher L como triangular superior ou inferior), para inverter , de modo que eu tenha . Com isso, posso calcular rapidamente .M=AAMLM=LLLL1M1=(LL)1=LL1


Começar com:

M=AA , onde é conhecido e é implicitamente simétrico e também é positivo-definido.M

Fatoração de Cholesky:

MLL , onde é quadrado e não singularL

Substituição traseira:

LL1 , provavelmente a maneira mais rápida de inverter (não me cite nisso)L

Multiplicação:

M1=(LL)1=LL1

Notação usada: índices inferiores são linhas, índices superiores são colunas e é a transposição deLL1


Algoritmo My Cholesky (provavelmente de Numerical Recipes ou Wikipedia)

Lij=MijMiMjMiiMiMi

Isso quase pode ser feito no local (você só precisa de armazenamento temporário para os elementos diagonais, um acumulador e alguns iteradores inteiros).


Meu algoritmo de substituição traseira (de Numerical Recipes, verifique sua versão, pois eu posso ter cometido um erro com a marcação LaTeX)

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

Como aparece na expressão, a ordem que você itera sobre a matriz é importante (algumas partes da matriz de resultados dependem de outras partes dela que devem ser calculadas previamente). Verifique o código de Receitas numéricas para obter um exemplo completo no código. [Editar]: Na verdade, basta verificar o exemplo de Receitas numéricas. Eu simplifiquei demais usando produtos de ponto, a ponto de a equação acima ter uma dependência cíclica, independentemente da ordem em que você itera ...LT

Mark K Cowan
fonte
2

Se você sabe que a matriz tem uma inversa (isto é, se é de fato positiva definida) e se não é muito grande, a decomposição de Cholesky fornece um meio apropriado para caracterizar a inversa de uma matriz.

Wolfgang Bangerth
fonte