Mi observación y
se obtiene del modelo, $y(n) = \sum_{i=0}^{p-1} r(i) x(n-i) + v(n)$ donde r
son los coeficientes del canal disperso, x
es la entrada unidimensional y v
es un ruido gaussiano blanco aditivo de media cero. y = filter(.)
se utiliza para modelar la ecuación anterior y así crear un filtro FIR o un modelo de media móvil (MA). El orden del modelo MA es p=3
.
Así que, $y = [y(1),y(2),....,y(100)]$ es un vector de 100 elementos. Estoy generando ruido de varianza 0.1
Quiero estimar los coeficientes del canal disperso utilizando LASSO. Como hay p
los coeficientes de los canales, debería obtener p
estimaciones.
Según la ecuación de LASSO, ||rx - y||_2^2 + lambda * ||r||_1
Estoy estimando los coeficientes dispersos, r
. Como la matriz de coeficientes reales contiene p
elementos, debería obtener p
elementos estimados. No estoy muy seguro de que esta sea la forma de hacerlo. No he encontrado ningún ejemplo sobre la aplicación de LASSO a un modelo de serie temporal univariante como ARMA. No sé cómo estimar los coeficientes dispersos utilizando el algoritmo apropiado y necesito ayuda.
La primera parte de la ecuación : $||rx - y||_2^2$ es una formulación de mínimos cuadrados que puedo resolver utilizando el enfoque de mínimos cuadrados. Para aplicar el enfoque de mínimos cuadrados, tengo que organizar la entrada en términos de regresores. Sin embargo, si los coeficientes $\mathbf{r}$ son escasas, entonces debería utilizar el enfoque LASSO. He intentado utilizar la función LASSO de Matlab. Para LASSO, he reordenado los datos de entrada $x$ en términos de regresores, pero no sé si este es el enfoque correcto.
Necesito ayuda. ¿Existe un enfoque para incluir el término de escasez en el LS?
A continuación se muestra el código de LASSO utilizando la función de Matlab. Como ejemplo de juguete estoy asumiendo que el orden del modelo es de lag 3 pero sé que LASSO puede ser aplicado eficientemente a un modelo grande. Puedo probar para un modelo MA de mayor orden que tenga un retardo > 3.
% Code for LASSO estimation technique for
%MA system, L = 3 is the order,
%Generate input
x = -5:.1:5;
r = [1 0.0 0.0];% L elements of the channel coefficients
%Data preparation into regressors
X1 = [ ones(length(x),1) x' x']; %first column treated as all ones since x_1=1
y = filter(r,1,x); % Generate the MA model
[r_hat_lasso, FitInfo] = lasso(X1, y, 'alpha', 1, 'Lambda', 1, 'Standardize', 1);
SALIDA :
Las estimaciones devueltas son r_hat_lasso = 0, 0.657002829714982, 0
Pregunta : Esto difiere mucho de la realidad r
. ¿Estoy entendiendo mal?
ACTUALIZACIÓN : Basándome en la respuesta, he intentado aplicar LASSO a un modelo MA grande con 89 rezagos. Estoy tratando de encontrar lambda
utilizando la validación cruzada. He dividido los datos en muestra de entrenamiento y muestra de retención denotada por las variables iTr
y iHo
respectivamente. Quiero calcular el error cuadrático medio de predicción entre las muestras retenidas en y
y la predicción y
obtenidos con las estimaciones. Estoy obteniendo valores erróneos para el MSE y no puedo entender qué coeficientes estimados utilizar con las muestras retenidas en las líneas [r_hat_lasso, FitInfo] = lasso(X1(iTr,1:end), y(iTr));
[rhatLASSO,stats] = lasso(X1(iTr,2:end),y(iTr),'CV',10);
yLasso = X1(iHo,:)*rLasso;
Estoy recibiendo NaN
como el error. ¿Necesita ayuda con el método correcto para utilizar la validación cruzada y calcular el MSE? El código está abajo:
clear all
clc
%Generate input
N=200;
x=(randn(1,N)*100);
L = 90;
Num_lags = 1:89;
r = 1+randn(L,1);
%Data preparation into regressors
r(rand(L,1)<.7)=0; % 70 of the coefficients are zero
X1 = lagmatrix(x, [0 Num_lags]);
y=X1*r ;
% %Estimation
iTr = rand(N,1)<0.5; %training
iHo = ~iTr; % holdout
% %LASSO
[r_hat_lasso, FitInfo] = lasso(X1(iTr,1:end), y(iTr));
[rhatLASSO,stats] = lasso(X1(iTr,2:end),y(iTr),'CV',10);
% %Picking the hyper parameter, lambda
lassoPlot(rhatLASSO,stats,'PlotType','CV');
rLasso = [stats.Intercept(stats.Index1SE);rhatLASSO(:,stats.Index1SE)];
stats.Index1SE
%
% %ans =
%
% % 87
% %Evaluate predictions on holdout samples
yLasso = X1(iHo,:)*rLasso;
% %Assess prediction error
fprintf('---MSE in holdout sample---\n');
fprintf('MSE LASSO: %f\n',mean((y(iHo)-yLasso).^2));
SALIDA : MSE LASSO: NaN