2.9 モデル選択とバイアス-バリアンス・トレードオフ
機械学習の核心に迫る問いかけ:「シンプルなモデルと複雑なモデル、どちらが良いのか?」
この章では、予測精度を左右する根本的なトレードオフ「バイアス vs バリアンス」を理解し、最適なモデルの複雑さをどう選ぶかを学びます。
訓練データにうまくフィットすることと、未知のデータに対してうまく予測することは、実は別問題なのです。
謎から始める - なぜ完璧にフィットするモデルがダメなのか
データが与えられたとき、そのデータに「完璧に」フィットするモデルを作ることは難しくありません。しかし、ここに不思議な現象があります。
訓練データに完璧にフィットするモデルは、新しいデータに対してはうまく予測できないことが多いのです。
これは直感に反するように思えます。データをよく説明できるモデルが、なぜ予測できないのでしょうか?
この謎を解く鍵が「バイアス-バリアンス・トレードオフ」です。
ここで重要な用語を整理しましょう:
- 訓練誤差(Training Error):モデルを学習させたデータ(訓練データ)に対する予測の誤差
- テスト誤差(Test Error):モデルがまだ見たことのない新しいデータに対する予測の誤差
訓練誤差を小さくすることは比較的簡単です。極端に複雑なモデルを使えば、訓練データの点を全て通るような曲線を描けます。しかし、本当に知りたいのはテスト誤差、つまり「未知のデータに対してどれだけうまく予測できるか」です。

このアニメーションが示すように、モデルの複雑さが増すにつれて、訓練誤差は単調に減少し続けます。しかし、テスト誤差はU字型の曲線を描きます。
ある点を超えると、モデルが複雑になればなるほど、テスト誤差は大きくなってしまうのです。最適なモデルの複雑さは、このU字曲線の谷底にあります。
バイアスとバリアンスの正体
テスト誤差を詳しく分析してみましょう。
ここで「予測誤差(Expected Prediction Error: EPE)」という用語を使います。これは「新しいデータに対する予測の平均的な誤差」を表し、テスト誤差の期待値と同じものです。つまり、EPEを最小化することがテスト誤差を最小化することに繋がります。
このEPEは、実は3つの成分に分解できます:

それぞれの成分が何を意味するか、見ていきましょう:
- $\sigma^2$(既約誤差):データそのものに含まれるノイズ。どんな完璧なモデルでも避けられない誤差です。
- Bias(バイアス):モデルが「真の関数」からどれだけ系統的にずれているか。シンプルすぎるモデルは真の複雑さを捉えられず、バイアスが大きくなります。
- Variance(バリアンス):異なる訓練データに対して、予測がどれだけばらつくか。複雑すぎるモデルは訓練データの細かいノイズにまで反応し、バリアンスが大きくなります。
この分解は「バイアス-バリアンス分解」と呼ばれ、予測誤差の本質を理解する上で極めて重要です。
既約誤差はどうしようもありませんが、バイアスとバリアンスは、モデルの選び方によってコントロールできます。しかし、ここに問題があります。この2つは、シーソーのように動くのです。
シンプルすぎる vs 複雑すぎる
バイアスとバリアンスは、モデルの複雑さに応じて逆方向に動きます。これがトレードオフの本質です。

シンプルすぎるモデル(例:データに直線をフィット)
- バイアスが高い:真の関係が曲線的でも、直線しか表現できない
- バリアンスが低い:訓練データが変わっても、直線は大きく変化しない
- 結果:アンダーフィッティング(過少適合)
複雑すぎるモデル(例:データの全ての点を通る高次多項式)
- バイアスが低い:複雑な関係も表現できる
- バリアンスが高い:訓練データの小さな変化に敏感に反応
- 結果:オーバーフィッティング(過学習)
真の関数が比較的シンプル(例えば線形に近い)場合、シンプルなモデルが有利です。一方、真の関数が複雑な場合、ある程度複雑なモデルが必要です。
しかし、真の関数の複雑さは通常わかりません。だからこそ、適切なモデルの複雑さを選ぶ「モデル選択」が重要になるのです。
k-最近傍法で見るバイアス-バリアンス
バイアス-バリアンス・トレードオフを、具体的な手法で確認してみましょう。
k-最近傍法(k-NN)とは
k-最近傍法は、非常にシンプルな予測手法です。新しい点$x_0$の値を予測したいとき、訓練データの中から$x_0$に最も近いk個の点を見つけて、その値の平均を予測値とします。
例えば:
- k=1の場合:最も近い1点の値をそのまま予測値とする
- k=5の場合:最も近い5点の平均を予測値とする
- k=15の場合:最も近い15点の平均を予測値とする

このkの値が、モデルの複雑さを制御するパラメータになっています。kが小さいほど複雑(データの細部に反応)、kが大きいほどシンプル(滑らかな予測)になります。
k-NNの予測誤差を分解する
k-NNでは、予測点$x_0$における予測誤差は次のように分解できます:
ここで$x_{(\ell)}$は$x_0$に近い順に並べた$\ell$番目の訓練点です。
この式をよく見ると、バイアスとバリアンスがkに対して逆方向に動くことがわかります:
k=1のとき(最も複雑)
- バイアス項:最も近い点の$f(x_{(1)})$は$f(x_0)$に近いので、バイアスは小さい
- バリアンス項:$\sigma^2/1 = \sigma^2$で最大
- 結果:バリアンスが支配的 → オーバーフィッティングしやすい
k=15のとき(よりシンプル)
- バイアス項:遠くの点まで平均するので、$f(x_0)$からずれる可能性が高い → バイアスが大きくなる
- バリアンス項:$\sigma^2/15$で小さくなる
- 結果:バイアスが支配的 → アンダーフィッティングしやすい
このように、kを調整することで、バイアスとバリアンスのバランスを取ることができます。k=5付近が最適となることも多いですが、実際にはデータと真の関数の複雑さに依存します。
最適な複雑さを見つける
バイアス-バリアンス・トレードオフを理解したところで、実践的な問題に移りましょう。「最適なモデルの複雑さをどう見つけるか」です。
重要な洞察:訓練誤差はテスト誤差の良い推定量ではない
モデルを複雑にするほど訓練誤差は下がり続けます(究極的には0になる)。しかし、テスト誤差はある点から上昇し始めます。もし訓練誤差だけを見てモデルを選ぶと、常に最も複雑なモデルを選んでしまい、過学習に陥ります。
では、どうすればよいのでしょうか?

実際には、テスト誤差を直接測定することはできません(テストデータは「未来のデータ」だからです)。そこで、以下のような手法が使われます:
- クロスバリデーション(交差検証):訓練データの一部を「疑似テストデータ」として使用し、テスト誤差を推定する
- 情報量規準(AIC, BIC):訓練誤差にモデルの複雑さに応じたペナルティを加える
- ホールドアウト法:データを訓練用と検証用に分割する
これらの手法は、モデルの複雑さとテスト誤差の関係を推定し、最適な複雑さを選ぶことを可能にします。詳しくは後の章で扱います。
まとめ - トレードオフを味方につける
この章で学んだことを振り返りましょう。
バイアス-バリアンス分解

トレードオフの本質
- シンプルなモデル → 高バイアス・低バリアンス → アンダーフィッティングのリスク
- 複雑なモデル → 低バイアス・高バリアンス → オーバーフィッティングのリスク
モデル選択の原則
- 訓練誤差だけでモデルを選ばない
- テスト誤差(またはその推定値)を最小化するモデルの複雑さを選ぶ
- クロスバリデーションなどの手法でテスト誤差を推定する
この考え方は、機械学習のあらゆる手法に共通する基盤です。線形回帰のパラメータ数、k-NNのk、ニューラルネットワークの層数やユニット数、正則化の強さなど、すべてがバイアス-バリアンス・トレードオフの中で最適化されるべきハイパーパラメータなのです。
「最も複雑なモデルが最良」でも「最もシンプルなモデルが最良」でもありません。データと問題に応じた「ちょうど良い複雑さ」を見つけることが、機械学習の実践における重要なスキルです。