Riduzione della dimensionalità SVD per serie storiche di diversa lunghezza


13

Sto usando la decomposizione del valore singolare come tecnica di riduzione della dimensionalità.

Dati i Nvettori di dimensione D, l'idea è quella di rappresentare le caratteristiche in uno spazio trasformato di dimensioni non correlate, che condensa la maggior parte delle informazioni dei dati negli autovettori di questo spazio in ordine decrescente di importanza.

Ora sto cercando di applicare questa procedura ai dati delle serie temporali. Il problema è che non tutte le sequenze hanno la stessa lunghezza, quindi non posso davvero costruire la num-by-dimmatrice e applicare SVD. Il mio primo pensiero è stato quello di num-by-maxDimriempire la matrice di zeri costruendo una matrice e riempiendo gli spazi vuoti di zeri, ma non sono sicuro che sia il modo corretto.

La mia domanda è: in che modo l'approccio SVD della riduzione della dimensionalità a serie temporali di diversa lunghezza? In alternativa, ci sono altri metodi simili di rappresentazione di eigenspace normalmente utilizzati con le serie temporali?

Di seguito è riportato un pezzo di codice MATLAB per illustrare l'idea:

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

(Sto programmando principalmente in MATLAB, ma sono abbastanza comodo da leggere anche R / Python / ..)


Buona domanda! Penso che puoi migliorare il titolo, potrebbero esserci qualcosa come "dati mancanti" da qualche parte o "serie temporali di diversa lunghezza".
Robin Girard,

1
Non lo definirei "dati mancanti", forse "riduzione della dimensionalità SVD per serie temporali di diversa lunghezza"?
Amro

1
Mi piace il titolo che proponi!
Robin Girard,

1
aiuterebbe anche a sapere perché le serie hanno lunghezze diverse. Ad esempio, se rappresentano la traiettoria di una matita durante un'attività di scrittura a mano, dire lo spostamento X durante la scrittura di una cifra, quindi è possibile allineare le serie temporali in modo che abbiano la stessa lunghezza. È anche importante sapere quale tipo di variazione sei interessato a conservare e cosa non sei.
vqv

Risposte:


5

C'è una ragionevolmente nuova area di ricerca chiamata Matrix Completion , che probabilmente fa quello che vuoi. Un'introduzione davvero piacevole è stata data in questa conferenza di Emmanuel Candes


+1 per il sito Web VideoLecture, non lo sapevo, l'hai menzionato nella domanda sulle lezioni video?
Robin Girard,

Ho letto di queste cose solo di recente. Mi piace molto il recente articolo di Candes e Tao sull'argomento arxiv.org/abs/0903.1476
Robby McKilliam,

2

Riempire con zero è male. Prova a riempire con il ricampionamento usando le osservazioni del passato.


La replica / ricampionamento +1 sono decisamente migliori di zero-padding .. aspetterò comunque e vedrò se ci sono altre idee là fuori :)
Amro

2

Solo un pensiero: potresti non aver bisogno dell'intero SVD per il tuo problema. Lascia che M = USV * sia l'SVD della tua matrice d by n ( cioè , le serie temporali sono le colonne). Per ottenere la riduzione delle dimensioni che verrà usato le matrici V e S . Puoi trovarli diagonalizzando M * M = V (S * S) V * . Tuttavia, poiché si sta perdendo alcuni valori, non è possibile calcolare M * M . Tuttavia, puoi stimarlo. Le sue voci sono somme di prodotti di colonne di M. Quando si calcola uno dei provider di servizi condivisi, ignorare le coppie che implicano valori mancanti. Ridimensionare ogni prodotto per tenere conto dei valori mancanti: ovvero ogni volta che un provider di servizi condivisi comporta nk coppie , ridimensionarlo din / (nk). Questa procedura è uno stimatore "ragionevole" di M * M e puoi procedere da lì. Se vuoi diventare più fantasioso, forse le tecniche di imputazione multipla o Matrix Completion ti aiuteranno.

(Ciò può essere effettuato in molti pacchetti statistici calcolando una matrice di covarianza a coppie del set di dati trasposto e applicando ad esso PCA o analisi fattoriale.)


questa procedura si traduce in una stima di MTMpotrebbe non essere un semidefinito positivo, il che sarebbe negativo.
Shabbychef,

Questo è un buon punto, ma il risultato potrebbe non essere così negativo. Ciò che si spera è che la stima di M * M sia abbastanza vicina al valore reale che la perturbazione degli autovalori sia ragionevolmente piccola. Pertanto, proiettando sull'autospazio corrispondente ai più grandi autovalori, si ottiene solo una leggera perturbazione della soluzione corretta, ottenendo comunque la riduzione dimensionale desiderata. Forse il problema più grande potrebbe essere algoritmico: poiché non si può più assumere la semidefinità, potrebbe essere necessario utilizzare un algoritmo più generico per trovare l'eigensystem.
whuber

1

È possibile stimare modelli di serie temporali univariate per le serie "brevi" ed estrapolarle in futuro per "allineare" tutte le serie.


l'estrapolazione includerebbe la scorrevolezza nella parte riempita che non esiste nella parte esistente. Devi aggiungere casualità ... quindi ricampionamento (e riassociare l'estrapolazione sembra essere una buona idea)
Robin Girard

Estrapolare il modello richiederebbe di campionare il termine di errore che indurrebbe la casualità desiderata.

Entrambi i suggerimenti dell'IMO si riducono alla previsione di valori futuri da quelli esistenti (forse i modelli AR / ARMA?). Immagino che sto ancora sperando in una soluzione che non implichi valori di campionamento (quindi la possibilità di introdurre errori). Oltre a stimare tali modelli è di per sé una forma di riduzione della dimensionalità :)
Amro

1

Sono un po 'confuso dal tuo codice di esempio, in quanto sembra che tu abbia eliminato la Vvariabile dal calcolo di newX. Stai cercando di modellare Xcome un prodotto di rango ridotto o sei interessato a uno spazio di colonna ridotto di X? in quest'ultimo caso, penso che un approccio EM-PCA funzionerebbe. puoi trovare il codice matlab sotto il titolo Probabilistic PCA con valori mancanti .

hth,


Non sto cercando di calcolare un'approssimazione di X di rango ridotto, piuttosto una X trasformata. Vedete il mio obiettivo non è quello di filtrare sequenze rumorose, ma di trovare una rappresentazione con una dimensionalità ridotta (da utilizzare per la classificazione / raggruppamento di serie temporali ) ... Potresti approfondire un po 'l'approccio EM-PCA?
Amro,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.