Lasso的零输出采用恒定曲线拟合

时间:2014-06-04 09:29:53

标签: matlab sparse-matrix lasso

我想用一系列非线性函数近似一个常数函数。我可以用普通的最小二乘法做到这一点,但是套索出现问题,可能是因为要近似的函数是常数。我在下面的Matlab中给出了一个玩具示例:

t = -1:0.01:1; %horizontal axis
x = [exp(-(t+0.5).^2); exp(-t.^2); exp(-(t-0.5).^2);]'; %I use radial basis functions in this example
y = 0.7 * ones(201,1); %Approximate a constant function by a weighted sum of radial basis functions

w = y'/x'; %ordinary least squares works fine
plot(t,w*x'); hold on; plot(t,y,'--k'); axis([-1,1,0,1]); %show results

b = lasso(x,y); %lasso does not work, this gives only zeros
w = b(:,1); %zero weights
plot(t,w*x'); hold on; plot(t,y,'--k'); axis([-1,1,0,1]); %show results

我注意到Lasso首先从输入和输出中减去均值,因此这将给出零输出,因此套索产生的所有零权重。有没有办法绕过这个?或者另一种获得权重稀疏结果的方法?

1 个答案:

答案 0 :(得分:0)

如果我没错,LASSO会尝试删除那些没有输出信息的预测变量(输入变量)。

在您的示例中,没有时间相关变量的线性组合给出(拟合)始终相同的值(常量输出),因此LASSO确定您的输入(及其组合)都没有关于输出的信息;他们没有关联。

LASSO是弹性网的特例。 “Alpha”参数默认为1.0,“Alpha”越高,选择的预测变量越少。作为两个预测变量:x(:,1)和x(:,3)高度相关(r = 0.77),您尝试将'Alpha'参数设置为0.5,例如;即使具有非常低的'Alpha'值,输出也始终为0.所有预测器都被消除以实现恒定输出,即,为了实现始终相同的输出,您不需要任何输入变量。

我希望不要错。

PS:使用反斜杠('\')计算普通最小二乘法。请参阅:http://www.mathworks.es/es/help/matlab/ref/lscov.html

最佳!