Я використовую сингулярне значення декомпозиції як метод зменшення розмірності.
З огляду на 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 / ..)