みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

機械学習における訓練・検証・試験データの分割

機械学習では,たくさんのデータを利用してモデルを学習させる手法なので,データを統計学的に適切に扱う必要があります.

機械学習では,モデルの訓練と評価に同じデータセットを使用してはいけないという原則があります.モデルは単純にデータセットを丸暗記しているだけかもしれないので,未知のデータを適切に扱えない可能性があるためです.モデルを検証するための未使用データを用意する必要があります.

検証データを使用してモデルの性能を計測しながらハイパーパラメータを調整すると,検証データに対しても過学習する可能性があります.そこで,最終的なモデルの性能を評価するための未使用データを用意する必要があります.

これらの目的のために,事前にデータを3個に分割しておきます.順番に,訓練・検証・試験データと呼びます.英語では,train / dev / test sets や,train / test / validation split などと表現しますが,このあたりは用語が統一されていないようで,文脈が重要です.

訓練データが少ないとモデルの精度に差が出ますし,検証・試験データが少ないと,結果が統計的に評価しにくくなります.データ量を増やすにはコストや時間が必要な場合があります.このような事情により,分割する割合に絶対的な正解はなさそうです.一説によると,1万個までならば,70/30, 60/20/20, 70/15/15 の割合に分割するのが多く,100 万個以上ならば検証・訓練データはそれぞれ 1万個あれば十分と言われています*1

分割するときの方法として最も簡単なのはランダムに選択することです.分類問題の場合,訓練・検証データ間で分類の比率に差があると適切に評価できませんので,分類の比率が同じになるように工夫します.

交差検証 (cross validation) を利用して,訓練・検証データを有効活用することも可能ですが,学習する回数が増えるというデメリットがあります.

そもそもデータに誤りがあったり,誤差が大きいと,モデルの品質は低下します.モデルが複雑すぎると訓練データを丸暗記するだけで過学習となる場合がありますので,モデルは可能な範囲で単純なものがよいとされています.

このような事項に注意して,よいモデルが得られるよう工夫します.