0

定数関数を非線形関数の和で近似したい。通常の最小二乗法ならできるのですが、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

なげなわが最初に入力と出力から平均を減算することに気付きました。これにより、出力がゼロになり、なげなわから生じるすべての重みがゼロになります。これを回避する方法はありますか?または、重みのまばらな結果を取得する別の方法はありますか?

4

1 に答える 1

0

私が間違っていなければ、LASSO は、出力に関する情報を持たない予測子 (入力変数) を削除しようとします。

あなたの例では、常に同じ値(一定の出力)を与える(適合する)時間依存変数の線形結合がないため、LASSOは入力(およびそれらの組み合わせ)のどれも出力に関する情報を持っていないと判断します。それらは相関しません。

LASSO はエラスティック ネットの特殊なケースです。'Alpha' パラメーターは既定で 1.0 で、'Alpha' が高いほど、選択される予測子が少なくなります。2 つの予測子: x(:,1) と x(:,3) は高度に相関しているため (r=0.77)、たとえば、'Alpha' パラメーターを 0.5 に設定しようとします。非常に低い 'Alpha's 値でも、出力は常に 0 です。一定の出力を達成するために、すべての予測変数が不要になります。つまり、常に同じ出力を達成するために、入力変数は必要ありません。

間違っていないことを願っています。

PS: 通常の最小二乗法はバックスラッシュ ('\') で計算されます。参照: http://www.mathworks.es/es/help/matlab/ref/lscov.html

一番!

于 2014-10-08T17:07:44.077 に答える