Estoy usando la descomposición del valor singular como técnica de reducción de dimensionalidad.
Dados los N
vectores de dimensión D
, la idea es representar las características en un espacio transformado de dimensiones no correlacionadas, lo que condensa la mayor parte de la información de los datos en los vectores propios de este espacio en un orden decreciente de importancia.
Ahora estoy tratando de aplicar este procedimiento a datos de series temporales. El problema es que no todas las secuencias tienen la misma longitud, por lo que realmente no puedo construir la num-by-dim
matriz y aplicar SVD. Mi primer pensamiento fue rellenar la matriz con ceros construyendo una num-by-maxDim
matriz y llenando los espacios vacíos con ceros, pero no estoy tan seguro de si esa es la forma correcta.
Mi pregunta es ¿cómo aplica el enfoque SVD de reducción de dimensionalidad a series de tiempo de diferente longitud? Alternativamente, ¿hay otros métodos similares de representación del espacio propio usualmente utilizados con series de tiempo?
A continuación hay un fragmento de código MATLAB para ilustrar la idea:
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
(Estoy codificando principalmente en MATLAB, pero también estoy lo suficientemente cómodo como para leer R / Python / ...)
Respuestas:
Existe un área de investigación razonablemente nueva llamada Matrix Completion , que probablemente haga lo que desee. Emmanuel Candes da una buena introducción en esta conferencia.
fuente
Llenar con cero es malo. Intente rellenar con remuestreo utilizando observaciones del pasado.
fuente
Solo un pensamiento: es posible que no necesite la SVD completa para su problema. Deje M = USV * ser la SVD de su matriz d por n ( es decir , las series temporales son las columnas). Para lograr la reducción de la dimensión que va a utilizar las matrices V y S . Puede encontrarlos diagonalizando M * M = V (S * S) V * . Sin embargo, debido a que le faltan algunos valores, no puede calcular . Al calcular cualquiera de los SSP, ignore los pares que implican valores faltantes. Cambie la escala de cada producto para tener en cuenta los valores faltantes: es decir, cada vez que un SSP incluya nk pares, vuelva a escalarlo en n / (nk). M * M . Sin embargo, puedes estimarlo. Sus entradas son sumas de productos de columnas de M Este procedimiento es un estimador "razonable" de M * M y puede proceder desde allí. Si quieres ponerte más elegante, quizás te ayuden las técnicas de imputación múltiples o Matrix Completion .
(Esto puede llevarse a cabo en muchos paquetes estadísticos calculando una matriz de covarianza por pares del conjunto de datos transpuesto y aplicando PCA o análisis factorial).
fuente
Puede estimar modelos de series temporales univariantes para las series 'cortas' y extrapolarlas en el futuro para 'alinear' todas las series.
fuente
Estoy un poco confundido con su código de ejemplo, ya que parece que eliminas la
V
variable del cálculo denewX
. ¿Está buscando modelarX
como un producto de rango reducido, o le interesa un espacio de columna reducidoX
? en el último caso, creo que un enfoque EM-PCA funcionaría. puede encontrar el código matlab bajo el título Probabilistic PCA con valores faltantes .hth,
fuente