回答:
次の状況を考慮してください。
地下鉄に乗ってオフィスに行きたいです。私の計画は、私の車に乗り、地下鉄に駐車してから、電車に乗ってオフィスに行くことです。私の目標は、毎日午前8時15分に電車に乗って、時間通りにオフィスに到着できるようにすることです。私は次のことを決定する必要があります:(a)家を出る必要がある時間と(b)駅まで車で行くために取るルート。
上記の例では、2つのパラメーター(つまり、自宅からの出発時間と駅までのルート)があり、午前8時15分までに駅に到着するようにこれらのパラメーターを選択する必要があります。
上記の問題を解決するために、月曜日、水曜日、金曜日に「パラメータ」の異なるセット(つまり、出発時刻とルートの異なる組み合わせ)を試して、どの組み合わせが「最良」であるかを確認します。目的は、最適な組み合わせを特定したら、毎日使用して目標を達成できるようにすることです。
オーバーフィットの問題
上記のアプローチの問題は、私が過剰フィットする可能性があることです。これは、本質的に、特定の最良の組み合わせが何らかの意味で月、水、金曜日に固有であり、その組み合わせが火と木では機能しない可能性があることを意味します 時間とルートの最適な組み合わせを検索する際に、火曜日と木曜日には発生しない月/水/金の交通状況の一部を利用すると、過剰適合が発生する可能性があります。
オーバーフィッティングの1つのソリューション:交差検証
交差検証は、過剰適合の1つの解決策です。アイデアは、パラメーターの最適な組み合わせ(この場合は時間とルート)を特定したら、別のコンテキストでそのパラメーターセットのパフォーマンスをテストすることです。したがって、火曜日と木曜日にもテストを行い、その日でも選択が機能することを確認します。
アナロジーを統計に拡張する
統計では、同様の問題があります。多くの場合、限られたデータセットを使用して、未知のパラメーターを推定します。オーバーフィットした場合、パラメーター推定値は既存のデータに対して非常にうまく機能しますが、別のコンテキストでそれらを使用する場合にはうまく機能しません。したがって、交差検証は、パラメーター推定値が推定に使用したデータに一意ではないことをある程度保証することにより、上記の過適合の問題を回避するのに役立ちます。
もちろん、相互検証は完全ではありません。地下鉄の例に戻ると、交差検証の後でも、さまざまな問題(たとえば、建設、交通量の経時変化など)により、最適なパラメーターの選択が1か月後に機能しないことがあります。
これは次の図で最もよく説明されていると思います(この場合はk分割交差検証を示しています)。
交差検定は、特にデータの量が制限される可能性がある場合に、予測モデルでの過剰適合から保護するために使用される手法です。交差検証では、データの固定数(または分割)を作成し、各分割で分析を実行してから、全体的なエラー推定値を平均します。
何らかのプロセスを調査するとしましょう。それを説明するデータを収集し、モデルを構築しました(統計またはMLのどちらでもかまいません)。しかし、今、大丈夫かどうかを判断する方法は?おそらく、それが構築されたデータに疑わしいほど適合するので、誰もあなたのモデルがあなたが考えるほど素晴らしいとは信じないでしょう。
最初のアイデアは、データのサブセットを分離し、それを使用して、メソッドによってモデルのビルドを残りのデータでテストすることです。これで結果は間違いなくオーバーフィッティングなしになりますが、それでも(特に小さなセットの場合)運が良かったり、テストするケースが(より少ない)より単純だったり、予測が(難しく)簡単になったりする可能性があります...あなたはおそらくその分布について何も知らないので、エラー/良さの推定はモデルの比較/最適化には役に立ちません。
疑わしい場合は、ブルートフォースを使用して、上記のプロセスを複製し、精度/エラー/良さのいくつかの推定値を収集し、それらを平均するだけで、クロス検証を取得できます。より良い推定の中で、ヒストグラムも得られるため、分布を近似したり、ノンパラメトリックテストを実行したりできます。
そしてこれがそれです。テストトレインの分割の詳細が異なるCVタイプの理由ですが、まれなケースとわずかな強度の違いは除きますが、それらはかなり同等です。確かに、それはそれを防弾公平な方法にするので、大きな利点です。それをだますことは非常に難しいです。
トレーニング時にテストデータにアクセスできず、モデルが見えないテストデータでうまく機能するようにしたいので、一部のテストデータに繰り返しサブサンプリングすることで、一部のテストデータにアクセスできるようになります。トレーニングデータ、モデルのトレーニング中にこのセットを保持し、テストデータのプロキシとして保持されたセットを処理します(そして、保持されたデータで最高のパフォーマンスを提供するモデルパラメーターを選択します)。トレーニングデータからさまざまなサブセットをランダムにサンプリングすることで、それらをテストデータのように(平均的な動作の意味で)見せることができます。したがって、学習したモデルパラメーターもテストデータ(つまり、モデル)目に見えないデータに対して一般化する)。