4.1.6
Nested CV
まとめ
- ネスト交差検証はハイパーパラメータ探索と汎化評価を分離する検証手法です。
- 外側・内側のループを構成して過学習を抑える仕組みをコードで確認します。
- 計算コストやデータ量を踏まえた適用場面と注意点を整理します。
- 交差検証 — ネステッド CV は交差検証を二重に組み合わせた手法です
1. 仕組み #
- 外側ループ:データを
K_outer分割し、各分割をテストセットとして保持。 - 内側ループ:残りのデータで
K_innerの交差検証を行い、グリッドサーチやランダムサーチで最適ハイパーパラメータを選択。 - 評価:選ばれたハイパーパラメータで再学習し、外側ループのテストセットでスコアを計算。
これを
K_outer回繰り返し、スコアの平均と分散を算出します。
2. Python での実装例 #
| |
cross_val_score にサーチオブジェクトを渡すだけでネステッド CV を実行できます。
3. 利点 #
- ハイパーパラメータ調整のリークを防ぐ:同じデータでチューニングと評価を行うことによる過大評価を防止。
- 複数モデルの公平な比較:モデルごとに最適なハイパーパラメータを選びつつ、汎化性能を同じ条件で比較できる。
- 分散の推定:外側ループのスコアを用いて性能分散を推定し、信頼区間を計算できる。
4. 注意点 #
計算コストが高い:
K_outer × K_inner回モデルを学習するため、モデルが重い場合は時間がかかる。グリッドサーチの範囲を広げすぎると現実的な時間で終わらない。ランダムサーチやベイズ最適化を検討する。
データサイズが小さい場合は、分割を工夫したり、過剰な CV を避ける。
5. 実務でのヒント #
- 小規模データ:データが少ないほどハイパーパラメータ調整のリークが問題になりやすく、ネステッド CV の価値が高い。
- 主要モデルのみ:全モデルで実施すると時間がかかるため、候補を絞った上でネステッド CV を実行する。
- 報告書への記載:探索範囲や分割数を明記し、過学習リスクを適切に管理したことを示す。
まとめ #
ネステッド交差検証はハイパーパラメータ探索を組み込んだ汎化性能推定法で、過大評価を防げる。
GridSearchCVとcross_val_scoreを組み合わせるだけで実装できるが、計算コストには注意。重要なモデルの最終評価に用い、信頼できる性能指標を報告しよう。
分割数と交差検証 #
分割数 k を変えると訓練・検証の比率がどう変わるか確認できます。