ラッソ回帰とリッジ回帰の理論

## はじめに
**ラッソ回帰（L1正則化）とリッジ回帰（L2正則化）の理論について解説していきます。**
この解説では線形回帰の理解が前提となりますので、線形回帰を学びたい方は[こちら](https://qiita.com/oki_kosuke/items/438a9ab2e6077148f9f9)をご覧ください。特に以下の内容について解説します。サンプルデータを用いたPythonでの実装方法についてはまた投稿します。

- ラッソ回帰、リッジ回帰とは？
- 正則化の概念
- 正則化の説明でよく示される図の説明

※機械学習やプログラミング関係の内容を他にも投稿していますので、よろしければ[こちら](https://qiita.com/oki_kosuke/items/34b1071224953776c211#%E6%8A%95%E7%A8%BF%E4%B8%80%E8%A6%A7)の一覧から他の投稿も見て頂けますと幸いです。

## ラッソ回帰とリッジ回帰（まとめ）

- **ラッソ回帰（L1正則化）は多くの特徴量の重みを完全に0にして不要なパラメータを削る手法**
- **リッジ回帰（L2正則化）は大きな特徴量にペナルティーを科して過学習を防ぐ手法**

## ラッソ回帰とリッジ回帰（詳細）
線形回帰で最小化する誤差関数Eにノルムと呼ばれるペナルティー（正則化項）を加えたものがラッソおよびリッジ回帰です。誤差関数Eは[線形回帰の理論](https://qiita.com/oki_kosuke/items/438a9ab2e6077148f9f9)で詳細は説明していますが、以下のように表されます。

```math
E=||\boldsymbol{y-Xw}||^2
```

### ラッソ回帰
ラッソ回帰では以下の関数を最小にするような**_w_**を求めます。

```math
\frac{1}{2}E+λ|w|_1
```

ただし、λを正則化の大きさを決定するハイパーパラメータとします。また、L1ノルムは以下で定義されます。

```math
|w|_1 = |w_0| + |w_1| +…+ |w_d|
```

### リッジ回帰
リッジ回帰では以下の関数を最小にするような**_w_**を求めます。

```math
E+λ||w||^2
```

ただし、λを正則化の大きさを決定するハイパーパラメータとします。また、L2ノルムは以下で定義されます。

```math
||w||^2 = |w_0|^2 + |w_1|^2 +…+ |w_d|^2
```


### 正則化項について
L1ノルムは以下のように表され、マンハッタン距離に相当します。

```math
|w_0| + |w_1| +…+ |w_n|
```

L2ノルムは以下のように表され、ユークリッド距離に相当します。

```math
\sqrt{|w_0|^2 + |w_1|^2 +…+ |w_n|^2}
```

二次元(n=2)でL1ノルム（青色）、L2ノルム（赤色）がそれぞれ1（点線）および2（実戦）の領域を以下に図示します。L1ノルムは原点を中心とするひし形、L2ノルムは原点を中心とする円で表され、それぞれの図形はノルムが等しい点の集合と考えることができます。

![lasso_ridge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1057114/16dde3ca-6970-9781-38fd-50bd2fde44cb.png)


### 正則化の説明でよく示される図について

![lasso_ridge3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1057114/24d74427-9510-01b9-0f61-1c236b49ae8d.png)

上の図および以下の説明は[こちら](https://qiita.com/c60evaporator/items/784f0640004be4eefc51)を参考にさせていただきました。非常にわかりやすく勉強になりました。ここでは、二次元のラッソ回帰を例に考えます。赤色で示した点及び楕円は誤差関数Eの等高線です。また、青色で示した線はL1正則化項の等高線です。

![lasso_ridge2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1057114/49cee60b-6ec0-fb2b-218d-e28a47da783d.png)

点Aは誤差関数が最小の点です。ただし、この点では正則化項は大きいです。ラッソ回帰では誤差関数と正則化項の和を最小にすることが求められ、正則化項をある程度小さくすることが必要です。正則化項がもう少し小さくなる点では誤差関数はもう少し大きくなります（点Bのイメージです）。さらに正則化項が小さい点ではトレードオフとして誤差関数が大きくなります（点Cのイメージです）。どこの点で誤差関数と正則化項の和が最小になるかは正則化項にかけるハイパーパラメータによって決まります。どの程度正則化を重視するか（ハイパーパラメータλをいくつにするか）で最適解が決まるようなイメージです。

## ラッソ回帰とリッジ回帰の使い分け
**ラッソ回帰**は特徴量が多く、過学習を防いだりモデルをシンプルにしたりする際に不要なパラメータを削るために用います。**リッジ回帰**は大きな特徴量にペナルティーを与えて重みを調整し、過学習を回避するために用います。
まずはリッジ回帰を試してみて重要そうな特徴量が数少ない場合はラッソ回帰が向いていると言えます。また、解釈しやすい（特徴量の数が少ない）モデルが欲しい場合はラッソ回帰が好まれる傾向にあります。scikit-learnではLassoとRidgeのペナルティを組み合わせたElasticNetクラスがあります。実用上はこのモデルが良い予測を与えることが多いが、ハイパーパラメータを複数調節するコストがかかるというデメリットがある。

## まとめ
ラッソ回帰（L1正則化）とリッジ回帰（L2正則化）の理論について解説しました。

- ラッソ回帰不要なパラメータを削り、リッジ回帰は過学習を防止する
- 線形回帰に対して、パラメータの制限を設けるために正則化項を導入する
- 正則化の説明でよく示される図は誤差関数と正則化項の和を小さくすることを表現している

### 参考
- [AI Academy](https://aiacademy.jp/texts/show/?id=215)
- [回帰モデルにおけるL1正則化とL2正則化の効果](https://breakbee.hatenablog.jp/entry/2015/03/08/041411)
- [リッジ回帰とラッソ回帰の理論と実装を初めから丁寧に](https://qiita.com/Takayoshi_Makabe/items/8f6dcb25124b9dcb1ae8)
- [機械学習で「分からん！」となりがちな正則化の図を分かりやすく解説](https://qiita.com/c60evaporator/items/784f0640004be4eefc51)
- [ノルムの意味とL1，L2，L∞ノルム](https://manabitimes.jp/math/1269)