交差検証Cross-Validation
データを分割し順に検証して点数を平均する方法
- 交差検証は、データをいくつかに分け、一つずつ順番に検証用として使う方法です。
- 分けた数だけ学習を繰り返し、出てきた点数を平均して一つの数字として見ます。
- 一度だけ切り分けて検証すると、点数は**どのデータに当たったかで大きく揺れます。**平均はその揺れを減らしてくれます。
- すべてのデータが一度は検証役を担うので、データを無駄にせず全部使えます。
- その代わり学習を分けた数だけ繰り返す必要があり、時間と計算が何倍にもかかります。
目次
1たとえで理解する
ボウリング大会で、一つのレーンに立ったまま4ゲームを投げて点数をつけることはありません。レーンごとにオイルの引き方が違うので、よく滑るレーンに当たると実力より高い点数が出て、重いレーンに当たると実力が低く出てしまいます。そこで1ゲームが終わるたびに隣のレーンへ移動します。4レーンを一巡すると4つの点数が残り、その4つを平均した値がその日の実力になります。どれか一つのレーンの状態が結果をまるごと左右しないようにする方法です。データを分けて順番に検証する交差検証は、このレーンの移動そのものです。
2くわしく
分けた一つずつを順番に検証用として使います
持っているデータを4つに均等に分けたとします。1回目は最初の一つを脇によけておき、残り3つで学習したあと、よけておいた一つで採点します。2回目は最初の一つを戻して、2番目の一つをよけます。こうして4回繰り返すと、すべての一つ一つがちょうど1回ずつ検証を担当することになります。
回ごとにモデルは最初から新しく学習します。前の回で学んだものを引き継ぐと、すでに見たデータが検証用の一つに紛れ込んで点数が水増しされてしまうからです。1回終わるたびに点数を書き留め、最後に4つの点数を平均します。あわせて点数のばらつき具合まで見ると、その点数をどれだけ信じてよいかも見積もれます。
平均を取らなければならない理由
データを一度だけ切り分けて検証すると、その一つに何が入ったかが点数を大きく左右します。特に易しいものが集まれば点数は実際より高く出て、手強いものが集まれば低く出ます。データが少ないほどこの揺れは大きくなり、分け方を変えただけで点数が数パーセント上下します。
この状態で二つのモデルを比べてどちらが優れているかを言うのは難しいことです。点数の差が実力の差なのか、切り分けたときの運なのか区別がつかないからです。**何度も分けて得た点数の平均は、一度きりの運を打ち消してくれます。**点数どうしがどれだけ開いているかもあわせて見れば、その差に意味があるかどうかを判断する根拠になります。
いくつに分けるか
一般には5つや10に分けることが多いです。分ける数が多いほど、各回に学習で使えるデータが増えて実際の状況に近づきますが、学習の回数もその分増えます。データがとても少ないときは、分ける数をデータの件数と同じにして、1件ずつ抜き出しては検証することもあります。もっともデータを無駄にしませんが、もっとも時間がかかるやり方です。
種類に偏りのあるデータなら、それぞれの一つで種類の比率が元と同じになるように分けます。こうしないと、ある一つに珍しい種類が一件も入らず、その回の点数が崩れてしまいます。日付のあるデータは順序を守り、前の期間で学び後の期間で検証するように分ける必要があります。後の期間で学んで前を当てる回は、実際には起こり得ない状況だからです。
分ける数をいくつにするかは、データの量とかけられる時間とのすり合わせで決まります。決まった正解はなく、まずは5つあたりから試して、結果の揺れが大きいようなら数を増やすという進め方がよく使われます。
払わなければならない代償
交差検証が払う代償は時間です。5つに分ければ学習を5回、10に分ければ10回繰り返します。数分で終わる小さなモデルなら負担になりませんが、1回の学習に何日もかかる大きなモデルでは現実的に使いにくくなります。そのため大きなモデルでは一度だけ取り分けた検証データを使い、交差検証はデータが少ない問題や小さなモデルで主に使われます。
設定を選ぶために交差検証を使うときも油断は禁物です。**同じ分け方で候補を何百と比べると、その分け方そのものに合わせ込まれてしまいます。**そのため最終的な性能は、交差検証に一度も使っていないデータで別に測るのが安全です。
3もう少し正確に
交差検証(Cross-Validation)は、データをk個に分け、それぞれを一度ずつ検証用にしてk回学習・評価したあと、性能を平均する手順です。K分割交差検証とも呼ばれ、それぞれでクラスの比率を揃えると層化交差検証、分ける数をデータの件数と同じにするとLeave-One-Out交差検証になります。得られるのは性能の平均値と、その値がどれだけ揺れるかという情報です。
たとえがずれる点もあります。ボウリングは同じ人がレーンだけを移動しますが、交差検証は回ごとにまったく新しいモデルを学習させます。そのため最後に残るのは完成したモデル一つではなく、点数一つです。実際に使うモデルは、この点数で設定を決めたあと、全データで改めて学習させて作ります。もう一つ、それぞれが互いに完全に無関係でなければ平均に意味がないのに、同じ人や同じ機器から出たデータが複数の一つに散らばっていると、点数は実際より高く出てしまいます。分け方を工夫しても防げないこの種の紛れ込みは、データを集める段階から気をつけておく必要があります。
4やってみる
5よくある誤解
交差検証をすればより良いモデルが出来上がると思われがちですが、実際にはモデルが良くなるのではなく、性能を測る目盛りが正確になるだけです。
交差検証をしたのだから別のテストデータは要らないと考えがちですが、実際には同じ分け方で設定を何度も選ぶと、その分け方にも合わせ込まれてしまいます。
分ける数が多いほど無条件に良いと信じられがちですが、実際には学習の回数がその分増え、検証に使う一つが小さくなりすぎて、回ごとの点数がかえって揺れてしまいます。
7ひとこと要約
つまり交差検証は場所を移しながら何回も投げて平均を取る方法で、一度きりの運ではなく実力を測るために使う方法です。
誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新2026-09-02