Vectores propios de un pequeño ajuste normativo

10

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?

Yaroslav Bulatov
fuente
1
¿Qué tan grandes son sus datos? ¿Necesita el sistema propio completo, o solo algunos de los valores propios más grandes? ¿Los necesita exactamente, o lo haría una aproximación?
cfh
Necesito un sistema propio completo. Encontré un algoritmo para actualizar el inverso de una matriz después de una pequeña actualización de la norma utilizando la interpretación de regresión del inverso de la matriz de covarianza, por lo que supuse que debería existir algo similar para los vectores propios.
Yaroslav Bulatov
¿Qué haces con esa descomposición completa? Puede haber un mejor atajo que no lo atraviese ... Y reitero la pregunta de cfh: "¿qué tan grande"?
Federico Poloni
Tengo 8k características y millones de puntos de datos, por lo que la covarianza es aproximada. Esto es para implementar este algoritmo. La actualización de gradiente depende de los valores propios de cierta matriz de covarianza, y esta matriz de covarianza cambia en cada paso
Yaroslav Bulatov

Respuestas:

5

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 )UNA(t)UNA(t+δt)

Un método de seguimiento del subespacio es aparentemente más útil (3) . Un extracto de (4) :

El cálculo iterativo de un par propio extremo (máximo o mínimo) (valor propio y vector propio) puede remontarse a 1966 [72]. En 1980, Thompson propuso un algoritmo adaptativo de tipo LMS para estimar el vector propio, que corresponde al valor propio más pequeño de la matriz de covarianza de la muestra, y proporcionó el algoritmo de seguimiento adaptativo del peinado de ángulo / frecuencia con el estimador armónico de Pisarenko [14]. Sarkar y col. [73] utilizó el algoritmo de gradiente conjugado para rastrear la variación del vector propio extremo que corresponde al valor propio más pequeño de la matriz de covarianza de la señal que cambia lentamente y demostró su convergencia mucho más rápida que el algoritmo de tipo LMS de Thompson. Estos métodos solo se usaron para rastrear un valor extremo único y un vector propio con una aplicación limitada, pero luego se ampliaron para los métodos de seguimiento y actualización del subespacio propio. En 1990, Comon y Golub [6] propusieron el método de Lanczos para rastrear el valor singular extremo y el vector singular, que es un método común diseñado originalmente para determinar algún problema de eigen simétrico grande y escasoUNAX=kX [74].

[6]: Comon, P. y Golub, GH (1990). Seguimiento de algunos valores y vectores singulares extremos en el procesamiento de señales. En el procesamiento del IEEE (págs. 1327-1343).

[14]: Thompson, PA (1980). Una técnica de análisis espectral adaptativo para frecuencia imparcial

[72]: Bradbury, WW y Fletcher, R. (1966). Nuevos métodos iterativos para soluciones del problema propio. Matemática numérica, 9 (9), 259–266.

[73]: Sarkar, TK, Dianat, SA, Chen, H. y Brule, JD (1986). Estimación espectral adaptativa por el método de gradiente conjugado. IEEE Transactions on Acoustic, Speech, and Signal Processing, 34 (2), 272–284.

[74]: Golub, GH y Van Load, CF (1989). Cálculo matricial (2ª ed.). Baltimore: The John Hopkins University Press.

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.

Spencer Bryngelson
fuente
1
gracias por el puntero, el algoritmo QR parece un buen punto de partida
Yaroslav Bulatov
UNAUNA+λyo
ps: linalg.eigh en una matriz de 4k por 4k está tomando alrededor de 20 segundos (solo usa un núcleo por alguna razón). Necesito alrededor de 0.25 segundos por actualización
Yaroslav Bulatov
7

t0 0O(norte3)O(knorte2)nortek

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)

GoHokies
fuente
desafortunadamente no tengo actualizaciones de rango pequeño, tengo actualizaciones de normas pequeñas de rango completo
Yaroslav Bulatov
@YaroslavBulatov No conozco un algoritmo eficiente que pueda manejar actualizaciones completas de rango pequeño: lo mejor que pude encontrar fue esta referencia , pero no parece muy prometedor. Por supuesto, hay una gran cantidad de literatura sobre perturbación de valores propios que es posible que desee ver (ver la otra respuesta).
GoHokies