Я использую Singular Value Decomposition в качестве техники уменьшения размерности.
Заданные N
векторы размерностиD
идея состоит в том, чтобы представить элементы в преобразованном пространстве некоррелированных измерений, в котором большая часть информации данных содержится в собственных векторах этого пространства в порядке убывания важности.
Сейчас я пытаюсь применить эту процедуру к данным временных рядов. Проблема в том, что не все последовательности имеют одинаковую длину, поэтому я не могу построить num-by-dim
матрицу и применить SVD. Моей первой мыслью было num-by-maxDim
заполнить матрицу нулями, построив матрицу и заполнив пустые пространства нулями, но я не уверен, что это правильный путь.
Мой вопрос: как вам SVD подход к уменьшению размерности к временным рядам разной длины? В качестве альтернативы существуют ли другие подобные методы представления собственного пространства, обычно используемые с временными рядами?
Ниже приведен фрагмент кода MATLAB для иллюстрации идеи:
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
(Я пишу в основном в MATLAB, но я достаточно удобен, чтобы читать R / Python / ..)