Vecteurs propres d'un petit ajustement de norme

10

J'ai un ensemble de données qui change lentement, et je dois garder une trace des vecteurs propres / valeurs propres de sa matrice de covariance.

J'utilise scipy.linalg.eigh, mais c'est trop cher, et cela n'utilise pas le fait que j'ai déjà une décomposition qui n'est que légèrement incorrecte.

Quelqu'un peut-il suggérer une meilleure approche pour résoudre ce problème?

Yaroslav Bulatov
la source
1
Quelle est la taille de vos données? Avez-vous besoin du système électronique complet ou seulement de certaines des valeurs propres les plus importantes? En avez-vous besoin exactement, ou une approximation suffirait-elle?
cfh
J'ai besoin d'un système eigens complet. J'ai trouvé un algorithme pour mettre à jour l'inverse d'une matrice après une petite mise à jour de la norme en utilisant l'interprétation de régression de l'inverse de la matrice de covariance, j'ai donc supposé que quelque chose de similaire devrait exister pour les vecteurs propres.
Yaroslav Bulatov
Que faites-vous avec cette composition eigend complète? Il pourrait y avoir un meilleur raccourci qui ne passe pas par là ... Et je réitère la question de cfh: "quelle taille"?
Federico Poloni
J'ai 8k fonctionnalités et des millions de points de données, donc la covariance est approximative. C'est pour implémenter cet algorithme. La mise à jour du gradient dépend des valeurs propres de certaines matrices de covariance, et cette matrice de covariance change à chaque étape
Yaroslav Bulatov

Réponses:

5

Une approche naïve consiste à utiliser la solution de valeurs propres de votre matrice comme estimation initiale d'un solveur d'itération itératif pour la matrice . Vous pouvez utiliser QR si vous avez besoin du spectre complet, ou la méthode d'alimentation autrement. Ce n'est cependant pas une approche entièrement robuste, car les valeurs propres d'une matrice ne sont pas nécessairement proches d'une matrice presque voisine (1) , surtout si elle est mal conditionnée (2) .A ( t + δ t )A(t)A(t+δt)

Une méthode de suivi du sous-espace est apparemment plus utile (3) . Un extrait de (4) :

Le calcul itératif d'une paire propre extrême (maximale ou minimale) (valeur propre et vecteur propre) peut remonter à 1966 [72]. En 1980, Thompson a proposé un algorithme adaptatif de type LMS pour estimer le vecteur propre, qui correspond à la plus petite valeur propre de la matrice de covariance de l'échantillon, et a fourni l'algorithme de suivi adaptatif du peignage angle / fréquence avec l'estimateur harmonique de Pisarenko [14]. Sarkar et al. [73] ont utilisé l'algorithme de gradient conjugué pour suivre la variation du vecteur propre extrême qui correspond à la plus petite valeur propre de la matrice de covariance du signal changeant lentement et a prouvé sa convergence beaucoup plus rapide que l'algorithme de type LMS de Thompson. Ces méthodes ont été utilisées uniquement pour suivre une valeur extrême unique et un vecteur propre avec une application limitée, mais plus tard, ils ont été étendus pour les méthodes de suivi et de mise à jour du sous-espace propre. En 1990, Comon et Golub [6] ont proposé la méthode de Lanczos pour suivre la valeur singulière extrême et le vecteur singulier, qui est une méthode courante conçue à l'origine pour déterminer certains problèmes propres symétriques grands et clairsemés.Ax=kx [74].

[6]: Comon, P. et Golub, GH (1990). Suivi de quelques valeurs et vecteurs singuliers extrêmes dans le traitement du signal. Dans Traitement de l'IEEE (p. 1327–1343).

[14]: Thompson, Pennsylvanie (1980). Une technique d'analyse spectrale adaptative pour une fréquence non biaisée

[72]: Bradbury, WW et Fletcher, R. (1966). Nouvelles méthodes itératives pour les solutions du problème propre. Mathématiques numériques, 9 (9), 259-266.

[73]: Sarkar, TK, Dianat, SA, Chen, H. et Brule, JD (1986). Estimation spectrale adaptative par la méthode du gradient conjugué. Transactions de l'IEEE sur le traitement acoustique, de la parole et du signal, 34 (2), 272–284.

[74]: Golub, GH et Van Load, CF (1989). Calcul matriciel (2e éd.). Baltimore: The John Hopkins University Press.

Je dois également mentionner que les solutions aux matrices symétriques, telles que ce que vous devez résoudre compte tenu de votre utilisation scipy.linalg.eigh, sont quelque peu bon marché. Si vous n'êtes intéressé que par quelques valeurs propres, vous pouvez également trouver des améliorations de vitesse dans votre méthode. La méthode Arnoldi est souvent utilisée dans de telles situations.

Spencer Bryngelson
la source
1
merci pour le pointeur, l'algorithme QR semble être un bon point de départ
Yaroslav Bulatov
UNEUNE+λje
ps: linalg.eigh sur une matrice 4k-by-4k prend environ 20 secondes (il n'utilise qu'un seul cœur pour une raison quelconque). J'ai besoin d'environ 0,25 seconde par mise à jour
Yaroslav Bulatov
7

t0O(N3)O(kN2)Nk

Voici quelques références pertinentes:

Composition adaptative à l'échelle des matrices de covariance des données basée sur les perturbations du premier ordre (Champagne, IEEE TSP 42 (10) 1994)

Mise à jour récursive de la décomposition des valeurs propres d'une matrice de covariance (Yu, IEEE TSP, 39 (5) 1991)

Analyse en ligne des composants principaux en haute dimension: quel algorithme choisir? (Cardot et Degras)

Un algorithme stable et rapide pour mettre à jour la décomposition en valeurs singulières (Gu et Eisenstadt, 1994)

GoHokies
la source
malheureusement, je n'ai pas de petites mises à jour de rang, j'ai de petites mises à jour de normes de rang complet
Yaroslav Bulatov
@YaroslavBulatov Je ne connais pas d'algorithme efficace capable de gérer les mises à jour de rang complet de petite norme - le mieux que j'ai pu trouver était cette référence , mais elle ne semble pas très prometteuse. Il existe bien sûr une grande littérature sur la perturbation des valeurs propres que vous voudrez peut-être consulter (voir l'autre réponse).
GoHokies