Main Content

交差検証による LASSO および Elastic Net

この例では、LASSO と Elastic Net を使用して重量、排気量、馬力および加速度に基づく自動車の燃費 (MPG) を予測する方法を示します。

carbig データ セットを読み込みます。

load carbig

連続 (非カテゴリカル) 予測子を抽出します (LASSO はカテゴリカル予測子を扱いません)。

X = [Acceleration Displacement Horsepower Weight];

10 分割交差検証で LASSO 近似を実行します。

[b,fitinfo] = lasso(X,MPG,'CV',10);

結果をプロットします。

lassoPlot(b,fitinfo,'PlotType','Lambda','XScale','log');

MATLAB figure

予測子の相関性を計算します。はじめに NaN を削除します。

nonan = ~any(isnan([X MPG]),2);
Xnonan = X(nonan,:);
MPGnonan = MPG(nonan,:);
corr(Xnonan)
ans = 4×4

    1.0000   -0.5438   -0.6892   -0.4168
   -0.5438    1.0000    0.8973    0.9330
   -0.6892    0.8973    1.0000    0.8645
   -0.4168    0.9330    0.8645    1.0000

一部の予測子は非常に相関性が高いため、Elastic Net 近似を実行します。Alpha = 0.5 を使用します。

[ba,fitinfoa] = lasso(X,MPG,'CV',10,'Alpha',.5);

結果をプロットします。曲線を識別できるようにするため、各予測子に名前を付けます。

pnames = {'Acceleration','Displacement','Horsepower','Weight'};
lassoPlot(ba,fitinfoa,'PlotType','Lambda','XScale','log',...
    'PredictorNames',pnames);

MATLAB figure

データ カーソルを有効にしてプロットをクリックすると、予測子の名前、係数、Lambda の値、およびその当てはめに関連した b 内の列を示す点のインデックスが表示されます。

ここでは、Elastic Net と LASSO の結果はあまり似ていません。また、Elastic Net プロットには、Elastic Net 手法の顕著な品質特性が反映されています。Elastic Net では、Lambda が大きくなっても (プロットの左側に向かっても) 3 つの係数が非ゼロのままであり、これらの 3 つの係数はほぼ同じ Lambda の値で 0 に達します。これに対して LASSO プロットでは、3 つの係数のうち 2 つが同じ値の Lambda で 0 になり、もう 1 つの係数は大きい値の Lambda について非ゼロのままであることが示されています。

この挙動は、一般的なパターンを説明しています。通常、Elastic Net は Lambda が増えるにつれて、相関性の高い予測子のグループを保持するか、または棄却する傾向があります。これに対して、LASSO はより小さなグループまたは個別の予測子を棄却する傾向があります。

参考

| | | |

関連するトピック