最終更新日:2026年10月4日
fe fe-technology basic-theory ai
まず結論
交差検証(Cross-validation)は、データの学習用・検証用の分け方を変えて学習と評価を繰り返し、モデルの性能を見積もる方法です。 代表的な方法が、データをk個の組に分けるk分割交差検証です。
科目Aでは、次の手順を押さえます。
k個のうち1組で検証し、残りのk−1組で学習する。検証用を順番に替えてk回評価し、結果を平均などでまとめる。
このページでは、分割を入れ替える手順と件数の計算を扱います。学習・モデル選択・最終評価という役割の違いは、訓練データ・検証データ・テストデータの違いで確認できます。
直感的な説明
製品画像から不良品を見分けるモデルを、手元のデータで比較するとします。モデルとは、データから作る予測・分類の仕組みです。
一度だけデータを分けて評価すると、検証用にたまたま判定しやすい画像が多く入るなど、分け方によって成績が変わることがあります。
そこで、画像をいくつかの組に分け、「今回はA組を検証用、次はB組を検証用」と順番に入れ替えます。毎回、検証用以外の組でモデルを学習し直し、その回の検証用の組で成績を測ります。
一つの分け方での成績だけに頼らず、複数回の結果をまとめて判断するのが交差検証の考え方です。
定義・仕組み
5分割交差検証の流れ
正解付きの画像1,000件から、まず最終評価用のテストデータ200件を取り分けます。残る800件を、交差検証に使います。件数は説明用の例であり、必須の比率ではありません。
800件を、重複しないA〜Eの5組に160件ずつ分けます。この組をフォールド(fold)と呼び、組の数5がkに当たります。
次の表は、ある一つの設定のモデルを5分割交差検証で評価する手順です。各回で、同じ学習方法・設定を使います。
| 回 | A組 | B組 | C組 | D組 | E組 |
|---|---|---|---|---|---|
| 1 | 検証 | 学習 | 学習 | 学習 | 学習 |
| 2 | 学習 | 検証 | 学習 | 学習 | 学習 |
| 3 | 学習 | 学習 | 検証 | 学習 | 学習 |
| 4 | 学習 | 学習 | 学習 | 検証 | 学習 |
| 5 | 学習 | 学習 | 学習 | 学習 | 検証 |
表の読み方:横に見ると毎回4組で学習・1組で検証し、縦に見ると各組が検証に1回、学習に4回使われています。
1回目はB〜Eの640件で学習し、Aの160件で検証します。2回目はA・C・D・Eの640件で学習し、Bの160件で検証します。以後も同様です。
ここで、前の回の学習済みモデルをそのまま引き継ぎません。1回目のモデルはB組で学習しているため、それを引き継いで2回目のB組を評価すると、「その回の学習に使っていないデータでの評価」にならないからです。
評価結果は平均などでまとめる
正しく分類できた割合を正解率とします。ある設定での各回の検証正解率が次の値だったとします。数値は説明用です。
| 回 | 検証正解率 |
|---|---|
| 1 | 80% |
| 2 | 85% |
| 3 | 90% |
| 4 | 95% |
| 5 | 80% |
平均正解率は、次のように求めます。
(80 + 85 + 90 + 95 + 80) ÷ 5 = 86%
最もよかった4回目の95%だけを、この設定の交差検証の成績として採用するのは不適切です。平均に加え、分割によって成績がどの程度変わるかも確認します。
複数の設定を比較するときは、各設定について同じ分割と評価指標で交差検証を行います。例えば、ある設定の平均が86%、別の設定の平均が89%なら、平均正解率を基準にする比較では後者が候補になります。
選択後に学習し直し、最後にテストする
交差検証で設定を選んだ後は、その設定を使って、交差検証に使った800件全体で最終モデルを学習する方法が一般的です。そして、取り分けていたテストデータ200件で最終評価します。
交差検証の平均値は、設定の選択に使った評価結果です。選択に使っていないデータでの最終評価とは区別します。 テストデータ200件は、A〜Eの入替えにも設定の選択にも使いません。
科目Aでどう出る?
学習件数・検証件数・回数を区別する
N件をk組に等分できる場合、通常のk分割交差検証を1巡するときの関係は次のとおりです。Nは交差検証に使う件数で、別に取り分けた最終テスト用の件数は含みません。
| 求めるもの | 計算・回数 | N = 800、k = 5の例 |
|---|---|---|
| 1回の検証件数 | N ÷ k | 160件 |
| 1回の学習件数 | N × (k−1) ÷ k | 640件 |
| 一つの設定について学習・評価する回数 | k回 | 5回 |
| 各データが検証側に入る回数 | 1回 | 1回 |
| 各データが学習側に入る回数 | k−1回 | 4回 |
等分できない場合は、組の件数に差が生じます。まずは、「1組で学習、残りで検証」ではなく、その逆だと押さえます。
ホールドアウト法との違い
| 方法 | 学習用・検証用の分け方 | 判断のポイント |
|---|---|---|
| ホールドアウト法 | 一度分けた学習用・評価用のデータを使う | 手順は簡単だが、その分け方に評価が左右される |
| k分割交差検証 | k組に分け、検証用の組を順番に替える | 複数回の評価をまとめるが、学習の計算量が増える |
「同じ学習済みモデルに同じ検証データをk回入力する」という説明は、k分割交差検証ではありません。学習用・検証用の組合せを変え、各回で学習し直すことが必要です。
どんな場面で使う?
データが限られる中でモデルの設定を比較したいときや、一度の分割だけでは評価に不安があるときに使います。各データを学習側と検証側の両方で活用できますが、一つの回の中では両者を分けます。
一方、将来の売上を予測するような時系列データでは、単純にランダムな組へ分けると、未来のデータで学習して過去を予測する形になることがあります。実際の利用に合わせ、過去で学習し、その後の期間で評価するなど、時間順序を守る分割を検討します。
よくある誤解・混同
交差検証をすれば過学習が自動的に解消する?
交差検証は評価の方法であり、モデルを自動的に単純化したり、学習のしすぎを修正したりする処理ではありません。評価結果を基に、モデルや設定を選び直す必要があります。
過学習の状態と対策は、過学習とは?で整理しています。
全データを一度ずつ検証するなら、テストは不要?
交差検証の結果を見て設定を選ぶ場合、その結果は選択に影響します。選択後の最終評価に使うテストデータを別に残す理由は、固定の検証データを使う場合と同じです。
kを大きくするほど必ずよい?
組の数を増やすと、1回の学習に使えるデータの割合は増えますが、学習を繰り返す回数も増えます。また、評価が必ず安定するとは限りません。kは、データの量・性質や計算に使える時間などに応じて決めます。
前処理は800件全体で済ませてよい?
平均・標準偏差を求めて数値の尺度をそろえる標準化などでは、各回の学習用データだけから変換に必要な値を求め、その値で検証用データを変換します。
分割前の800件全体から平均などを求めると、その回の検証用データの情報も取り込んでしまいます。交差検証でも、こうした情報の混入(データリーク)に注意します。
確認問題(科目A・オリジナル)
最終評価用のテストデータを別に確保した上で、残る600件を重複しない5組に等分し、5分割交差検証を1巡する。各回で1組を検証用、残りを学習用とする。この手順の説明として、最も適切なものはどれか。
- ア:各回で120件を学習用、480件を検証用とする。
- イ:各回で480件を学習用、120件を検証用とし、各データは検証用に1回使われる。
- ウ:600件全体で一度だけ学習し、同じモデルで各組を順番に評価する。
- エ:5回の正解率のうち、最大値だけを平均正解率として報告する。
正解:イ
- ア:学習用と検証用の件数が逆です。検証用は1組なので、600 ÷ 5 = 120件です。
- イ:学習用は残り4組の480件です。検証用の組を替えるため、各データは検証側に1回入ります。
- ウ:全体で学習したモデルでは、検証対象も学習済みです。各回の学習用480件で学習し直します。
- エ:平均は5回の値を合計して5で割ります。最もよい回だけを選ぶと、ほかの回の評価を無視してしまいます。
公式情報・参考リンク
- IPA:基本情報技術者試験シラバス Ver.9.2
- 「基礎理論」の「情報に関する理論」で、機械学習の用語例として交差検証などが挙げられています。
- scikit-learn公式:Cross-validation
- k分割の手順、評価の集約、最終テストとの役割分担、前処理や時系列データでの注意点を確認できます。
まとめ(試験直前用)
- k分割交差検証は、1組で検証、残りのk−1組で学習する手順をk回行う。
- 通常の1巡では、各データを検証に1回、学習にk−1回使う。
- 各回でモデルを学習し直し、評価結果を平均などでまとめる。
- モデル選択に交差検証を使っても、最終テストは別に確保する。
- 交差検証は評価の方法。過学習やデータリークを自動的に防ぐものではない。