機械学習の具体的手法
G検定の交差検証(5分割の計算例で手順と平均の出し方を確認)
G検定のシラバスには「モデルの選択・評価」があります。このページは、その学習で使うk分割交差検証を、20件のデータを5分割する計算例で整理します。k分割交差検証は、データをk個に分け、1個を検証用、残りを学習用にする作業をk回繰り返して、結果を平均する方法です。
このページの20件と正解数は架空のデータです。分類モデルの正解率を、5回分求めます。
この記事の目次
公式情報の確認
試験日、料金、申込条件、試験方式など変動する情報は、公式情報を最終確認してください。 当サイトの一次情報確認日: 2026-10-02。
試験の出題範囲・実施要項は変動するため、受験前に公式情報を確認してください。
結論
- k分割交差検証は、k個に分けたデータのうち1個を検証用にする作業を、検証用を入れ替えながらk回行う
- 各回はk−1個で学習し、残りの1個で評価する。報告する値は、k回の評価の平均
- 1回だけの分割だと、どこを検証用にしたかで結果が大きく変わりうる
- 前処理(スケーリングなど)も、学習用のデータだけで学習させ、保持したデータに適用する
- 最終評価に使うテスト用のデータは、交差検証とは別に取り分けておく
5分割の手順
scikit-learnの公式ドキュメントは、k分割交差検証では、学習用のデータをk個の小さな集まり(フォールド)に分け、各フォールドについて次を行うと説明しています。k−1個を学習用に使ってモデルを学習させ、残りの1個で性能(たとえば正解率)を計算します。
20件を4件ずつの5個に分けた例です。検証用にするフォールドを1個ずつずらし、毎回、残り16件で学習します。
| 回 | 検証用(4件) | 学習用 | 正解数 | 正解率 |
|---|---|---|---|---|
| 1回目 | 1〜4件目 | 残り16件 | 3/4 | 0.75 |
| 2回目 | 5〜8件目 | 残り16件 | 4/4 | 1.00 |
| 3回目 | 9〜12件目 | 残り16件 | 3/4 | 0.75 |
| 4回目 | 13〜16件目 | 残り16件 | 2/4 | 0.50 |
| 5回目 | 17〜20件目 | 残り16件 | 4/4 | 1.00 |
どの件も、ちょうど1回だけ検証用になり、4回は学習用になります。用語は交差検証の用語集にあります。
5回の結果を平均する
scikit-learnの公式ドキュメントは、k分割交差検証が報告する性能は、ループで計算した値の平均だと説明しています。この例では、(0.75 + 1.00 + 0.75 + 0.50 + 1.00) ÷ 5 = 0.80 です。
5回の正解数は 3+4+3+2+4=16 で、20件中16件、正解率は 16÷20=0.80 と一致します。各回の検証用の件数が同じなので、回ごとの正解率の平均と、全体の正解率が同じ値になります。平均の0.80のほかに、最小0.50と最大1.00の幅も、モデルの安定度を見る手がかりになります。
1回の分割だけでは足りない理由
scikit-learnの公式ドキュメントは、学習用・検証用・テスト用の3つにデータを分けると、学習に使える件数が大きく減り、結果が(学習用,検証用)の組をどう乱数で選んだかに左右されうると述べています。交差検証は、その問題への解決策として紹介されています。
先の表で確かめます。17〜20件目だけを検証用にする1回の分割なら、正解率は1.00です。13〜16件目だけなら0.50になります。同じ手法でも、検証用の選び方だけで0.50から1.00まで動いています。5回の平均なら、特定の4件の出来に左右される度合いが小さくなります。
その代わり、モデルを5回学習させるので、計算の手間はk倍になります。分け方の違いを並べた説明はホールドアウト法と交差検証を比べたページ、3種類のデータの役割は学習・検証・テストのデータを比べたページにあります。
前処理で起きる情報漏れ
scikit-learnの公式ドキュメントは、設定(ハイパーパラメータ)をテスト用のデータの成績が良くなるまで調整すると、テスト用のデータの情報がモデルに「漏れ」て、評価が汎化性能を表さなくなると説明しています。
同じ資料の例は、スケーリング(StandardScaler)を学習用のデータだけで学習させ、その変換を保持したデータにも適用しています。このページの解釈として、平均や標準偏差を検証用を含む全データで計算してから分割すると、検証用の情報が学習に入ることになります。交差検証の中でも同じ手順を保つには、前処理とモデルをつなぐパイプライン(Pipeline)を使うと簡単になる、と同じ資料は説明しています。用語はデータリーケージの用語集にあります。
分け方を変える場面
- 分類で、クラスの割合を各フォールドで保ちたいとき: 層化k分割(StratifiedKFold)。scikit-learnは、cvに整数を渡すと、分類器にはこちらが使われると説明している
- 時間の流れに沿ったデータのとき: scikit-learnは、時間に依存して生成されたデータなら、時系列を考慮した交差検証のほうが安全だと述べている
- 被験者や測定機器などのグループ構造があるとき: 同じ資料は、グループ単位の交差検証のほうが安全だと述べている
問題文から読み取る
このページの計算例から導いた読み方です。出題を予想するものではありません。
- 「データをk個に分け、検証用を入れ替えてk回評価し、平均を取る」とあれば、k分割交差検証
- 「1回の分割では結果が分割の仕方に左右される」を改善する方法として、交差検証が挙がる
- 「全データで標準化してから分割した」は、検証用の情報が漏れる手順
- 「交差検証の平均が高いので、テスト用のデータでの評価は不要」という文は、取り分けたテスト用の役割と合わない
G検定の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
よくある質問
交差検証は、G検定のシラバスにありますか?
JDLAのG検定ページは、試験範囲の技術分野に「モデルの選択・評価」を挙げています。交差検証は、このページでは「モデルの選択・評価」に関わる内容として整理しています。
k分割のkは、いくつにするものですか?
このページの例は5ですが、kの値は決まっていません。scikit-learnの公式ドキュメントの例では、cv=5として5分割で正解率を求めています。kを増やすと学習の回数が増えます。
交差検証をすれば、テスト用のデータは要りませんか?
要ります。scikit-learnの公式ドキュメントは、最終評価のためのテスト用のデータは取り分けたままにし、交差検証を使うときに不要になるのは検証用のデータだけだと説明しています。
交差検証の欠点は何ですか?
計算量が増えることです。scikit-learnの公式ドキュメントは、この方法が計算の負担が大きくなりうる一方、データをあまり無駄にしないと述べています。このページの例では、モデルを5回学習させます。
