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?
linear-algebra
optimization
python
eigenvalues
Yaroslav Bulatov
la source
la source
Réponses:
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) :
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.la source
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)
la source