λ=0.01で試す。曲線がギザギザ。λ=0.1に変えてみる。まだ荒れている。λ=1.0にすると、今度はのっぺりした直線みたいだ……これを何十回も繰り返すのか?しかも「正解を知らないまま」。
この章では、データ自身に「最適な滑らかさ」を決めさせる方法を学びます。 交差検証(Cross-Validation)と一般化交差検証(GCV)が主役です。 λという「つまみ」を手動で回すのではなく、データが自動で最適な位置を教えてくれます。
前章で学んだスムージングスプライン。その数式を振り返ってみましょう。 スムーザー行列 $S_\lambda$ を使って、フィット結果は
λが小さければデータを細かく追い、大きければ滑らかに引き離す——これはわかりました。でも、「λ=0.01」という数字を見て、どの程度の滑らかさか直感的にわかるでしょうか?
そこで登場するのが「実効自由度(effective degrees of freedom)」という概念です。
これはスムーザー行列 $S_\lambda$ の対角成分の和。 値は1から $N$(データ点数)の間に収まり、大きいほど「柔軟」、小さいほど「滑らか」になります。

上のアニメーションでは、同じデータ(sin波状の散布点)に対して3種類のフィットが重なっています。 青い曲線(低df)はほぼ直線に近く、データをほとんど追いません。黄色の曲線(中程度df)はデータのパターンを適切に捉えています。 赤い曲線(高df)はデータに過剰にフィットし、ギザギザしています。
なぜ「自由度」と呼ぶのか?パラメトリックなモデルで $p$ 個の係数がある場合、 残差の自由度は $N - p$ になります。スムージングスプラインでも同様に、 実効的なパラメータ数として $df_\lambda$ が機能するのです。
直感的な対応関係:
$S_\lambda$ の対角成分 $S_{\lambda,ii}$ は、 「i番目のデータ点が自分自身の予測にどれほど寄与するか」を表します。 この値は後で交差検証の計算に直接登場します——さて、それはどう使われるのでしょうか?
なぜ「適切なdf」を選ぶことが重要なのか?答えはバイアス・バリアンスのトレードオフにあります。
的当てを想像してみてください。弓を引くとき、2種類の失敗があります: 「常に的の外を狙ってしまう失敗(バイアス)」と、「毎回バラバラな方向に飛んでしまう失敗(バリアンス)」。 予測誤差も同じように分解できます。
3つの項それぞれの意味を見ていきましょう:

左のグラフでは、dfが増加するにつれてフィット曲線がデータに密着していく様子が見えます。 右のグラフでは、赤いバイアス曲線が減少し、青いバリアンス曲線が増加します。 黄色のEPE(総合誤差)はU字型を描き、その底が最適なdfです。
重要なのは、バイアスとバリアンスはシーソーのような関係にあることです。 一方を下げようとすると、もう一方が上がる。最適なdfは、この2つの合計を最小にする点です。
「それなら最適なdfを直接計算すれば良いのでは?」と思うかもしれません。 しかし問題があります——真の関数 $f$ は未知です。 バイアスを計算するには「正解」が必要ですが、機械学習の文脈ではそれがわからない。 だから、「見えないデータへの予測力」を代わりの指標として使うのです。
最適なdfをどうやって実際に見つけるのか?ここに大きなアイデアがあります。
「訓練に使わなかったデータで、予測がどれくらい当たるか試してみよう」——これが交差検証(Cross-Validation, CV)の本質です。
K-fold Cross-Validationの手順:

上のアニメーションの上部では、データ点が5色のfoldに分割される様子が見えます。 各foldが順番にテスト用として隔離され、残りで訓練します。 下部のグラフでは、λが変化するにつれてCV誤差の点がプロットされ、U字型の曲線が完成します。 黄色の星印が、CV誤差が最小になる最適なλを示しています。
でも、K-fold CVには欠点があります——「K回モデルを作り直す」計算コストが必要です。 データが大きいと時間がかかる。実はスムージングスプラインには特別な「近道」があるのです。
leave-one-out cross-validation(LOO-CV)の特別な性質:
1点ずつ除いて訓練し直す LOO-CV は、たった1回の計算で求まります:
なぜ一発で計算できるのか?スムーザー行列 $S_\lambda$ が線形だからです。 「i番目の点を除いてモデルを作ったときの誤差」が、実は「全データで作ったモデルの誤差を$(1 - S_{\lambda,ii})$ で割った値」に等しくなるという数学的な性質があります。
分母の $S_{\lambda,ii}$(対角成分)は「i番目の点が自分自身の予測にどれだけ依存しているか」を表します。 この値が大きい(その点への依存度が高い)ほど、LOO-CVで除外したときの影響が大きい—— だから分母が小さくなって、その点の誤差を大きく評価する仕組みです。
さらに計算を簡略化した方法が GCV(一般化交差検証)です:
個々の対角成分 $S_{\lambda,ii}$ の代わりに、 平均値 $\frac{1}{N}\text{trace}(S_\lambda) = \frac{df_\lambda}{N}$ を使います。 分母の $\left(1 - \frac{df_\lambda}{N}\right)$ が「楽観的すぎる訓練誤差」を補正するペナルティとして機能し、 計算がグッと楽になります。
では、実際にGCVでλを選ぶとどうなるのか、具体的なイメージを見てみましょう。

右のグラフでは、GCV曲線がU字型を描き、最小点(緑)が最適なλを指しています。 左のグラフでは、その最適λに対応するフィット曲線(黄)が、 過小df(薄い青)・過大df(薄い赤)と並べて表示されます。 最終的に最適曲線だけが明るく残り、2つの「失敗例」が薄くフェードします。
GCVが選んだλで:
実践的なアドバイスとして、以下の目安を覚えておくと便利です:
一つ注意点があります。CVやGCVは「平均的な予測精度」を最大化しますが、 特定の局所的な特徴を保護するわけではありません。 データの端(境界付近)ではバイアスが大きくなりやすく、 自動選択はあくまで「出発点」として扱うのが賢明です。
実際のデータで GCV を使うと——例えば NMR 化学シフトデータなど—— df ≈ 9 あたりで最小値を示し、その前後では過小・過大フィットになる様子が観察できます。 数値だけで決めず、フィット結果を目で確認することも大切です。
この章で学んだことを振り返りましょう。冒頭の問いを思い出してください—— 「λ=0.01で試す → 0.1 → 1.0 → ...これを何十回も繰り返すのか?」

上のフロー図が示す通り、「データ → CV/GCV → 最適λ → 最適フィット」という 一貫したパイプラインで、手動探索なしにパラメータを決定できます。
鍵となるアイデアをまとめると:
この考え方が重要なのは、スムージングスプラインに限った話ではないからです。 機械学習の多くの手法は「ハイパーパラメータ」を持ちます。 λ(スムージング強度)はその典型例ですが、ニューラルネットワークの学習率、 決定木の深さ、正則化係数なども同様です。
「データから学ぶ」という原則を徹底するなら、ハイパーパラメータもデータから決めるべき—— 交差検証はその哲学の体現です。次の章以降で登場するさまざまなモデルの パラメータ選択でも、この同じ発想が繰り返し登場します。