Tengo un conjunto de datos que está cambiando lentamente, y necesito hacer un seguimiento de los vectores propios / valores propios de su matriz de covarianza.
He estado usando scipy.linalg.eigh
, pero es demasiado costoso, y no usa el hecho de que ya tengo una descomposición que es solo un poco incorrecta.
¿Alguien puede sugerir un mejor enfoque para hacer frente a este problema?
linear-algebra
optimization
python
eigenvalues
Yaroslav Bulatov
fuente
fuente
Respuestas:
Un enfoque ingenuo es utilizar la solución de valor propio de su matriz como la suposición inicial de una solución propia iterativa para la matriz . Puede usar QR si necesita el espectro completo, o el método de potencia de lo contrario. Sin embargo, este no es un enfoque completamente sólido, ya que los valores propios de una matriz no están necesariamente cerca de una matriz cercana (1) , especialmente si está mal condicionada (2) .A ( t + δ t )A ( t ) A ( t + δt )
Un método de seguimiento del subespacio es aparentemente más útil (3) . Un extracto de (4) :
También debo mencionar que las soluciones para matrices simétricas, como lo que debe resolver dado su uso
scipy.linalg.eigh
, son algo baratas. Si solo le interesan algunos valores propios, también puede encontrar mejoras de velocidad en su método. El método Arnoldi se usa a menudo en tales situaciones.fuente
Aquí hay un par de referencias relevantes:
Descomposición autoadaptativa adaptativa de matrices de covarianza de datos basadas en perturbaciones de primer orden (Champagne, IEEE TSP 42 (10) 1994)
Actualización recursiva de la descomposición del valor propio de una matriz de covarianza (Yu, IEEE TSP, 39 (5) 1991)
Análisis de componentes principales en línea en alta dimensión: ¿qué algoritmo elegir? (Cardot y Degras)
Algoritmo estable y rápido para actualizar la descomposición del valor singular (Gu y Eisenstadt, 1994)
fuente