リッジ回帰、ラッソ。正直どっちがどっちだかわからなくなることが多々あります。
後輩もできたことだし、ここで一度ちゃんと理解しておこうか。
と思った次第でございます。
先に結論を述べると、
Elastic Netが攻守最強
のようです。
リッジ回帰(Ridge regression)
「Python 機械学習プログラミング」の本によると
リッジ回帰は、L2ペナルティ付きのモデルである。このモデルの式では、最小二乗コスト関数に対して重みの平方和を足し合わせる。
L2ペナルティね、フーン・・・
なんだっけ?
$$ J(\mathbf{w})_{Ridge}=\sum^n_{i=1}(y^{(i)}-\hat{y}^{(i)})^2+\lambda||\mathbf{w}||^2_2 $$
この数式の1項は損失関数と呼ばれる予測値と実測値の誤差の2乗の合計、そして2項目がL2ペナルティと呼ばれる項目である。
この\(J(\mathbf{w})_{Ridge}\)を最小化するために使われるのが最小二乗法。(ここでは割愛)
また、L2は正確には以下の数式
$$ L2: \lambda||\mathbf{w}||^2_2= \lambda\sum^m_{j=1}w^2_j $$
このハイパーパラメータ\(\lambda\)の値を増やすことで、正則化の強さを強くし、
”より強いペナルティを与えることができる” = ”過学習を防げる”
つまり、リッジ回帰は過学習に強いモデルを作成することができる。
どうして正則化の項目を入れてハイパーパラメータ\(\lambda\)をいじると過学習を防ぐことができるのか?
その直感的な説明はこちらのブログがとてもわかりやすいです。
リッジ回帰についてまとめると、
- リッジ回帰は正則項(L2)を持つ損失関数である
- ハイパーパラメータ\(\lambda\)の値を小さくすると正則項による影響が弱くなり過学習よりになる
- 反対に\(\lambda\)を大きくすると過学習が抑制されるが、大きすぎると目的変数に大きな影響を与える特徴量を減らしてしまう。つまり未学習状態になる
LASSO(Least Absolute Shrinkage and Selection Operator)
続いて、LASSOは以下の数式で表すことができる。
$$ J(\mathbf{w})_{LASSO}=\sum^n_{i=1}(y^{(i)}-\hat{y}^{(i)})^2+\lambda||\mathbf{w}||_1 $$
また、L1ペナルティは
$$ L1: \lambda||\mathbf{w}||_1= \lambda\sum^m_{j=1}|w|_j $$
リッジ回帰とかなり似ていますね。いったい何が変わったんや…?というレベル。
よく見ると正則項の\(\lambda\sum^m_{j=1}|w|_j\)のところが違うようです。
LASSOの正則項はリッジ回帰の場合とは異なり、損失関数と正則項の接点が軸上になることがあります。
これにより目的変数への寄与が少ない一部の特徴量の係数がゼロとなり、特徴量の数が減るためリッジ回帰の正則項L2よりも強い特徴量削減の効果があるのです。
イメージの説明はやはりこちらのブログがとてもわかりやすい。
LASSOについてまとめると
- Least Absolute Shrinkage and Selection Operatorの名前の通り、正則項目の特性から特徴量選択の効果がある
- リッジ回帰よりも強い過学習防止効果がある
- デメリットとして特徴量の数がデータ数量よりも多い場合、LASSOは最大でデータ数量分しか説明変数を選択しない
ということで、リッジ回帰とLASSOのお互いの欠点を補う手法がElastic Netです。
Elastic Net
Elastic Netはつまるところ、リッジ回帰とLASSOを組み合わせた手法となる。
$$ J(\mathbf{w})_{ElasticNet}=\sum^n_{i=1}(y^{(i)}-\hat{y}^{(i)})^2+ \lambda_1\sum^m_{j=1}w^2_j +\lambda_2\sum^m_{j=1}|w|_j $$
これにより、正則項L1により特徴量選択性能を持ち、かつ正則項L2によりLASSOの制約を克服することが可能となる。
…
最初からElastic Netを使っておきましょう。という身もふたもない結論でいいんでしょうか?
まぁええか!
まとめ
- リッジ回帰、LASSOなどいろいろあるがElastic Netが攻守最強
- Elastic Netの効果は過学習防止と特徴量選択機能
- ハイパーパラメータλの設定は注意が必要
以上!
コメント