
148
7
章 回帰:レコメンド
うになりました。さらに二つを合わせたElastic netも気兼ねなく用いることができます。
7.2.2
scikit-learn
の
Lasso
と
Elastic net
を使用する
それでは、Elastic netを使ってみたいと思います。scikit-learnを用いることで、先ほどの最小二
乗法による回帰をElastic netによる回帰に簡単に差し替えることができます。
from sklearn.linear_model import ElasticNet
en = ElasticNet(fit_intercept=True, alpha=0.5)
先ほどは
lr
という名前の変数を用いましたが、ここでは
en
という変数名を用います。必要な変更
は上のコードだけです。結果は私たちの想定した通りになります。訓練誤差は5.0(前は4.6)に増加し
たのに対して、交差検定を用いた誤差は5.4(前は5.6)に減少しま
した。訓練誤差は大きくなりました
が、汎化能力を高くすることができました。ちなみに、L1罰則項を追加するためには
Lasso
クラス
を、L2罰則項を追加するためには
Ridge
クラスを用います。
図7-3は、罰則項を用いない場合の回帰(点線)とLasso回帰の場合(実線)を示します。Lasso回
帰のほうが、直線が水平に近くなっていることがわかります。まだ、Lasso回帰の恩恵が明確ではあり
ませんが、入力変数が多い場合、より顕著にその恩恵がわかることでしょう。それでは、入力