Ich verwende Singular Value Decomposition als Methode zur Reduzierung der Dimensionalität.
Bei gegebenen N
Vektoren der Dimension D
besteht die Idee darin, die Merkmale in einem transformierten Raum unkorrelierter Dimensionen darzustellen, der die meisten Informationen der Daten in den Eigenvektoren dieses Raums in abnehmender Reihenfolge der Wichtigkeit verdichtet.
Jetzt versuche ich, dieses Verfahren auf Zeitreihendaten anzuwenden. Das Problem ist, dass nicht alle Sequenzen die gleiche Länge haben, daher kann ich die num-by-dim
Matrix nicht wirklich erstellen und SVD anwenden. Mein erster Gedanke war, die Matrix mit Nullen aufzufüllen, indem num-by-maxDim
ich eine Matrix bildete und die leeren Räume mit Nullen füllte, aber ich bin mir nicht so sicher, ob das der richtige Weg ist.
Meine Frage ist, wie man den SVD-Ansatz der Dimensionsreduktion auf Zeitreihen unterschiedlicher Länge umsetzt. Alternativ gibt es andere ähnliche Methoden zur Darstellung des Eigenraums, die normalerweise für Zeitreihen verwendet werden?
Unten sehen Sie einen Teil des MATLAB-Codes, um die Idee zu veranschaulichen:
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
(Ich programmiere hauptsächlich in MATLAB, aber ich kann auch R / Python / .. lesen.)
Antworten:
Es gibt ein ziemlich neues Forschungsgebiet namens Matrix Completion , das wahrscheinlich das tut, was Sie wollen. Eine wirklich schöne Einführung bietet dieser Vortrag von Emmanuel Candes
quelle
Füllen mit Null ist schlecht. Versuchen Sie, das Resampling mit Beobachtungen aus der Vergangenheit zu füllen.
quelle
Nur ein Gedanke: Möglicherweise benötigen Sie nicht die vollständige SVD für Ihr Problem. Lassen M = USV * kann die SVD Ihrer d von n - Matrix ( dh , sind die Zeitreihen der Spalten). Die Dimensionsreduktion zu erreichen , werden Sie die Matrizen werden unter Verwendung von V und S . Sie finden sie, indem Sie M * M = V (S * S) V * diagonalisieren . Da Ihnen jedoch einige Werte fehlen, können Sie M * M nicht berechnen . Trotzdem kann man es abschätzen. Seine Einträge sind Produktsummen von Spalten von M. Ignorieren Sie beim Berechnen eines der SSPs Paare mit fehlenden Werten. Skalieren Sie jedes Produkt neu, um die fehlenden Werte zu berücksichtigen: Wenn ein SSP nk Paare umfasst, skalieren Sie ihn um n / (nk). Matrix Completion . Diese Prozedur ist ein "vernünftiger" Schätzer für M * M und Sie können von dort aus fortfahren. Wenn Sie schicker werden möchten, vielleicht mehrere Imputationstechniken oder
(Dies kann in vielen statistischen Paketen durchgeführt werden, indem eine paarweise Kovarianzmatrix des transponierten Datensatzes berechnet und auf diesen eine PCA- oder Faktoranalyse angewendet wird.)
quelle
Sie könnten univariate Zeitreihenmodelle für die "kurze" Reihe schätzen und diese in die Zukunft hochrechnen, um alle Reihen "auszurichten".
quelle
Ihr Beispielcode verwirrt mich ein wenig, da Sie die
V
Variable anscheinend aus der Berechnung von entfernennewX
. Möchten SieX
als Produkt mit reduziertem Rang modellieren oder interessieren Sie sich für einen reduzierten Spaltenraum vonX
? Im letzteren Fall würde meiner Meinung nach ein EM-PCA-Ansatz funktionieren. Sie finden Matlab-Code unter dem Titel Probabilistic PCA mit fehlenden Werten .hth,
quelle