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');

Figure contains 2 axes objects. Axes object 1 with title Trace Plot of Coefficients Fit by Lasso is empty. Axes object 2 with title Trace Plot of Coefficients Fit by Lasso contains 6 objects of type line. These objects represent LambdaMinMSE, Lambda1SE, B1, B2, B3, B4.

予測子の相関性を計算します。はじめに 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);

Figure contains 2 axes objects. Axes object 1 with title Trace Plot of Coefficients Fit by Elastic Net (Alpha = 0.5) is empty. Axes object 2 with title Trace Plot of Coefficients Fit by Elastic Net (Alpha = 0.5) contains 6 objects of type line. These objects represent LambdaMinMSE, Lambda1SE, Acceleration, Displacement, Horsepower, Weight.

データ カーソルを有効にしてプロットをクリックすると、予測子の名前、係数、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 はより小さなグループまたは個別の予測子を棄却する傾向があります。

参考

| | | |

関連するトピック