Я использую 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 / ..)
Ответы:
Существует достаточно новая область исследований под названием « Завершение матрицы» , которая, вероятно, делает то, что вы хотите. В этой лекции Эммануэль Кандес дает очень хорошее введение
источник
Заполнение нулями это плохо. Попробуйте заполнить повторной выборкой, используя наблюдения из прошлого.
источник
Просто мысль: вам может не понадобиться полный SVD для вашей проблемы. Пусть M = USV * будет SVD вашей матрицы d на n ( т. Е. Временные ряды являются столбцами). Для того, чтобы достичь уменьшения размера вы будете использовать матрицы V и S . Вы можете найти их, по диагонали M * M = V (S * S) V * . Тем не менее, потому что вам не хватает несколько значений, вы не можете вычислить M * M . Тем не менее, вы можете оценить это. Его записи являются суммами произведений столбцов М . При вычислении любого из SSP игнорируйте пары, содержащие пропущенные значения. Масштабируйте каждый продукт, чтобы учесть пропущенные значения: то есть, когда SSP включает nk пар, масштабируйте его на n / (nk). Эта процедура является «разумной» оценкой M * M, и вы можете перейти оттуда. Если вы хотите стать более любопытным, возможно , вам помогут несколько методов вменения или Матричное завершение .
(Это может быть выполнено во многих статистических пакетах путем вычисления попарно ковариационной матрицы транспонированного набора данных и применения к нему PCA или факторного анализа.)
источник
Вы можете оценить одномерные модели временных рядов для «коротких» рядов и экстраполировать их в будущее, чтобы «выровнять» все ряды.
источник
Я несколько смущен вашим примером кода, так как кажется, что вы отбрасываете
V
переменную из вычисленияnewX
. Вы ищете модельX
с пониженным рейтингом или вас интересует уменьшенное пространство столбцовX
? в последнем случае, я думаю, подход EM-PCA будет работать. Вы можете найти код Matlab под заголовком Вероятностный PCA с пропущенными значениями .НТН,
источник