Używam Singular Value Decomposition jako techniki redukcji wymiarowości.
Biorąc pod uwagę N
wektory wymiaru D
, ideą jest przedstawienie cech w przekształconej przestrzeni o nieskorelowanych wymiarach, która kondensuje większość informacji danych w wektorach własnych tej przestrzeni w malejącym porządku ważności.
Teraz próbuję zastosować tę procedurę do danych szeregów czasowych. Problem polega na tym, że nie wszystkie sekwencje mają tę samą długość, dlatego naprawdę nie mogę zbudować num-by-dim
matrycy i zastosować SVD. Moją pierwszą myślą było num-by-maxDim
wypełnienie macierzy zerami poprzez zbudowanie macierzy i wypełnienie pustych miejsc zerami, ale nie jestem pewien, czy to jest właściwy sposób.
Moje pytanie brzmi: w jaki sposób podejście SVD do redukcji wymiarowości do szeregów czasowych o różnej długości? Alternatywnie, czy istnieją inne podobne metody reprezentacji przestrzeni własnej zwykle stosowane w szeregach czasowych?
Poniżej znajduje się fragment kodu MATLAB ilustrujący ten pomysł:
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
(Piszę głównie w MATLAB, ale czuję się wystarczająco dobrze, aby czytać również R / Python / ..)
Odpowiedzi:
Istnieje całkiem nowy obszar badań o nazwie Matrix Completion , który prawdopodobnie robi to, co chcesz. Naprawdę miłe wprowadzenie znajduje się w tym wykładzie Emmanuela Candesa
źródło
Wypełnianie zera jest złe. Spróbuj wypełnić ponownie próbkowaniem, korzystając z obserwacji z przeszłości.
źródło
Tylko myśl: możesz nie potrzebować pełnej SVD dla swojego problemu. Niech M = USV * będzie SVD twojej d przez n macierzy ( tj. Szeregi czasowe są kolumnami). Aby osiągnąć zmniejszenie wymiaru będziesz używając macierzy V i S . Możesz je znaleźć przekątnie M * M = V (S * S) V * . Jednakże, ponieważ brakuje niektórych wartości, nie można obliczyć m * K . Niemniej jednak możesz to oszacować. Wpisy są sumami iloczynów kolumn M. Podczas obliczania któregokolwiek z dostawców SSP zignoruj pary zawierające brakujące wartości. Ponownie przeskaluj każdy produkt, aby uwzględnić brakujące wartości: to znaczy, ilekroć SSP obejmuje pary nk , przeskaluj go o n / (nk). Ta procedura jest „rozsądnym” estymatorem M * M i możesz zacząć od tego. Jeśli chcesz stać się bardziej wyrafinowany, być może pomoże Ci wiele technik imputacji lub Ukończenie macierzy .
(Można to przeprowadzić w wielu pakietach statystycznych, obliczając parą macierz kowariancji transponowanego zestawu danych i stosując do tego PCA lub analizę czynnikową.)
źródło
Można oszacować jednorodne modele szeregów czasowych dla „krótkich” serii i ekstrapolować je w przyszłości, aby „wyrównać” wszystkie serie.
źródło
Jestem nieco zdezorientowany twoim przykładowym kodem, ponieważ wydaje się, że usuwasz
V
zmienną z obliczeńnewX
. Czy chcesz modelowaćX
jako produkt o zmniejszonej rangi, czy interesuje Cię zmniejszona przestrzeń kolumnyX
? w tym drugim przypadku myślę, że podejście EM-PCA byłoby skuteczne. kod matlab można znaleźć pod tytułem Probabilistic PCA z brakującymi wartościami .hth
źródło