J'utilise la décomposition en valeurs singulières comme technique de réduction de dimensionnalité.
Étant donné des N
vecteurs de dimension D
, l'idée est de représenter les entités dans un espace transformé de dimensions non corrélées, qui condense la plupart des informations des données dans les vecteurs propres de cet espace dans un ordre décroissant d'importance.
J'essaie maintenant d'appliquer cette procédure aux données de séries chronologiques. Le problème est que toutes les séquences n'ont pas la même longueur, donc je ne peux pas vraiment construire la num-by-dim
matrice et appliquer SVD. Ma première pensée a été de num-by-maxDim
remplir la matrice de zéros en construisant une matrice et en remplissant les espaces vides de zéros, mais je ne suis pas sûr que ce soit la bonne façon.
Ma question est de savoir comment envisagez-vous l'approche SVD de la réduction de la dimensionnalité en séries temporelles de différentes longueurs? Existe-t-il d'autres méthodes similaires de représentation de l'espace propre généralement utilisées avec les séries chronologiques?
Voici un morceau de code MATLAB pour illustrer l'idée:
X = randn(100,4); % data matrix of size N-by-dim
X0 = bsxfun(@minus, X, mean(X)); % standarize
[U S V] = svd(X0,0); % SVD
variances = diag(S).^2 / (size(X,1)-1); % variances along eigenvectors
KEEP = 2; % number of dimensions to keep
newX = U(:,1:KEEP)*S(1:KEEP,1:KEEP); % reduced and transformed data
(Je code principalement dans MATLAB, mais je suis assez à l'aise pour lire R / Python / .. également)
Réponses:
Il existe un domaine de recherche raisonnablement nouveau appelé Achèvement de la matrice , qui fait probablement ce que vous voulez. Une très belle introduction est donnée dans cette conférence d'Emmanuel Candes
la source
Remplir de zéro est mauvais. Essayez de remplir avec un rééchantillonnage en utilisant des observations du passé.
la source
Juste une pensée: vous pourriez ne pas avoir besoin du SVD complet pour votre problème. Soit M = USV * la SVD de votre matrice d par n ( c'est -à- dire que les séries temporelles sont les colonnes). Pour obtenir la réduction de la dimension que vous allez utiliser les matrices V et S . Vous pouvez les trouver en diagonalisant M * M = V (S * S) V * . Cependant, parce que vous manque des valeurs, vous ne pouvez pas calculer M * M . Néanmoins, vous pouvez l'estimer. Ses entrées sont des sommes de produits de colonnes de M. Lors du calcul de l'un des SSP, ignorez les paires impliquant des valeurs manquantes. Redimensionnez chaque produit pour tenir compte des valeurs manquantes: c'est-à-dire que lorsqu'un SSP implique nk paires, redimensionnez-le de n / (nk). Cette procédure est un estimateur "raisonnable" de M * M et vous pouvez procéder à partir de là. Si vous voulez devenir plus amateur, peut-être que plusieurs techniques d'imputation ou l' achèvement de la matrice vous aideront.
(Cela peut être effectué dans de nombreux progiciels statistiques en calculant une matrice de covariance par paire de l'ensemble de données transposé et en lui appliquant l'ACP ou l'analyse factorielle.)
la source
Vous pouvez estimer les modèles de séries chronologiques univariés pour les séries «courtes» et les extrapoler dans le futur pour «aligner» toutes les séries.
la source
Je suis quelque peu confus par votre exemple de code, car il semble que vous supprimiez la
V
variable du calcul denewX
. Cherchez-vous à modéliserX
comme un produit de rang réduit, ou êtes-vous intéressé par un espace de colonne réduit deX
? dans ce dernier cas, je pense qu'une approche EM-PCA fonctionnerait. vous pouvez trouver le code matlab sous le titre PCA probabiliste avec des valeurs manquantes .hth,
la source