ridge回帰とlasso回帰

# 概要

ridge回帰とlasso回帰について個人的に理解/納得できたことがあるので、その備忘としてのメモ。
数学が大嫌いな人間が、こういう風に解釈したら納得できた、という程度のメモである。数学的に正しいかどうかは全く保証しないので、注意されたし。

どちらも線形回帰を拡張したもの。

なぜ拡張するかと言えば、線形回帰に問題があるから。具体的には、過学習しやすい、ということ。
さらに、おまけ程度ではあるものの、lasso回帰では、特徴量削減（変数削減）ができるというおまけ効果もついてくる。



# 線形回帰（多項回帰）の振り返り

単純なところで考えると、↓の形で予測をする線形回帰を考える。$\hat{y_i}$が予測で、$w_0$は切片、$w_{1,i}$はi番目の変数に対する回帰係数を表す。

$\hat{y_i} = w_0 + w_1 * x_{1,i}$


この時、最小二乗誤差で考えた時の誤差関数は↓のようになる。

$$
E = \sum_{i=1}^n  \frac{1}{2} (y_i - (w_0 + w_1 * x_{1,i}) )^2
$$


上で述べたように、単に最小二乗誤差で考えると、過学習してしまうことがあるため、誤差関数に対してペナルティ項をつけることで、過学習を防ぐ必要がある。そこで出てくるのが、ridge回帰とlasso回帰である。

# risge回帰とlasso回帰

両方とも↓の式で表されるが違いは次数の違いである。

- ridge回帰：2次 → 回帰係数の二乗 → $q=2$
- lasso回帰：1次 → 回帰係数の絶対値 → $q=1$

$$
E = \sum_{i=1}^n  \frac{1}{2} (y_i - (w_0 + w_1 * x_{1,i}) )^2 + \frac{\alpha}{2} \sum_{k=0}^m( |w_k| ^q)
$$

なぜ、回帰係数の二乗和をペナルティで与えているのかと言えば（数学的根拠は理解し切れていないが）、過学習した時に起こる事象を抑えたいため、と直感的に理解した。それは、「過学習した時は、回帰係数の絶対値がばかでかくなる」ということ。

過学習した時に起こる事象として、回帰係数が馬鹿でかくなる（数万とか数十万とか）ので、そういうアホみたいなことが起きて欲しくないので、回帰係数に対してペナルティをかけてあげることで、過学習しないようにする、という形なのだと理解した。


実際は上の数式を最小化するようにアルゴリズムが動いているわけではなく、下のように制約条件付きの最小化問題として解いている模様。

$$
目的関数 \qquad \sum_{i=1}^n  \frac{1}{2} (y_i - (w_0 + w_1 * x_{1,i}) )^2
$$

$$
制約式 \qquad \sum_{k=0}^m( |w_k| ^q) \leq \eta
$$

$\eta$というのは、$E = \sum_{i=1}^n  \frac{1}{2} (y_i - (w_0 + w_1 * x_{1,i}) )^2 + \frac{\alpha}{2} \sum_{k=0}^m( |w_k| ^q)$の式をラグランジュ未定乗数法で解いた時の定数なのだそうだが、詳細は理解していない。
ただ一方で、個人的な感覚としては同じ問題を解いている、というかこういった条件式付きの最適化問題を解こうとするときの方法としてラグランジュ未定乗数法の解き方がある、と筆者は解釈している。

そのため、実際は「ペナルティ付きの誤差関数を解く→条件付き目的関数最小化問題」という流れになったのだろうが、これを理解する時の考え方は逆で、「条件付き目的関数最小化問題→（を定式化したものが）→ペナルティ付きの誤差関数を解く」と理解すれば良さそうだと思った。


# ridge回帰とlasso回帰の比較

lasso回帰の方が実務（デジタルマーケティング領域においては、という限定付きであるが）で使うことが多い印象を持った。

なぜなら、lasso回帰は特徴量選択することができるため。lasso回帰では誤差関数を最小化する（=最適化する）過程の中で、回帰係数がゼロになるものを見出してくれる。これをスパースな解と言うのだそう。

ちなみに、スパースな解をもつことのメリットがわからない（スパースになると何がうれしいのかがわからなかったので）ので、ChatGPTに聞いたら以下の解答をもらった。

```markdown
**メリット:**

1. **モデルの解釈性が向上する:** スパースな解は、重要な特徴量だけを使ってモデルを構築する傾向があります。そのため、どの特徴量が予測に寄与しているのかを理解しやすくなります。
2. **計算効率が向上する:** スパースな解を得ることで、モデルの計算が簡略化される場合があります。特に大規模なデータセットや高次元の特徴空間では、計算効率の向上が顕著に現れます。
3. **過学習を抑制する:** スパースな解は、過剰適合（過学習）のリスクを軽減する傾向があります。過学習が抑制されると、モデルが未知のデータに対してより汎化性能が高くなる可能性があります。

**デメリット:**

1. **情報の損失:** スパースな解を得るために一部の特徴量を無視することで、モデルが持つ情報量が減少する可能性があります。このため、重要な特徴量が無視されることでモデルの性能が低下する場合があります。
2. **モデルの複雑性:** スパースな解を得るためには、適切な正則化パラメータの選択や特徴量の選択が必要です。これにより、モデルの調整や解釈がより複雑になる場合があります。
3. **データに依存する:** スパースな解の有用性は、特定のデータセットや問題に依存します。特定の問題においては、スパースな解が必ずしも最適な解ではない場合もあります。
```


ここで筆者が思ったのは、ridge回帰でも同じように回帰係数がゼロになるから特徴量選択ができるのではないかと思ったが、簡単にググってみると「lasso回帰は特徴量選択ができることが、特徴」ということが書いてあることが多かった。かつ、その理由としては、lasso回帰はノルムL1のペナルティを与えており、原点では微分不可能であるから、lasso回帰では回帰係数がゼロになる傾向を持つ（=特徴量選択できる）と記載されていた。

よくわからなかった。


個人的な解釈を試みる。試みた結果、個人的には納得できる結論に持っていくことができたので、数学的には正しくないかもしれないが、腑に落ちたのでひとまずこのような解釈で落ち着くこととする。



まず、ridge回帰の場合に、$w_i=0.1$になったとする。このとき、制約条件式では、2次なので、$w_i^2 = 0.1^2 = 0.01$となる。
となると、制約式である、$\sum_{k=0}^m( |w_k| ^2) \leq \eta$を考えると、0.1程度変化させたところで、その影響はしょせん、0.01程度しかないので、制約式に"収まりやすい"。

一方で、lasso回帰では、$w_i=0.1$の時の制約式への影響がridgeに対して非常に大きい。制約式である、$\sum_{k=0}^m( |w_k|) \leq \eta$で考えると、$w_i=0.1$の影響がダイレクトに響くので、制約条件式を満たすために、回帰係数をridge回帰よりも小さくするためのインセンティブが働くということである。


ということを考えると、確かにridge回帰よりもlasso回帰の方が回帰係数を「より小さくする」インセンティブが大きいので、回帰係数をゼロにするような形で学習を進める ⇒ 特徴量選択に使える、というような結論になることに納得ができた。


※注意：lasso回帰で特徴量選択はするな、という考えもあるため、上で記載したことを鵜呑みにしないで欲しいです。あくまでも個人的にridge回帰とlasso回帰の違いを学んだ時に不思議に思った点について調べてよくわからなかった部分に対して自分なりの解釈を加えただけの備忘録である点はご了承ください。