私には、ホールドアウト検証は役に立たないようです。つまり、元のデータセットを2つの部分に分割し(トレーニングとテスト)、テストスコアを一般化の尺度として使用することは、役に立たないでしょう。
K分割交差検証は、一般化のより良い近似を提供するようです(すべての点でトレーニングとテストを行うため)。それでは、なぜ標準のホールドアウト検証を使用するのでしょうか?それともそれについて話す?
私には、ホールドアウト検証は役に立たないようです。つまり、元のデータセットを2つの部分に分割し(トレーニングとテスト)、テストスコアを一般化の尺度として使用することは、役に立たないでしょう。
K分割交差検証は、一般化のより良い近似を提供するようです(すべての点でトレーニングとテストを行うため)。それでは、なぜ標準のホールドアウト検証を使用するのでしょうか?それともそれについて話す?
回答:
私の唯一の推測は、3時間のプログラミングの経験があればホールドアウトできるということです。もう1つは原則として1週間かかり、実際には6か月かかります。
原理的には簡単ですが、コードを書くのは退屈で時間がかかります。Linus Torvaldsが有名なように、「悪いプログラマーはコードを心配します。良いプログラマーはデータ構造とその関係を心配します。」統計を行っている人の多くは、自分自身の過失ではないため、悪いプログラマーです。Rでk倍のクロス検証を効率的に(つまり、2回以上デバッグして使用するのがひどくイライラしないように)行うには、データ構造のあいまいな理解が必要ですが、データ構造は通常「イントロ統計プログラミングへ」チュートリアル。高齢者が初めてインターネットを使用するようなものです。本当に難しいことではありません。最初に把握するのに30分ほどかかりますが、まったく新しいので混乱を招くため、無視するのは簡単です。
このような質問があります:Rでホールドアウト検証を実装する方法。質問者に対する意図的な攻撃は一切ありません。しかし、多くの人はコードリテラシーではありません。人々が交差検証を行っているという事実は、私を幸せにするのに十分です。
馬鹿げた些細なことのように聞こえますが、これは個人的な経験から来ています。
ホールドアウトは、多くの場合、独立したテストセットによる検証と同義で使用されますが、データをランダムに分割することと、独立したテストの検証実験を設計することとの間には重大な違いがあります。
独立したテストセットを使用して、リサンプリングやホールドアウト検証では測定できない一般化パフォーマンス、たとえば未知の将来のケース(=トレーニング終了後に測定されるケース)のパフォーマンスを測定できます。これは、既存のモデルを新しいデータに使用できる期間を知るために重要です(たとえば、機器のドリフトなど)。より一般的には、これは、適用可能性の限界を定義するために外挿性能を測定することとして説明される場合があります。
ホールドアウトが実際に有益な別のシナリオは次のとおりです。トレーニングデータとテストデータが適切に分離されていることを確認するのは非常に簡単です -再サンプリング検証よりもはるかに簡単です。
必要な分離のレベルに応じて、各ステップは他の誰かによって実行される場合があります。最初のレベルとして、テストケースのデータ(測定値さえも)をモデラーに引き渡さないことで、テストデータがモデリングプロセスに漏れないことを非常に確実にすることができます。2番目のレベルでは、最終的なモデルとテストケースの測定値を他の誰かに引き渡すことができます。
はい、リサンプリング検証と比較して、ホールドアウト推定の効率が低いため、その代価を支払います。しかし、リサンプリングの検証ではケースを適切に分離できないと疑われる多くの論文を見てきました(私の分野では、クラスター化/階層化/グループ化されたデータがたくさんあります)。
私は、分割手順(インデックス計算のタイプミス)で以前に検出されなかった(並べ替えテストを実行することで)リークを発見したときに、投稿から1週間後に原稿を撤回することで、リサンプリングのデータリークに関するレッスンを学びました。
結果について同じレベルの確実性を得るために、リサンプリングコード(たとえば、クラスター化されたデータ)をチェックする時間を割く人を見つけるよりも、ホールドアウトの方が効率的な場合があります。しかし、私見では、将来のパフォーマンス(最初のポイント)を測定する必要がある段階になる前、つまり既存のモデルの検証実験を設定する必要がある場合に、これを行うのは通常効率的ではありません。
OTOH、小さなサンプルサイズの状況では、ホールドアウトはオプションではありません:テスト結果が必要な結論を出すのに十分な精度になるように、十分なテストケースをホールドアウトする必要があります50:50推測よりかなり下の範囲の二項95%信頼区間!)フランクハレルは、少なくとも約 割合(正しく予測されたケースの割合など)を適切な精度で適切に測定するには、100(テスト)ケースが必要です。
更新:適切な分割を達成するのが特に難しく、相互検証が実行不可能になる状況があります。多くの交絡因子の問題を考えてください。これらの交絡因子が厳密にネストされている場合、分割は簡単です(たとえば、多数の患者の研究では各患者の複数の標本があり、各標本のセルの数を分析します):サンプリング階層の最高レベルで分割します(患者ごと) 。ただし、ネストされていない独立した交絡因子がある場合があります。たとえば、テストを実行するさまざまな実験者によって引き起こされる日々の変動や分散です。その後、分割がすべて独立していることを確認する必要があります最高レベルの交絡因子(ネストされた交絡因子は自動的に独立します)。一部の交絡因子が研究中にのみ特定される場合、これの世話をすることは非常に困難であり、検証実験の設計と実行は、トレーニングまたはサロゲートモデルのテストのいずれにもデータをほとんど残さない分割を扱うよりも効率的かもしれません。
モデルの選択と適合手順が主観的または部分的にそうであるためにコード化できない場合は、グラフなどを見る必要があるため、ホールドアウト検証が最善です。(CVの各フォールドでMechanical Turkのようなものを使用できると思いますが、実行されたことを聞いたことはありません。)
簡潔な答え:
あなたはこれをリラックスするかもしれません:
あなたの何人かは、これをRでプログラミングすることは問題かもしれないと言いました。「mlr」パッケージをご覧になることをお勧めします。さまざまなパッケージを統一されたインターフェイスでラップし、非常に高度なリサンプリングおよびパフォーマンス評価方法も提供します。
ご覧ください :http : //mlr-org.github.io/mlr-tutorial/release/html/resample/および:http : //mlr-org.github.io/mlr-tutorial/release/html/performance/ index.htm
さらなる説明-CVが実際に行うことは、バイアス分散のトレードオフを破ることです。
現在、両方のアプローチが解決しようとしている問題は、モデルのトレーニングに使用されたデータを条件とする一般化誤差を推定することです。
ホールドアウトには、バイアスと分散に関する問題があります。
テストするデータの量を小さくすることで、テストデータが基になる分布をあまりよく表していない可能性があるため、推定された一般化誤差に分散を導入します。ただし、予測されたパフォーマンスが正しいため、これ自体はバイアスを導入しません。
ただし、トレーニングセットを小さくすると、悲観的なバイアスが生じます。これも、基礎となる分布がデータで適切に表現されておらず、モデルもデータに適合できないためです。トレーニングセットを非常に小さくすると、分散も生じます。
トレーニングとテストセットのサイズが互いに決定するため、悲観的なバイアスと高い分散というトレードオフが生じます。
クロスバリデーションは、より複雑な(高分散)学習者にとって特に重要です。それらは通常、計算的にもより高価であり、プロセス全体を非常に時間のかかるものにする可能性があります。
簡単に言えば; 時間。相互検証では、トレーニングルーチンをk回実行します(つまり、各ホールドアウトセットに対して1回)。大きなデータがある場合、たった1つのデータセットのモデルをトレーニングするのに何時間も、さらには何日もかかる可能性があるため、相互検証を使用するときにkを掛けます。
そのため、交差検証は最善の方法ですが、特定の状況では実行不可能であり、データをさまざまな方法でモデリングしたり、より良いモデルを取得するためにさまざまな損失関数を試したりするのに時間がかかったかもしれません。
私の個人的な好みは、データセット全体から検証データを取得することです。したがって、データの先頭または末尾から単一の10%チャンクを取得するのではなく、データセットの5ポイントから2%を取得します。これにより、検証データは、データ全体をもう少し代表します。