テストセットとクロス検証セットには異なる目的があります。どちらかを落とすと、その利点を失います:
クロス検証セットを使用してモデルのパフォーマンスを正確に測定することはできません。これは、結果を意図的に調整して、おそらく数百のパラメーターのバリエーションにわたって可能な限り最良のメトリックを取得するためです。したがって、相互検証の結果は楽観的すぎる可能性があります。
同じ理由で、相互検証セットを削除して、ハイパーパラメーターを選択するためにテストセットを使用することはできません。モデルがどれだけ優れているかを過大評価することがほぼ確実であるためです。理想的な世界では、テストセットを1回だけ使用するか、「ニュートラル」な方法で使用して異なる実験を比較します。
相互検証を行い、最適なモデルを見つけて、テストデータを追加してトレーニングを行うと、モデルが改善される可能性があります(場合によっては、おそらく非常に可能性が高い)。ただし、それが実際に発生したかどうかを確認する方法はなく、たとえ発生したとしても、新しいパフォーマンスが何であるかについて公平な推定値はありません。
多くのKaggleコンペティションを目の当たりにして、私の経験では、テストセットを使いすぎて調整することは本物であり、それらのコンペティションに大きな影響を与えます。クロス検証についてはそれほど徹底的ではないが、パブリックリーダーボードに登り、テストでベストモデルを選択した競合他社のグループがしばしば存在します(パブリックリーダーボードは事実上テストセットです)。。。これらの競合他社は、新しいテストセットが最後に導入されたときにリーダーボードをドロップダウンします。
妥当なアプローチの1つは、テストする前に、見つけたハイパーパラメーターを使用して(train + cv)データを再利用することです。そうすれば、より多くのデータでトレーニングを行うことができ、最後にパフォーマンスの独立した測定値を取得できます。
相互検証をさらに活用したい場合、通常のアプローチはk-fold cross validationです。Kaggleコンペティションの一般的なトリックは、k倍交差検証を使用し、データをより大きな(train + cv)トレーニングセットに再結合する代わりに、cv結果をメタモデルにアンサンブルまたはスタックすることです。
最後に、検証およびテスト用の分割が、データセット内で発生する可能性のある相関に対して堅牢であることを常に確認します。