← 機械学習テキスト 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:重回帰と多重共線性汎化と過学習・バイアスバリアンス分解 | 数理:最尤法・モーメント法(推定量の作り方と最尤推定量の漸近論)(統計)・正則化(リッジ・Lasso)(統計)

要点(BLUF)

1. なぜ正則化するのか

重回帰と多重共線性 で見たように、特徴量が多い・相関が強いと最小二乗推定 β^OLS\hat\beta_{\text{OLS}}係数が暴れて巨大になり、訓練データのノイズまで拾ってしまいます。これは 汎化と過学習・バイアスバリアンス分解 でいう 高バリアンス=過学習の状態です。

正則化のアイデアは単純です。「データへの当てはまり」だけでなく「係数の大きさ」もコストに含める。当てはまりを少し犠牲にしてでも係数を小さく保てば、データが変わっても予測が安定し、バリアンスが下がります。

minβyXβ2当てはまり(残差二乗和)+λ(係数の大きさ)ペナルティ\min_\beta \underbrace{\|y - X\beta\|^2}_{\text{当てはまり(残差二乗和)}} + \underbrace{\lambda \cdot \text{(係数の大きさ)}}_{\text{ペナルティ}}

要するに:「データに合わせろ、ただし係数は欲張るな」という綱引きを、ハイパーパラメータ λ\lambda で調整します。これは「少しのバイアスを足して大きなバリアンスを消す」取引です。

λ=0\lambda=0 なら通常の最小二乗、λ\lambda\to\infty なら係数はすべて 0 に押し潰されます。間のどこかに汎化誤差の谷(U字の底)があります。

2. Ridge(L2正則化)

ペナルティに 係数の二乗和(L2ノルムの二乗)を使います:

β^Ridge=argminβ yXβ2+λj=1pβj2\hat\beta_{\text{Ridge}} = \arg\min_\beta\ \|y - X\beta\|^2 + \lambda \sum_{j=1}^{p} \beta_j^2

これは β\beta について微分して 0 と置くと 閉形式(解析解) が得られます:

β^Ridge=(XX+λI)1Xy\hat\beta_{\text{Ridge}} = (X^\top X + \lambda I)^{-1} X^\top y

要するに:OLS の (XX)1Xy(X^\top X)^{-1}X^\top y の中身に λI\lambda I を足しただけです。この λI\lambda I が効きます。XXX^\top X が(多重共線性で)ほぼ特異=逆行列が不安定でも、対角に正の λ\lambda を加えることで必ず正則(可逆)になり、解が安定します。OLS が解けない場面でも Ridge は必ず解ける、これが実務上の大きな利点です。

特徴量を直交化した(XX=IX^\top X = I の)理想ケースで見ると本質がはっきりします:

β^jRidge=β^jOLS1+λ\hat\beta_j^{\text{Ridge}} = \frac{\hat\beta_j^{\text{OLS}}}{1+\lambda}

つまり Ridge は各係数を 一律の比率 1/(1+λ)1/(1+\lambda) で縮めるだけ。どの係数も小さくはなりますが、ちょうど 0 になることはありません。これが Ridge の限界(=特徴選択はできない)です。

3. Lasso(L1正則化)とスパース性

ペナルティを 係数の絶対値の和(L1ノルム)に変えます:

β^Lasso=argminβ yXβ2+λj=1pβj\hat\beta_{\text{Lasso}} = \arg\min_\beta\ \|y - X\beta\|^2 + \lambda \sum_{j=1}^{p} |\beta_j|

たった「二乗」を「絶対値」に変えただけですが、結果は劇的に変わります。Lasso は重要でない係数を厳密に 0 にする——つまり自動で特徴選択を行い、スパース(疎)な解を作ります。L1 は微分不可能な「角(キンク)」を βj=0\beta_j=0 に持つため閉形式解はなく、座標降下法などで解きます。

直交化ケースでは Lasso の解は ソフト閾値処理(soft-thresholding) という美しい形になります:

β^jLasso=sign(β^jOLS)(β^jOLSλ)+\hat\beta_j^{\text{Lasso}} = \operatorname{sign}(\hat\beta_j^{\text{OLS}})\,\bigl(|\hat\beta_j^{\text{OLS}}| - \lambda\bigr)_{+}

ここで (z)+=max(z,0)(z)_+ = \max(z, 0)

要するに:すべての係数を λ\lambda だけ 0 方向へ引き、引いた結果が負になったら 0 で止める。「OLS の絶対値が λ\lambda 以下の弱い係数は問答無用で 0」になる。これが Lasso がスパースになる仕組みです。Ridge が「比率で縮める」のに対し、Lasso は「一定量だけ引いて 0 で打ち切る」点が決定的に違います。

なぜ角で 0 になるのか(制約領域の幾何)

正則化は「ペナルティ付き最小化」ですが、等価な 制約付き最小化 として描けます——「残差二乗和を最小化せよ、ただし係数の大きさが一定以下」。この制約領域の形が運命を分けます:

残差二乗和の等高線(楕円)が外側から膨らんで制約領域に最初に触れる点が解です。菱形は角が軸上に飛び出しているため、楕円は高確率でこの角に接します。角では片方の座標がちょうど 0——だから Lasso は 0 を生むのです。円には角がないので、接点が軸上に来る確率は実質ゼロ=Ridge は 0 を作りません。

graph LR
    subgraph L2["L2 Ridge:制約は円"]
        C(("β2軸 ↑ ─ β1軸 →<br/>円と楕円の接点は<br/>軸を外れる → 0にならない"))
    end
    subgraph L1["L1 Lasso:制約は菱形"]
        D{"β2軸 ↑ ─ β1軸 →<br/>角が軸上にあり<br/>楕円が角に接しやすい → β=0"}
    end

図:L1 の菱形は軸上に角を持つため、損失の等高線(楕円)が角に接して片方の係数が 0 になる。L2 の円は滑らかで、接点が軸に乗りにくいので 0 になりにくい。

4. Elastic Net(L1 + L2)

Lasso には弱点があります。強く相関する特徴が群れでいると、Lasso はその中から 1 本だけ気まぐれに残し他を 0 にする(選択が不安定)。また特徴数 pp がサンプル数 nn を超えると最大 nn 個までしか選べません。

Elastic Net は L1 と L2 を足し合わせて両者の良いとこ取りをします:

β^EN=argminβ yXβ2+λ1jβj+λ2jβj2\hat\beta_{\text{EN}} = \arg\min_\beta\ \|y - X\beta\|^2 + \lambda_1 \sum_{j} |\beta_j| + \lambda_2 \sum_{j} \beta_j^2

scikit-learn では λ\lambda と混合比 α[0,1]\alpha\in[0,1] で書き、α=1\alpha=1 で純 Lasso、α=0\alpha=0 で純 Ridge、間が Elastic Net になります(ライブラリにより記法が違うので要確認)。

要するに:「相関する特徴を群れごと扱いたい、でもスパースさも欲しい」というときの折衷案。高次元・相関の強いデータで Lasso 単体より頑健に効きます。

5. λ の選び方(交差検証)

λ\lambda は学習で決まらない ハイパーパラメータなので、訓練誤差で選んではいけません(λ=0\lambda=0 が常に最小になる)。標準的には 交差検証で、複数の λ\lambda 候補について検証誤差を測り、最小(または「最小から1標準誤差以内で最もスパースな λ\lambda」=1-SEルール)を選びます(→ 訓練・検証・テストと交差検証)。

flowchart LR
    A["λ候補を多数用意<br/>(対数スケール)"] --> B["各λで交差検証<br/>検証誤差を測定"]
    B --> C["検証誤差が最小<br/>のλを採用"]
    C --> D["全データで再学習<br/>→ 最終モデル"]

補足:正則化はスケール依存です。係数の大きさを比べる以上、特徴量を標準化してから掛けないと、単位の大きい特徴ほど不当に強くペナルティされます。切片項には通常ペナルティを掛けません。

6. MAP推定としての解釈(ベイズの視点)

正則化は天下りの工夫ではなく、事前分布を置いた最大事後確率(MAP)推定として自然に導けます。誤差をガウスとした線形モデルの対数事後確率は、

logp(βy)=logp(yβ)尤度=二乗誤差に対応+logp(β)事前分布=ペナルティ+const\log p(\beta \mid y) = \underbrace{\log p(y \mid \beta)}_{\text{尤度=二乗誤差に対応}} + \underbrace{\log p(\beta)}_{\text{事前分布=ペナルティ}} + \text{const}

最尤推定(最尤法・モーメント法(推定量の作り方と最尤推定量の漸近論))に「事前分布 logp(β)\log p(\beta)」が足されるだけ。この事前の形がペナルティの正体です:

要するに:Ridge は「係数はゼロ近くに緩く集まる」、Lasso は「係数の多くはピッタリ 0」という事前知識を数式に翻訳したもの。正則化=事前分布、ペナルティの強さ λ\lambda =事前の強さ、と読み替えられます(統計側の議論は 正則化(リッジ・Lasso))。

7. 三手法の比較

Ridge(L2)Lasso(L1)Elastic Net
ペナルティβj2\sum \beta_j^2βj\sum \lvert\beta_j\rvert両方
解の形閉形式あり閉形式なし(座標降下等)閉形式なし
係数を 0 にするしないする(スパース)する
特徴選択不可
相関特徴まとめて縮小1本だけ残しがち群れで残す
事前分布ガウスラプラス両者の混合
制約領域菱形角が丸い菱形

使い分けの目安:全特徴を残しつつ安定させたい→Ridge自動で特徴を絞りたい→Lasso高次元かつ特徴が相関→Elastic Net

⚠️ よくある誤解

対応するシミュレーション

simulations/regularization_path.py:本当に効く特徴が一部だけの回帰データで、正則化の強さ α\alpha を対数スケールで振りながら Ridge と Lasso の係数パスを描きます。Ridge は全係数を滑らかに 00 へ縮小する一方、Lasso は無関係な特徴の係数を途中でちょうど 00 にする(スパース=変数選択)ことを可視化します(幾何的な理由は 正則化の理論)。

Ridge/Lasso の係数パス(Lasso はスパース)

関連ノート