5.4 Smoothing Splines - 滑らかさを自動で調整する

前章で学んだスプラインには、「どこにノット(結び目)を置くか」という難しい問題がありました。ノットが少なすぎればデータの複雑さを捉えられず、多すぎればノイズまで拾ってしまう。

Smoothing Splines(平滑化スプライン)は、この問題を根本から解決する発想の転換です。「ノットをどこに置くか」ではなく、「すべてのデータ点にノットを置き、滑らかさにペナルティをかける」というアプローチ。これにより、データへのフィットと滑らかさのバランスを、たった1つの「調整つまみ」で自由に変えられるようになります。

ノット選択のジレンマ

スプラインを使うとき、私たちは常にある選択を迫られます。「ノットをどこに、いくつ置くか?」

ノットが少なければ、モデルは滑らかになりますが、データの複雑なパターンを見逃すかもしれません。ノットが多ければ、データの細かい変動まで捉えられますが、今度はノイズまで拾ってしまう。

ノット数による曲線の変化を比較

この問題に対して、平滑化スプラインは大胆な答えを出します。「すべてのデータ点にノットを置いてしまおう。ただし、複雑すぎる曲線にはペナルティをかけよう」

一見すると、データ点すべてにノットを置けば、データを完全に通る複雑な曲線ができてしまいそうです。しかし、「滑らかさへのペナルティ」という仕組みが、この問題を解決します。

ペナルティ付き最小二乗

平滑化スプラインは、次の基準を最小化する関数 $f$ を見つけます:

$$\text{RSS}(f, \lambda) = \sum_{i=1}^{N} \{y_i - f(x_i)\}^2 + \lambda \int \{f''(t)\}^2 dt$$

この式は2つの部分からなります。

第1項はおなじみの残差二乗和(RSS)。データにどれだけフィットしているかを測ります。これを小さくしたい。

第2項はラフネスペナルティ(roughness = 粗さ)。曲線の「ガタガタ具合」にペナルティを課すという意味です。$f''(t)$ は関数の2階微分、つまり「曲率」を表します。曲がりくねった曲線ほど、この値は大きくなります。これを積分して全体の「曲がり具合」を測り、$\lambda$ を掛けてペナルティとします。

RSS項とペナルティ項の天秤バランス

$\lambda$ は2つの目標のバランスを調整するパラメータです。$\lambda$ が小さければフィット重視、$\lambda$ が大きければ滑らかさ重視になります。

$$\underbrace{\sum_{i=1}^{N} \{y_i - f(x_i)\}^2}_{\text{データへのフィット}} + \lambda \underbrace{\int \{f''(t)\}^2 dt}_{\text{滑らかさペナルティ}}$$

λの両極端

$\lambda$ の値を極端に変えると何が起こるでしょうか?

$\lambda = 0$ のとき:ペナルティ項が消えます。純粋に残差二乗和だけを最小化するので、すべてのデータ点を通る補間曲線になります。これは完璧にフィットしますが、ノイズまで拾ってしまいます。

$\lambda = \infty$ のとき:ペナルティ項が支配的になります。曲率がゼロ、つまり $f''(t) = 0$ となる関数だけが許されます。これは直線です。どんなデータでも最小二乗直線になってしまいます。

λを0から∞まで変化させたときの曲線の変化

実際の解は、この2つの極端の間のどこかにあります。適切な $\lambda$ を選ぶことで、データのパターンは捉えつつ、ノイズには反応しない、ちょうどよい滑らかさの曲線が得られます。

解は自然な3次スプライン

驚くべきことに、この最適化問題の解は、すべてのユニークな $x_i$ にノットを持つ自然な3次スプラインであることが証明されています。

(復習:「自然な3次スプライン」とは、端点の外側で直線になるよう制約されたスプラインでした。これにより、データ範囲外での予測が極端に暴れることを防ぎます。)

データ点がすべてノットになり、滑らかな自然スプラインが形成される

無限次元の関数空間から最適な関数を探すという問題が、有限個のパラメータで表現できるスプラインの問題に帰着するのです。N個のユニークな $x_i$ があれば、解はN個のパラメータで完全に決まります。

この解の重要な性質は、平滑化スプラインが線形スムーサー(linear smoother)であること。スムーサーとは、データを「滑らかにする」操作のこと。「線形」とは、推定値が元の $y$ の重み付き平均(線形結合)で表されるという意味です:

$$\hat{f} = S_\lambda y$$

$S_\lambda$スムーサー行列と呼ばれ、$\lambda$ の値に依存します。この行列は、各データ点の推定値を計算するための「重み」を決めています。

自由度という考え方

通常の線形回帰では、パラメータの数がモデルの複雑さを表します。10個のパラメータがあれば、自由度は10です。

しかし平滑化スプラインでは、N個のノット(= N個のパラメータ)があっても、$\lambda$ による縛りがあるため、実効的な自由度はNより小さくなります。

この実効自由度は、スムーサー行列 $S_\lambda$ のトレース(対角成分の和)で定義されます:

$$\text{df}_\lambda = \text{trace}(S_\lambda)$$

対角成分 $S_{\lambda,ii}$ は「i番目のデータ点が自分自身の推定にどれだけ影響するか」を表します。この和が実効的なパラメータ数、つまり自由度になるのです。

λと実効自由度の関係を視覚化

$\lambda$ を変えることは、実効自由度を2からNの間で連続的に調整することと同じです。これにより、異なる $\lambda$ 値のモデルを比較しやすくなります。

では、このスムーサー行列 $S_\lambda$ は、実際にどのようにデータを「滑らかに」しているのでしょうか? それを理解するために、$S_\lambda$ の固有値分解を見てみましょう。

発展 - スムーサー行列の固有値分解

(このセクションはより深い理解のための発展的内容です。読み飛ばしても、後続のセクションは理解できます。)

$S_\lambda$ は対称行列なので、直交する固有ベクトルで分解できます:

$$S_\lambda = \sum_{k=1}^{N} \rho_k(\lambda) u_k u_k^T$$

ここで $\rho_k(\lambda)$ は固有値、$u_k$ は固有ベクトルです。

固有値 $\rho_k(\lambda)$ は、対応する固有ベクトル成分がどれだけ「縮小」されるかを表します。$\rho_k = 1$ なら完全に保持、$\rho_k = 0$ なら完全に除去されます。

重要な性質:

固有値による成分の縮小を視覚化

これが平滑化スプラインの本質です。データの滑らかな構造は残し、ノイズのような高周波成分は抑える。これはフーリエ解析におけるローパスフィルタと似た働きをしています。

たとえば、あなたの体重を毎日測定したデータを考えてみてください。低周波成分は数ヶ月かけてゆっくり増減する傾向(ダイエットの効果など)、高周波成分は日々のランダムな変動(食事量、水分量など)です。平滑化スプラインは、低周波成分を残し、高周波のノイズを抑えることで、本当の傾向を浮かび上がらせます。

λの選び方 - 交差検証

最適な $\lambda$ をどう選べばよいでしょうか?

最も一般的な方法はLeave-one-out交差検証(LOOCV)です。各データ点を1つずつ除外し、残りでモデルを作り、除外した点を予測。その誤差を平均します:

$$\text{CV}(\lambda) = \frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{f}^{(-i)}_\lambda(x_i))^2$$
Leave-one-out交差検証の仕組み

これをすべてのデータ点について計算するのは大変そうですが、実は効率的な公式があります:

$$\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,ii}$ はスムーサー行列の対角成分です。分母の $(1 - S_{\lambda,ii})$ は「自分自身への影響度を補正する」役割を持ちます。これにより、実際にデータを除外しなくても、除外した場合の誤差を計算できるのです。全データでフィットした結果から計算できるので、N回のフィッティングは不要になり、計算がN倍速くなります。

この交差検証誤差を最小にする $\lambda$ を選びます。

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

$\lambda$ の選択は、バイアス-バリアンストレードオフの具体例です。

$\lambda$ が小さいとき(自由度が高い):

$\lambda$ が大きいとき(自由度が低い):

λによるバイアスとバリアンスの変化

最適な $\lambda$ は、バイアスとバリアンスの合計(= 期待誤差)を最小にする点にあります。

交差検証は、この期待誤差を近似的に推定する方法です。だから交差検証で $\lambda$ を選ぶことは、バイアス-バリアンスのバランスを最適化することと等価なのです。

まとめ - 滑らかさの自動調整

平滑化スプラインは、スプライン回帰における「ノット選択」という難問を、発想の転換で解決しました。

核心的なアイデア

数学的な美しさ

実用的な利点

平滑化スプラインの全体像

次章では、自動的に $\lambda$ を選ぶ別のアプローチとして、自動平滑化スプラインを見ていきます。