どうも。最近 Coursera で機械学習のコースを受講している @QUANON です。
概要
教師あり学習のデータセットには、
- トレーニングセット (training set)
- バリデーションセット (validation set)
- 使用しない場合もある。
- テストセット (test set)
があります。しかし、バリデーションセットとテストセットの違いが未だによく分からない、あるいは、なぜテストセットだけでなくバリデーションセットも必要なのかがピンと来ていないので、調べてみました。
バリデーションセットの役割
トレーニングセットを使って分類器を訓練した後で、その分類器のハイパーパラメータをチューニングするために使用します。様々なハイパーパラメータについて、同じトレーニングセットを使って訓練した後で、さらに同じバリデーションセットを使ってそのパフォーマンスを計測します。そして、最もパフォーマンスの優れたパラメータを採用します。
バリデーションセットを使うケースは色々考えられますが、例えば、以下のケースが挙げられます。
- ニューラルネットワークで、精度を計測して隠れ層 (hidden layer) の数を決定する。
- ロジスティクス回帰で、F値を計測して分類のためのしきい値を決定する。
テストセットの役割
トレーニングセットを使って分類器を訓練した後で、その分類器のパフォーマンスをテストするためだけに使用します。テスト後には、それ以上分類器モデルをチューニングしてはいけません。
バリデーションセットとテストセットを分ける理由
最適なパラメータをするためにバリデーションセットを使っているため、そのバリデーションセットを流用してテストを行えば、その他の未使用のデータセットを使うよりもよい結果が得られそうなことは明らかです。つまり、実際よりもエラー率が低くなってしまいます。そのため、最終的なパフォーマンス計測時には、未使用のデータセットとしてのテストセットを用意しておく必要があるわけです。
言われてみればごく当たり前のような気がしますが、これを理解するのに時間がかかってしまいました。
参考
この投稿は Cross Validated というサイト (機械学習版 Stack Overflow かな?) の What is the difference between test set and validation set? というページにある mohsen najafzadeh 氏の回答 を参考にしました。
サイト名がなかなかタイムリーでした。
最後に
僕は機械学習歴が (2016/07 時点で) 2 ヶ月程度とまだまだ浅いので、正直理解に自信がないです。
もし投稿内容に誤りがあったり、よりスマートな説明があったりすればご教示頂けると幸いです。