Eu tenho um conjunto de dados que está mudando lentamente e preciso acompanhar os autovetores / autovalores de sua matriz de covariância.
Estou usando scipy.linalg.eigh
, mas é muito caro e não usa o fato de eu já ter uma decomposição que é apenas um pouco incorreta.
Alguém pode sugerir uma abordagem melhor para lidar com esse problema?
linear-algebra
optimization
python
eigenvalues
Yaroslav Bulatov
fonte
fonte
Respostas:
Uma abordagem ingênua é usar a solução de autovalor de sua matriz como o palpite inicial de um resolvedor de iterativos para a matriz A ( t + δ t ) . Você pode usar o QR se precisar de todo o espectro ou o método de energia de outra forma. Entretanto, essa não é uma abordagem totalmente robusta, pois os autovalores de uma matriz não estão necessariamente próximos de uma matriz quase vizinha (1) , especialmente se estiver mal condicionada (2) .A ( t ) A ( t + δt )
Um método de rastreamento de subespaço é aparentemente mais útil (3) . Um trecho de (4) :
Devo também mencionar que soluções para matrizes simétricas, como o que você deve resolver devido ao seu uso
scipy.linalg.eigh
, são um pouco baratas. Se você estiver interessado apenas em alguns autovalores, também poderá encontrar melhorias de velocidade no seu método. O método Arnoldi é frequentemente usado em tais situações.fonte
Aqui estão algumas referências relevantes:
Composição adaptativa de Eigend de matrizes de covariância de dados com base em perturbações de primeira ordem (Champagne, IEEE TSP 42 (10) 1994)
Atualização recursiva da decomposição de autovalores de uma matriz de covariância (Yu, IEEE TSP, 39 (5) 1991)
Análise on-line de componentes principais em alta dimensão: qual algoritmo escolher? (Cardot e Degras)
Um algoritmo estável e rápido para atualizar a decomposição de valor singular (Gu e Eisenstadt, 1994)
fonte