更新:2024/12/10
【scikit-learn】ElasticNetの意味と使い方について


はるか
ElasticNetは、LassoとRidgeを組み合わせたもの。

ふゅか
そうそう!両方のいいとこ取りがElasticNetなんだ!
1. ElasticNetとは?
ElasticNetは、回帰分析において使用される正則化手法の一つです。ElasticNetは、Lasso回帰(L1正則化)とRidge回帰(L2正則化)の両方を組み合わせたモデルで、それぞれのメリットを活かしながら、欠点を補完します。
1.1. 背景:回帰分析と正則化
回帰分析では、モデルがデータに過剰に適合する(過学習)問題を防ぐために「正則化」という技術が使われます。正則化は、モデルの複雑さを制限することで、汎化性能を高める手法です。以下の2つが代表的な正則化手法です。
- Lasso回帰(L1正則化)特徴量の中から不要なものを完全に「ゼロ」にすることで特徴量選択が可能になります。ただし、相関の強い特徴量がある場合、どちらか一方しか選ばれない傾向があります。
- Ridge回帰(L2正則化)すべての特徴量を残しつつ、モデルの重みの2乗をペナルティとして与えます。
1.2. ElasticNetの数式
ElasticNetの目的関数は以下のように定義されます。
ここで
- は目的変数(予測したい値)
- は説明変数(特徴量)
- は回帰係数
- がLasso回帰のペナルティ項
- がRidge回帰のペナルティ項
- と はハイパーパラメータ(調整値)

ふゅか
ElasticNetの目的関数って、L1とL2が混ざってるよね!
2. ElasticNetの実装例
ElasticNetは、Pythonのscikit-learnライブラリで次のように実装できます。
alpha
: 全体の正則化の強さを制御します。l1_ratio
: L1正則化(Lasso)の割合を設定します。0
でRidge、1
でLasso、間でElasticNet。
2.1. ハイパーパラメータの調整方法
ElasticNetには主に2つのハイパーパラメータがあります:
alpha
(正則化の強さ)l1_ratio
(L1とL2のバランス)
これらを最適化するには、グリッドサーチを利用します。
実際に動かすと、次のようになります。