交差検証
交差検証はデータをほぼ同じ大きさの k 個の fold に分け、順に一つを検証用、残りを学習用として k 回評価します。1 回の完全な k-fold では各行をちょうど一度検証し、単一のホールドアウト抽選への依存を減らします。
本課は動物写真 20 枚の二つの特徴と 1-NN を使います。新しい写真には、学習集合で最も近い写真のラベルを写します。同じ 20 例でも、隠す 4 枚を変えるだけで正解率は 1.00 から 0.25 へ変わります。
何を解決するか
80/20 の単一分割のスコアはモデルだけでなく選ばれた行にも依存します。このデータの 400 回のランダム分割では、スコアは 0.25、0.50、0.75、1.00、標準偏差は 0.2005 です。140 回、つまり 35% が満点でした。参照となる留一法の正解率は 80% ですが、既知の母集団正解率ではありません。
k-fold は一度シャッフルして k ブロックに分け、順に隠します。全体で常に n 個の fold 外予測があり、各行はその行を学習していないモデルに評価されます。評価される行は全員ですが、その行のモデルがどの仲間で学習するかは分割次第です。有限の k では分割の影響が残ります。
本課の決定的なモデルを 400 分割で測ると:
k | 完全な交差検証スコアの標準偏差 | fold スコアのばらつき |
|---|---|---|
| 2 | 0.0685 | 0.1009 |
| 5 | 0.0351 | 0.1837 |
| 10 | 0.0186 | 0.2769 |
| 20 | 0.0000 | 0.4000 |
k = 20 は 1 fold 1 枚で、分割番号が学習・検証集合を変えません。全体スコアは固定なのに、各 fold は 0 か 1 です。fold 間標準偏差は交差検証推定値の誤差棒ではありません。0.80 ± 0.40 は別の量を混同します。k を増やすほど安定する数値はこの実験の結果で、全モデル・データで成立する法則ではなく、本例でも毎回ではありません(k = 13 では標準偏差が 0.0356 に戻ります)。留一法もデータの標本抽出の不確実性を消しません。
k-fold の k は分割数、k 近傍法の k は隣人数です。混同を避け、本課のモデルは 1-NN と呼びます。
ステップ実行
既定は 20 枚、猫と犬 10 枚ずつ、k = 5、分割 #8 です。最初の fold が満点、次が低得点になる対照を選んでいます。
- 全写真を二つの特徴で配置します。1-NN の学習は学習例の保持で、パラメータの当てはめはありません。
- 第 1 fold の #2、#12、#13、#15 を隠し、残り 16 例をモデルにします。
- #2 は距離
2.50の猫 #6 を見つけて正解。#12 は #16、#13 は #19、#15 は #9 を見つけ、すべて正解です。 4/4 = 1.00。ここで止めれば単一ホールドアウトの報告値になります。- 第 2 fold は #1、#4、#7、#8 を隠します。直前の検証例も含む他の 16 例でモデルを作り直します。
- 犬 #1 は距離
2.92の猫 #10 を選び誤り。猫 #4 は犬 #5 で誤り。犬 #7 は犬 #15 で正解。猫 #8 は犬 #9 で誤りです。 1/4 = 0.25。隠した 4 行だけでスコアが0.75動きました。- 残りは
0.75(#10 だけ誤り)、1.00、1.00です。 - 五つのスコアは
1.00、0.25、0.75、1.00、1.00です。 - 同じ大きさなので平均は
16/20 = 0.800。記録表は各列に色付きセルが一つ、緑 16、赤 4 で、各行を一度ずつ fold 外予測したことを示します。
分割 #34 にすると第 1 fold は 0.25 ですが、全体は 0.800 のままです。この二つが等しいことは、全分割の一致を意味しません。
費用と平均の取り方
k 回学習し、各学習集合は約 n(1 − 1/k) 行、総予測数は n です。k を増やすと学習回数が増え、各学習集合も少し大きくなります。留一法は n 回で、1 回 1 時間なら 20 回の逐次学習は追加処理を除き約 20 時間です。
本例の分割標準偏差は 5-fold の 0.0351 から 10-fold の 0.0186 へ下がります。20-fold のゼロは分割番号の影響がないだけで、正しい推定の保証ではありません。5 や 10 は費用との折衷でよく使いますが、データ構造に合わせて選びます。
20 例を 3-fold にすると 7、7、6 行です。fold の単純平均は 0.754、全正解数を全行数で割ると 0.750。cross_val_score(...).mean() は前者で、後者は行数で重みづけた集約です。問いが異なるため、本課は差があると両方を表示します。
境界ケース
- k が n を割り切らない:最初の
n % kfold が一行多くなり、fold 平均と全体正解率が異なりえます。 - 留一法
k = n:決定的モデルの fold スコアは 0 または 1。分割番号は無関係でも n 回の当てはめが必要で、標本の不確実性は残ります。 k = 2:各学習集合は半分です。本例の 400 回平均0.7609は留一法0.800より低く、少ない学習データによる悲観性を示します。毎回必ず悪いとは限りません。- 主体の反復:同じペットの二枚、同じ人の複数測定、同じ動画のフレームには関連があります。未知の主体への汎化を測るならグループ単位で分け、fold 数はグループ数以下にします。
- 稀なクラス:小 fold からクラスが欠ける場合があります。層化は比率を近づけますが、整数と例数の制約により全 fold の全クラスを保証しません。
- 時系列:シャッフルすると未来で過去を予測しえます。時間を前進する分割を使い、間隔や重なるラベルの漏洩も課題に応じて調べます。
一行の意味から選ぶ
| データと目的 | 分割 | 役割 |
|---|---|---|
| 独立観測 | KFold | 各行を順に留出 |
| 独立した分類観測 | StratifiedKFold | クラス比率を近づける。分類評価 API の既定になる場合もある |
| 同じ主体が反復し、未知主体を評価 | GroupKFold | 同じ組を学習・検証にまたがせない |
| 時間点 | TimeSeriesSplit | 過去から未来を評価 |
| 少数データで分割への感度を見たい | 反復 k-fold | 完全な実行スコア同士を比較 |
| ハイパーパラメータ探索 | 入れ子の交差検証 | 内側で選択、外側で報告 |
よくある間違い
- 小標本で一つの分割だけを報告:本例は満点から 4 分の 1 まで変わります。全体スコアと fold 範囲を報告しても、範囲は信頼区間と呼びません。十分大きく代表的な独立テストは単一でも有効です。
- fold 標準偏差を推定誤差とする:留一法の
0.80 ± 0.40は妥当な誤差棒ではありません。複数の完全な分割で感度を測れますが、同じデータを共有する実行の散らばりも母集団性能の完全な信頼区間ではありません。 - グループ漏洩を無視:第 2 データは 10 匹を二枚ずつ撮った 20 枚です。ランダム 5-fold は
1.000。20 検証例中 18 例は学習集合に同じ動物の写真があり、設計したペア特徴は近く、表示例の距離比は2.24です。GroupKFoldなら0.500。留一法も必ず相方が学習集合にいて1.000なので、k を増やしても直りません。 - 前処理をループ外で学習:全データでスケーリング、欠損補完、特徴選択をすると検証統計が漏れます。学習が必要な処理を
Pipelineに入れ、単位として交差検証します。 - 選択に使ったスコアを最終報告:30 設定から最高を選ぶと、そのスコアに選択の偏りが入ります。内側で選び、外側で選択手順を評価するか、独立テストを残します。
モデルの範囲
実際の分割、1-NN 予測、単純平均、グループ分割を、20 行・2 特徴・正解率で実行します。どちらのデータも層化せず、10-fold では同じクラス二枚だけの fold もあります。大きなデータなら単一分割は通常安定しますが、独立性、漏洩、代表性は引き続き必要です。
層化、反復、入れ子は別の問題を解きます。正解率はこの平衡データの説明には便利ですが、実際は比率と誤りの費用に応じて適合率、再現率、F1、ROC-AUC なども選びます。単一クラス fold で未定義になる指標もあり、すべてへ同じ平均規則を機械的に適用はできません。