我想用一系列非线性函数近似一个常数函数。我可以用普通的最小二乘法做到这一点,但是套索出现问题,可能是因为要近似的函数是常数。我在下面的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首先从输入和输出中减去均值,因此这将给出零输出,因此套索产生的所有零权重。有没有办法绕过这个?或者另一种获得权重稀疏结果的方法?
答案 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
最佳!