5.5 スムージングパラメータの自動選択

λ=0.01で試す。曲線がギザギザ。λ=0.1に変えてみる。まだ荒れている。λ=1.0にすると、今度はのっぺりした直線みたいだ……これを何十回も繰り返すのか?しかも「正解を知らないまま」。

この章では、データ自身に「最適な滑らかさ」を決めさせる方法を学びます。 交差検証(Cross-Validation)と一般化交差検証(GCV)が主役です。 λという「つまみ」を手動で回すのではなく、データが自動で最適な位置を教えてくれます。

λと自由度の関係

前章で学んだスムージングスプライン。その数式を振り返ってみましょう。 スムーザー行列 $S_\lambda$ を使って、フィット結果は

$$\hat{f}_\lambda = S_\lambda y$$
という形で書けます。

λが小さければデータを細かく追い、大きければ滑らかに引き離す——これはわかりました。でも、「λ=0.01」という数字を見て、どの程度の滑らかさか直感的にわかるでしょうか?

そこで登場するのが「実効自由度(effective degrees of freedom)」という概念です。

$$df_\lambda = \text{trace}(S_\lambda)$$

これはスムーザー行列 $S_\lambda$ の対角成分の和。 値は1から $N$(データ点数)の間に収まり、大きいほど「柔軟」、小さいほど「滑らか」になります。

λの値を変えると曲線の柔軟性がどう変わるかを示すアニメーション

上のアニメーションでは、同じデータ(sin波状の散布点)に対して3種類のフィットが重なっています。 青い曲線(低df)はほぼ直線に近く、データをほとんど追いません。黄色の曲線(中程度df)はデータのパターンを適切に捉えています。 赤い曲線(高df)はデータに過剰にフィットし、ギザギザしています。

なぜ「自由度」と呼ぶのか?パラメトリックなモデルで $p$ 個の係数がある場合、 残差の自由度は $N - p$ になります。スムージングスプラインでも同様に、 実効的なパラメータ数として $df_\lambda$ が機能するのです。

直感的な対応関係:

  • $df_\lambda = 2$(直線):傾きと切片の2つしか「自由度」がない
  • $df_\lambda = N$:データを完全補間(全点を通る)
  • 実用的には $df_\lambda = 4 \sim 12$ 程度がよく使われる

$S_\lambda$ の対角成分 $S_{\lambda,ii}$ は、 「i番目のデータ点が自分自身の予測にどれほど寄与するか」を表します。 この値は後で交差検証の計算に直接登場します——さて、それはどう使われるのでしょうか?

バイアスとバリアンスのトレードオフ

なぜ「適切なdf」を選ぶことが重要なのか?答えはバイアス・バリアンスのトレードオフにあります。

的当てを想像してみてください。弓を引くとき、2種類の失敗があります: 「常に的の外を狙ってしまう失敗(バイアス)」と、「毎回バラバラな方向に飛んでしまう失敗(バリアンス)」。 予測誤差も同じように分解できます。

$$\text{EPE}(f_\lambda) \approx \sigma^2 + \text{Bias}^2(f_\lambda) + \text{Var}(f_\lambda)$$

3つの項それぞれの意味を見ていきましょう:

dfを変化させるとバイアスとバリアンスがどう変わるかを示すアニメーション

左のグラフでは、dfが増加するにつれてフィット曲線がデータに密着していく様子が見えます。 右のグラフでは、赤いバイアス曲線が減少し、青いバリアンス曲線が増加します。 黄色のEPE(総合誤差)はU字型を描き、その底が最適なdfです。

重要なのは、バイアスとバリアンスはシーソーのような関係にあることです。 一方を下げようとすると、もう一方が上がる。最適なdfは、この2つの合計を最小にする点です。

$$df_\lambda^{\text{opt}} = \underset{df}{\arg\min} \; \text{EPE}(df)$$

「それなら最適なdfを直接計算すれば良いのでは?」と思うかもしれません。 しかし問題があります——真の関数 $f$ は未知です。 バイアスを計算するには「正解」が必要ですが、機械学習の文脈ではそれがわからない。 だから、「見えないデータへの予測力」を代わりの指標として使うのです。

交差検証によるλ選択

最適なdfをどうやって実際に見つけるのか?ここに大きなアイデアがあります。

「訓練に使わなかったデータで、予測がどれくらい当たるか試してみよう」——これが交差検証(Cross-Validation, CV)の本質です。

K-fold Cross-Validationの手順:

  1. データを $K$ 個のグループ(fold)に分ける
  2. $K-1$ 個のグループでモデルを訓練する
  3. 残り1グループで予測誤差を測る
  4. これを $K$ 回繰り返し、平均誤差を計算する
  5. この平均誤差が最小になるλを選ぶ
データをfoldに分けてCV誤差を計算し最小λを探すプロセス

上のアニメーションの上部では、データ点が5色のfoldに分割される様子が見えます。 各foldが順番にテスト用として隔離され、残りで訓練します。 下部のグラフでは、λが変化するにつれてCV誤差の点がプロットされ、U字型の曲線が完成します。 黄色の星印が、CV誤差が最小になる最適なλを示しています。

でも、K-fold CVには欠点があります——「K回モデルを作り直す」計算コストが必要です。 データが大きいと時間がかかる。実はスムージングスプラインには特別な「近道」があるのです。

leave-one-out cross-validation(LOO-CV)の特別な性質:

1点ずつ除いて訓練し直す LOO-CV は、たった1回の計算で求まります:

$$\text{CV}(\lambda) = \frac{1}{N} \sum_{i=1}^N \left( \frac{y_i - \hat{f}_\lambda(x_i)}{1 - S_{\lambda,ii}} \right)^2$$

なぜ一発で計算できるのか?スムーザー行列 $S_\lambda$ が線形だからです。 「i番目の点を除いてモデルを作ったときの誤差」が、実は「全データで作ったモデルの誤差を$(1 - S_{\lambda,ii})$ で割った値」に等しくなるという数学的な性質があります。

分母の $S_{\lambda,ii}$(対角成分)は「i番目の点が自分自身の予測にどれだけ依存しているか」を表します。 この値が大きい(その点への依存度が高い)ほど、LOO-CVで除外したときの影響が大きい—— だから分母が小さくなって、その点の誤差を大きく評価する仕組みです。

さらに計算を簡略化した方法が GCV(一般化交差検証)です:

$$\text{GCV}(\lambda) = \frac{1}{N} \sum_{i=1}^N \left( \frac{y_i - \hat{f}_\lambda(x_i)}{1 - \frac{df_\lambda}{N}} \right)^2$$

個々の対角成分 $S_{\lambda,ii}$ の代わりに、 平均値 $\frac{1}{N}\text{trace}(S_\lambda) = \frac{df_\lambda}{N}$ を使います。 分母の $\left(1 - \frac{df_\lambda}{N}\right)$ が「楽観的すぎる訓練誤差」を補正するペナルティとして機能し、 計算がグッと楽になります。

実践 — 選択結果の見え方

では、実際にGCVでλを選ぶとどうなるのか、具体的なイメージを見てみましょう。

GCVで選んだdfが実際のフィットにどう現れるかを示すアニメーション

右のグラフでは、GCV曲線がU字型を描き、最小点(緑)が最適なλを指しています。 左のグラフでは、その最適λに対応するフィット曲線(黄)が、 過小df(薄い青)・過大df(薄い赤)と並べて表示されます。 最終的に最適曲線だけが明るく残り、2つの「失敗例」が薄くフェードします。

GCVが選んだλで:

$$\hat{\lambda}_{\text{GCV}} = \underset{\lambda}{\arg\min} \; \text{GCV}(\lambda)$$
$$\hat{f} = S_{\hat{\lambda}} y$$

実践的なアドバイスとして、以下の目安を覚えておくと便利です:

  • df = 2〜3: ほぼ直線(多項式回帰と同程度のシンプルさ)
  • df = 5〜7: 中程度の柔軟性(一般的な出発点として有効)
  • df = 10〜15: 高い柔軟性(複雑な非線形関係を捉えたいとき)
  • df ≥ N: 完全補間(過学習の危険域)

一つ注意点があります。CVやGCVは「平均的な予測精度」を最大化しますが、 特定の局所的な特徴を保護するわけではありません。 データの端(境界付近)ではバイアスが大きくなりやすく、 自動選択はあくまで「出発点」として扱うのが賢明です。

実際のデータで GCV を使うと——例えば NMR 化学シフトデータなど—— df ≈ 9 あたりで最小値を示し、その前後では過小・過大フィットになる様子が観察できます。 数値だけで決めず、フィット結果を目で確認することも大切です。

まとめ — データが答えを知っている

この章で学んだことを振り返りましょう。冒頭の問いを思い出してください—— 「λ=0.01で試す → 0.1 → 1.0 → ...これを何十回も繰り返すのか?」

データからCV/GCVを経て最適λと最適フィットを得る流れを示すアニメーション

上のフロー図が示す通り、「データ → CV/GCV → 最適λ → 最適フィット」という 一貫したパイプラインで、手動探索なしにパラメータを決定できます。

鍵となるアイデアをまとめると:

$$\lambda_{\text{opt}} \leftarrow \underset{\lambda}{\arg\min} \; \text{GCV}(\lambda) \leftarrow \text{バイアス-バリアンス最適点}$$

この考え方が重要なのは、スムージングスプラインに限った話ではないからです。 機械学習の多くの手法は「ハイパーパラメータ」を持ちます。 λ(スムージング強度)はその典型例ですが、ニューラルネットワークの学習率、 決定木の深さ、正則化係数なども同様です。

「データから学ぶ」という原則を徹底するなら、ハイパーパラメータもデータから決めるべき—— 交差検証はその哲学の体現です。次の章以降で登場するさまざまなモデルの パラメータ選択でも、この同じ発想が繰り返し登場します。