モデルの真の実力を測る、訓練・検証・テストの3分割。汎化性能の概念を理解します。
テストデータで100%正解だったら、それでバッチリってこと?
そこが落とし穴なの。 テストデータで学習しちゃってたら、未知のデータに対する性能はわからないのよ。
機械学習では訓練(train)、検証(validation)、テスト(test)の3つにデータを分けるの。
補足すると、訓練はモデルのパラメータ学習、検証はハイパーパラメータ調整やモデル選択、テストは最終的な汎化性能の評価、という役割分担になっているの。
比率はどれくらいなんですかぁ?
典型は train:val:test = 6:2:2 や 7:2:1。 データ量が多ければtestを5%程度に絞ることも。 重要なのは『テストデータは1度しか使わない』こと。
1度しか使わないって、どうして?
テストデータでハイパーパラメータを調整すると、テストデータに『間接的に学習』してしまい、汎化性能を正しく測れなくなるの。 これをリークと呼ぶ。
汎化性能=未知のデータに対する予測精度。 これを正しく測るには、テストデータを最後の1度だけ使う規律が大切なの。
うぅ〜ん…厳しいルールなんですねぇ…
じゃあ、ハイパラ調整は検証データだけでやればいいんだね!
そうそう。 そして検証データを何度も使うと、今度は検証データにオーバーフィットしてしまうから、{kw('交差検証')}(後の記事で扱うわ)を使ってリスクを抑えることが多いのよ。
DS検定では『データ分割の役割』『リークの危険性』が頻出。 訓練=学習、検証=調整、テスト=最終評価、を明確に区別して。
確認クイズ
モデルのハイパーパラメータ調整に最も適切なデータはどれか。
- 訓練データ
- 検証データ
- テストデータ
- 本番データ
こたえを見る
正解: 2. 検証データ
検証データ。 訓練データはパラメータ学習に使い、テストデータは最終評価のみに使います。 ハイパーパラメータ(学習率・木の深さ等)の調整は検証データで行うのが正しいプロセス分離です。