正則化の世界へようこそ!
皆さん、こんにちは!今回はCS2機械学習のカリキュラムにおいて非常に重要な、「正則化(Regularisation)」というテーマに飛び込んでいきましょう。皆さんも、モデルをトレーニングデータに適合させたら完璧なのに、いざ未知のデータを与えると全く役に立たなかった……という経験はありませんか?それが「過学習(overfitting)」です。正則化は、この問題を解決するための強力な武器になります。
正則化をモデルのための「制限速度」だと考えてみてください。モデルが複雑になりすぎて、データ内のノイズまで「丸暗記」してしまうのを防ぎ、現実世界の予測にも通用する柔軟さを保たせてくれるのです。
過学習とは何か?なぜ起こるのか?
高次元なモデル(パラメータや変数が非常に多いモデル)は、非常に柔軟性が高いのが特徴です。トレーニングセット内のすべてのデータポイントを通り抜けようとします。一見良さそうに聞こえますが、実はこれが問題なのです。
例え話: 試験対策のために、過去問の解答の言い回しをそのまま丸暗記しているような状態を想像してください。もし本番の試験で、数字が少しだけ変わった同じ形式の問題が出たらどうなるでしょう?「論理」ではなく「ノイズ(丸暗記)」しか学んでいないので、手も足も出なくなりますよね。これが過学習です。
クイック復習:バイアスとバリアンスのトレードオフ
- 高バリアンス(High Variance): トレーニングセット内の小さな変動に敏感すぎる状態(過学習)。
- 高バイアス(High Bias): モデルが単純すぎて、データに潜む本質的な傾向を見逃している状態(未学習)。
- 正則化は、バイアスを少しだけ増やすことでバリアンスを大きく減らし、「スイートスポット(最適点)」を見つけるのに役立ちます。
核となる考え方:ペナルティの追加
標準的な回帰(最小二乗法:OLS)では、残差二乗和(RSS)の最小化を目指します:
\( RSS = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \)
正則化では、誤差だけでなく、係数(\(\beta\))の大きさにも注目します。コスト関数に「ペナルティ項」を追加するのです。新しい目標は以下を最小化することです:
\( \text{Cost} = RSS + \text{Penalty} \)
係数が大きくなることにペナルティを課すことで、特定の変数だけに過度に依存したり、モデルが複雑になりすぎたりするのを防ぎます。
1. リッジ回帰(L2正則化)
リッジ回帰では、係数の大きさの2乗に比例するペナルティを課します。
数式:
\( \text{Minimise } \sum_{i=1}^{n} (y_i - \beta_0 - \sum_{j=1}^{p} \beta_j x_{ij})^2 + \lambda \sum_{j=1}^{p} \beta_j^2 \)
リッジ回帰の主な特徴:
- L2ノルム(2乗項)を使用します。
- 係数をゼロの方向に収縮させますが、完全にゼロになることはありません。
- 結果に対して小さな影響を与える変数が多数ある場合に最適です。
数式が難しく見えても大丈夫! 「リッジ回帰は変数をすべて残したまま、それぞれの『音量』を小さくするんだな」と覚えておけばOKです。
2. ラッソ回帰(L1正則化)
LASSOは「Least Absolute Shrinkage and Selection Operator」の略です。ここでは、係数の絶対値に比例するペナルティを課します。
数式:
\( \text{Minimise } \sum_{i=1}^{n} (y_i - \beta_0 - \sum_{j=1}^{p} \beta_j x_{ij})^2 + \lambda \sum_{j=1}^{p} |\beta_j| \)
ラッソ回帰の主な特徴:
- L1ノルム(絶対値)を使用します。
- 変数選択: リッジと異なり、ラッソは一部の係数を完全にゼロにすることができます。
- これにより、役に立たない変数をモデルから「削除」できるため、より単純で解釈しやすいモデルになります。
覚え方のコツ:
Lasso = Less(変数を減らす。不要なものをカット!)
Ridge = Retains(変数をすべて保持。サイズを小さくするだけ!)
要点:
一部の変数だけが重要だと疑われる場合はラッソを、すべての変数が少しずつ結果に貢献していると思う場合はリッジを使いましょう。
調整パラメータ:ラムダ(\(\lambda\))
リッジ回帰とラッソ回帰の両方に \(\lambda\) が登場します。これは調整パラメータ(または複雑性パラメータ)と呼ばれ、モデルに対してどれだけペナルティを課すかを制御します。
\(\lambda\)の動き:
- \(\lambda = 0\):ペナルティ項が消滅します。標準的なOLS回帰に戻ります(過学習のリスク大)。
- \(\lambda \to \infty\):ペナルティが非常に大きくなります。すべての係数(切片を除く)がゼロに近づきます(未学習のリスク大)。
- 目標: 交差検証(Cross-Validation)などの手法を使って、テスト誤差を最小にする最適な \(\lambda\) を見つけ出します。
豆知識:
正則化を適用する前には、必ずデータを標準化(スケーリング)しておく必要があります!係数 \(\beta\) の大きさにペナルティを課すため、変数の単位が異なると(例:年齢と年収)、スケーリングされていないだけで不当なペナルティを受けてしまうからです。
よくある間違いと注意点
1. スケーリングを忘れる: 前述の通り、予測変数は平均0、標準偏差1に標準化しましょう。
2. 切片までペナルティをかける: 通常、切片(\(\beta_0\))にはペナルティを課しません。モデルの上下の移動は自由に行えるようにしておくためです。
3. ラッソが常に優れていると思い込む: ラッソは単純なモデルを作れますが、小さな信号が多数あるような状況では、予測精度においてリッジ回帰の方が優れていることがよくあります。
まとめのクイックチェック
正則化の要約:
1. 目標: パラメータが多いモデルでの過学習を抑える。
2. 手法: RSSコスト関数にペナルティ項(\(\lambda\))を追加する。
3. リッジ (L2): \(\beta\) をゼロに近づける。変数をすべて残す。小さな影響が多数ある場合に最適。
4. ラッソ (L1): \(\beta\) を正確にゼロにできる。変数選択を行う。スパース(疎)な影響の場合に最適。
5. 選択: 交差検証を使って最適な \(\lambda\) を決定する。
最後に
正則化は、アクチュアリーが機械学習を行う上で最も実践的なツールの一つです。グラフに線を引くだけの作業から一歩進んで、未知のデータにも対応できる頑健なモデルを作れるようになります。数式の練習を続けつつ、この「制限速度」の例えを思い出してくださいね。コントロールすることがすべてですよ!