交差検証
交差検証(交差確認)[1](こうさけんしょう、英: cross-validation)とは、統計学において標本データを分割し、その一部をまず解析して、残る部分でその解析のテストを行い、解析自身の妥当性の検証・確認に当てる手法を指す[2][3][4]。データの解析(および導出された推定・統計的予測)がどれだけ本当に母集団に対処できるかを良い近似で検証・確認するための手法である。
最初に解析するデータを「訓練事例集合(training set、訓練データ)」などと呼び、他のデータを「テスト事例集合(testing set、テストデータ)」などと呼ぶ。
交差検証はSeymour Geisserが生み出した。特にそれ以上標本を集めるのが困難(危険だったり、コストがかかったり)な場合は、データから導いた推定は、交差検証などで慎重に裏付けを確認するべきである。
交差検証の主な種類
ホールドアウト検証
初期標本群から事例を無作為に選択してテスト事例を形成し、残る事例を訓練事例とする。テスト事例に使われるのは初期の標本群の3分の1以下の場合が多い[5]。ただし一般にホールドアウト検証は交差検証には分類されない。なぜなら、データを交差させることがないためである。
k-分割交差検証
![](http://upload.wikimedia.org/wikipedia/commons/thumb/4/4b/KfoldCV.gif/350px-KfoldCV.gif)
英名では" -fold cross-validation"。
-分割交差検証では、標本群を
個に分割する。そして、そのうちの
個をテスト事例、残る
個を訓練事例として、推定値を得る。同様に、
個に分割された標本群のそれぞれが1回ずつテスト事例となるよう、計
回、推定値を計算する。そうやって得られた
回の結果を平均して1つの推定値を得る。
さらに、標本の分割から始まる一連の操作を複数回繰り返して平均を取る場合もある。
leave-one-out 交差検証
![](http://upload.wikimedia.org/wikipedia/commons/thumb/c/c7/LOOCV.gif/300px-LOOCV.gif)
leave-one-out cross-validation (LOOCV,一個抜き交差検証) は、標本群から1つの事例だけを抜き出してテスト事例とし、残りを訓練事例とする。これを全事例が一回ずつテスト事例となるよう検証を繰り返す。これはK-分割交差検証の K を標本サイズにした場合と同じである。ただし、LOOCV にはカーネル回帰[要出典]やティホノフ正則化などと関連がある。
時系列の場合
時系列データの場合、 を訓練データの長さ、
をテストデータの長さとし、
- x番目の訓練データの範囲:
~
- x番目のテストデータの範囲:
~
上記になるようにテストデータが訓練データよりも未来の時刻になるようにスライディングウィンドウにて交差検証する方法がある。時系列は時間の流れで因果関係・相関関係があるため、テストデータは訓練データよりも未来の時刻にしないといけない。
また、以下のように訓練データを先頭から使い徐々に長くする方法もある。[6]
- x番目の訓練データの範囲:
~
- x番目のテストデータの範囲:
~
誤差見積り
パラメータ推定誤差は計算で求めることができる。平均平方誤差(MSE)は分散、平均平方二乗誤差(RMSE)は標準偏差に用いられる。
注意点
交差検証を使い、モデル選択やハイパーパラメータの決定が行われるが、この行為自体は、訓練データ+テストデータ全体に対して過剰適合を招き、交差検証の結果自体は信用できない結果となる[7]。特定の公開データセットに対して、新しい機械学習のモデルで交差検証の結果が改善したという論文発表が多数あるが、そのような手法はその公開データセットに対する過剰適合の可能性がある。
脚注
外部リンク
- Naive Bayes implementation with cross-validation in Visual Basic - ソースコードと実行形式がある
- 汎用のK-分割交差検証の実装 - フリーなオープンソース。複数台のコンピュータで実行可能な分散バージョンもある。
- 数分で交差検証の概観 - 初歩的な解説