Estou usando a Decomposição de Valor Singular como uma técnica de redução de dimensionalidade.
Dados os N
vetores de dimensão D
, a idéia é representar os recursos em um espaço transformado de dimensões não correlacionadas, que condensa a maioria das informações dos dados nos vetores próprios desse espaço em uma ordem decrescente de importância.
Agora estou tentando aplicar esse procedimento aos dados de séries temporais. O problema é que nem todas as seqüências têm o mesmo comprimento, portanto, não posso realmente construir a num-by-dim
matriz e aplicar SVD. Meu primeiro pensamento foi preencher a matriz com zeros, construindo uma num-by-maxDim
matriz e preenchendo os espaços vazios com zeros, mas não tenho tanta certeza se essa é a maneira correta.
Minha pergunta é como você aborda a SVD de redução de dimensionalidade para séries temporais de diferentes comprimentos? Alternativamente, existem outros métodos semelhantes de representação do espaço próprio geralmente usados com séries temporais?
Abaixo está um trecho do código do MATLAB para ilustrar a ideia:
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
(Estou codificando principalmente em MATLAB, mas estou confortável o suficiente para ler R / Python / .. também)
Respostas:
Existe uma área razoavelmente nova de pesquisa chamada Matrix Completion , que provavelmente faz o que você deseja. Uma introdução muito boa é dada nesta palestra de Emmanuel Candes
fonte
Preencher com zero é ruim. Tente preencher com reamostragem usando observações do passado.
fonte
Apenas um pensamento: talvez você não precise do SVD completo para seu problema. Seja M = USV * o SVD da sua matriz d por n ( ou seja , as séries temporais são as colunas). Para atingir a redução de dimensão você estará usando as matrizes V e S . Você pode encontrá-los diagonalizando M * M = V (S * S) V * . No entanto, porque está faltando alguns valores, você não pode calcular M * M . No entanto, você pode estimar isso. Suas entradas são somas de produtos de colunas de M. Ao calcular qualquer um dos SSPs, ignore os pares que envolvem valores ausentes. Faça uma nova escala de cada produto para dar conta dos valores ausentes: ou seja, sempre que um SSP envolver nk pares, faça uma nova escala de n / (nk). Este procedimento é um estimador "razoável" de M * M e você pode prosseguir a partir daí. Se você quiser ficar mais chique, talvez várias técnicas de imputação ou Matrix Completion ajudem.
(Isso pode ser realizado em muitos pacotes estatísticos, computando uma matriz de covariância em pares do conjunto de dados transposto e aplicando PCA ou análise fatorial a ele.)
fonte
Você pode estimar modelos univariados de séries temporais para as séries 'curtas' e extrapolá-los no futuro para 'alinhar' todas as séries.
fonte
Estou um pouco confuso com o seu código de exemplo, pois parece que você remove a
V
variável do cálculo denewX
. Você deseja modelarX
como um produto de classificação reduzida ou está interessado em um espaço de coluna reduzido deX
? neste último caso, acho que uma abordagem EM-PCA funcionaria. você pode encontrar o código matlab sob o título PCA Probabilístico com valores ausentes .hth,
fonte