ホールドアウト検証とクロス検証


54

私には、ホールドアウト検証は役に立たないようです。つまり、元のデータセットを2つの部分に分割し(トレーニングとテスト)、テストスコアを一般化の尺度として使用することは、役に立たないでしょう。

K分割交差検証は、一般化のより良い近似を提供するようです(すべての点でトレーニングとテストを行うため)。それでは、なぜ標準のホールドアウト検証を使用するのでしょうか?それともそれについて話す?


10
なぜあなたは役に立たないと思いますか?統計学習理論の要素のセクション7を読んで、その長所と短所の正式な分析を行うことができます。統計的に言えば、k倍の方が優れていますが、テストセットを使用することは必ずしも悪いことではありません。直観的には、テストセット(正しく使用した場合)は、実際にはトレーニングでまったく使用されていないデータセットであることを考慮する必要があります。そのため、ある意味でモデルを評価するのに非常に役立ちます。また、k-foldは非常に高価なので、k-foldの機能に対する「近似」のようなものです(ただし、計算能力が低い人にとっては)。
チャーリーパーカー

承知しました。理論的な観点からは、Kフォールドはより正確ですが、計算量がわずかに高くなります。問題は、なぜK倍交差検証を常に行わないのかということでした。

2
そうですか。私は、その理由はほとんど常に計算上のものだと主張します。Kフォールドは一般化誤差をより良く近似するので、統計的な観点から、Kフォールドは私が信じる選択の方法です。ホールドアウトは実装がはるかに簡単であり、多くのモデルほどトレーニングを必要としません。実際には、モデルのトレーニングにはかなりの費用がかかります。
チャーリーパーカー

1
正しい-しかし、「計算が高すぎる」という議論はかなり虚弱だと思う。ほぼ常に、最も正確なモデルの開発を目指しています。しかし、このパラドックスでは、文献で行われた多くの実験が、単一のホールドアウト検証セットしか持っていません。

1
質問-「K fold cross validation」というタイトルの統計学習理論のセクション7.10.1の要素は、テストデータをトレーニングデータと完全に分離すること(検証のように)が理想的であり、k倍検証は、データは何度も不足しています。私はまだ統計についてはまったく新しいのですが、実際に相互検証がより正確である点を指摘できますか?
numX

回答:


21

私の唯一の推測は、3時間のプログラミングの経験があればホールドアウトできるということです。もう1つは原則として1週間かかり、実際には6か月かかります。

原理的には簡単ですが、コードを書くのは退屈で時間がかかります。Linus Torvaldsが有名なように、「悪いプログラマーはコードを心配します。良いプログラマーはデータ構造とその関係を心配します。」統計を行っている人の多くは、自分自身の過失ではないため、悪いプログラマーです。Rでk倍のクロス検証を効率的に(つまり、2回以上デバッグして使用するのがひどくイライラしないように)行うには、データ構造のあいまいな理解が必要ですが、データ構造は通常「イントロ統計プログラミングへ」チュートリアル。高齢者が初めてインターネットを使用するようなものです。本当に難しいことではありません。最初に把握するのに30分ほどかかりますが、まったく新しいので混乱を招くため、無視するのは簡単です。

このような質問があります:Rでホールドアウト検証を実装する方法。質問者に対する意図的な攻撃は一切ありません。しかし、多くの人はコードリテラシーではありません。人々が交差検証を行っているという事実は、私を幸せにするのに十分です。

馬鹿げた些細なことのように聞こえますが、これは個人的な経験から来ています。


18
たぶんCSを専攻している人として私はこれに少し偏った見解を持っていますが、ホールドアウト検証を正しく実装できる場合(すでにデータセットを2つの部分に分割し、一方をトレーニングに、もう一方をテストに使用することを意味します)、変更する必要があるのは、スプリットの比率であり、すべてをループに入れます。これが大きな問題になるとは信じがたいようです。
VOO

3
@Voo:さらに、ここでプログラムを作成するだけでは十分ではありません。分割手順中に考慮する必要がある交絡因子を判断できるように、問題を十分に理解する必要があります。たとえばstats.stackexchange.com/questions/20010/…を参照してください。この種の問題は、「純粋な」コーディング問題よりも頻繁に見られると思います(ただし、データマトリックス内の行の単純な分割をほとんどコーディングできない人は、通常、分割しないという高レベルの間違いを犯します)例:患者レベル)
cbeleitesはモニカをサポートし

また、測定器が生成するファイルを分離することにより、プログラミングなしで適切な(たとえば患者/測定日/ ...)ホールドアウト分割を行うことができることに注意してください...
cbeleitesはMonica 14年

5
賛成票:論理に疑問を投げかける別の質問をしたことに注意してください。stats.stackexchange.com/q/108345/36229
shadowtalker 14

1
2つの相互検証方法の違いを説明する答えは、学習するための人間の時間であり、不当に偏っており、
役に立た

40

ホールドアウトは、多くの場合、独立したテストセットによる検証と同義で使用されますが、データをランダムに分割することと、独立したテストの検証実験を設計することとの間には重大な違いがあります。

独立したテストセットを使用して、リサンプリングやホールドアウト検証では測定できない一般化パフォーマンス、たとえば未知の将来のケース(=トレーニング終了後に測定されるケース)のパフォーマンスを測定できます。これは、既存のモデルを新しいデータに使用できる期間を知るために重要です(たとえば、機器のドリフトなど)。より一般的には、これは、適用可能性の限界を定義するために外挿性能を測定することとして説明される場合があります。

ホールドアウトが実際に有益な別のシナリオは次のとおりです。トレーニングデータとテストデータが適切に分離されていることを確認するのは非常に簡単です -再サンプリング検証よりもはるかに簡単です。

  1. 分割を決定します(例:ケースのランダムな割り当て)
  2. 測る
  3. トレーニングケースの測定および参照データ=>モデリング\テストケースの測定も参照も、モデルを作成する人に渡されません。
  4. 最終モデル+保留ケースの測定=>予測
  5. 保留ケースの参照と予測を比較します。

必要な分離のレベルに応じて、各ステップは他の誰かによって実行される場合があります。最初のレベルとして、テストケースのデータ(測定値さえも)をモデラーに引き渡さないことで、テストデータがモデリングプロセスに漏れないことを非常に確実にすることができます。2番目のレベルでは、最終的なモデルとテストケースの測定値を他の誰かに引き渡すことができます。

はい、リサンプリング検証と比較して、ホールドアウト推定の効率が低いため、その代価を支払います。しかし、リサンプリングの検証ではケースを適切に分離できないと疑われる多くの論文を見てきました(私の分野では、クラスター化/階層化/グループ化されたデータがたくさんあります)。

私は、分割手順(インデックス計算のタイプミス)で以前に検出されなかった(並べ替えテストを実行することで)リークを発見したときに、投稿から1週間後に原稿を撤回することで、リサンプリングのデータリークに関するレッスンを学びました。

結果について同じレベルの確実性を得るために、リサンプリングコード(たとえば、クラスター化されたデータ)をチェックする時間を割く人を見つけるよりも、ホールドアウトの方が効率的な場合があります。しかし、私見では、将来のパフォーマンス(最初のポイント)を測定する必要がある段階になる前、つまり既存のモデルの検証実験を設定する必要がある場合に、これを行うのは通常効率的ではありません。

OTOH、小さなサンプルサイズの状況では、ホールドアウトはオプションではありません:テスト結果が必要な結論を出すのに十分な精度になるように、十分なテストケースをホールドアウトする必要があります50:50推測よりかなり下の範囲の二項95%信頼区間!)フランクハレルは、少なくとも約 割合(正しく予測されたケースの割合など)を適切な精度で適切に測定するには、100(テスト)ケースが必要です。


更新:適切な分割を達成するのが特に難しく、相互検証が実行不可能になる状況があります。多くの交絡因子の問題を考えてください。これらの交絡因子が厳密にネストされている場合、分割は簡単です(たとえば、多数の患者の研究では各患者の複数の標本があり、各標本のセルの数を分析します):サンプリング階層の最高レベルで分割します(患者ごと) 。ただし、ネストされていない独立した交絡因子がある場合があります。たとえば、テストを実行するさまざまな実験者によって引き起こされる日々の変動や分散です。その後、分割がすべて独立していることを確認する必要があります最高レベルの交絡因子(ネストされた交絡因子は自動的に独立します)。一部の交絡因子が研究中にのみ特定される場合、これの世話をすることは非常に困難であり、検証実験の設計と実行は、トレーニングまたはサロゲートモデルのテストのいずれにもデータをほとんど残さない分割を扱うよりも効率的かもしれません。


6
この非常に綿密な回答に対して+1以上を提供できればと思います。専門家であっても、このような問題を除外することは些細なことではないことを効果的に示しているため、データリークの問題に言及することが特に気に入った。これは現実的なチェックです。
マーククレセン14年

質問をお願いしませんか?はい、交絡因子のために分割は難しいですが、単一のホールドアウト検証を行うのか、k倍交差検証を行うのかに関係なく、難しいのではありませんか?(洞察力のある答えにかかわらず感謝!)
ニルスフォンバース

1
@NilsvonBarth:私の引数がどのように循環しているのかわかりません:OPは「なぜ(まったく)ホールドアウト検証を使用するのか」と尋ね、実際的な理由をたくさん与えます。限られた数のケースを統計的に最も効率的に使用することが、研究デザインの最も重要な特性であるとは限りません。(私の経験では、ケース数が非常に限られているためによくあります:ホールドアウトではなく、繰り返し/反復k-fold CVをはるかに頻繁にアドバイスしています)。一部の交絡因子では、物理的な分割が可能であり、簡単であり、スニークプレビューを防ぐための非常に効率的な方法です。私たちがそれを二重に見つけるかどうかは誰が知っていますか?
cbeleitesはモニカをサポートします

盲検統計データ分析は、ある時点であまりにも多くの偽陽性論文に対して必要になるかもしれませんか?
cbeleitesはモニカをサポートします

2
@NilsvonBarth:独立性を保証するホールドアウトに注意してください:このような方法でホールドアウトを実装するのは簡単です(ケースの物理的なホールドアウトにより、つまり、試験片は片付けられ、モデルのトレーニングが終了した後にのみ測定されます)多くの場合、ホールドアウトという用語は、実際にはデータの単一のランダムな分割のようなものに使用されます-そして、分割で間違いを犯す可能性はすべて、ホールドアウトでも行うことができます!
cbeleitesはモニカをサポートします

8

knnkk

質問に答えるために:

  1. なぜそれについて話すのですか?教育的に。ホールドアウト検証を特別なものと考えることは価値がありますが、非常に有用な方法であり、多くのバリエーションがあります。

  2. nk

nknkn


13
2倍検証では2つのモデルに適合し、2つのホールドアウトセット全体でエラーを平均化するため、ホールドアウトは2倍検証と同じではないと思います。
アレックス

8

モデルの選択と適合手順が主観的または部分的にそうであるためにコード化できない場合は、グラフなどを見る必要があるため、ホールドアウト検証が最善です。(CVの各フォールドでMechanical Turkのようなものを使用できると思いますが、実行されたことを聞いたことはありません。)


6

Andrew NgがスタンフォードのCS 229クラスでクロス検証について言及した簡単なガイドラインを追加したかっただけです。これらは彼が彼自身の仕事で従う慣行です。

mm20

20<m100km

100<m1,000,000(k=5)m>10,000

m1,000,000(k=5)


5

簡潔な答え:

k=5

  • 複雑なモデル
  • 有効性の制約を順守しなければならない最終結果

あなたはこれをリラックスするかもしれません:

  • 非常に大きなデータセットのトレーニング
  • 単純なモデルのトレーニング
  • 時間が問題になる場合のプロトタイピング

あなたの何人かは、これを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が実際に行うことは、バイアス分散のトレードオフを破ることです。

現在、両方のアプローチが解決しようとしている問題は、モデルのトレーニングに使用されたデータを条件とする一般化誤差を推定することです。

ホールドアウトには、バイアスと分散に関する問題があります。

テストするデータの量を小さくすることで、テストデータが基になる分布をあまりよく表していない可能性があるため、推定された一般化誤差に分散を導入します。ただし、予測されたパフォーマンスが正しいため、これ自体はバイアスを導入しません。

ただし、トレーニングセットを小さくすると、悲観的なバイアスが生じます。これも、基礎となる分布がデータで適切に表現されておらず、モデルもデータに適合できないためです。トレーニングセットを非常に小さくすると、分散も生じます。

トレーニングとテストセットのサイズが互いに決定するため、悲観的なバイアスと高い分散というトレードオフが生じます。

kk1k

クロスバリデーションは、より複雑な(高分散)学習者にとって特に重要です。それらは通常、計算的にもより高価であり、プロセス全体を非常に時間のかかるものにする可能性があります。


3

これらはすべて有用なコメントです。もう1つ考慮してください。十分なデータがある場合、ホールドアウトの使用は特定のモデル(特定のSVMモデル、特定のCARTモデルなど)を評価する方法ですが、他の相互検証手順を使用する場合は(問題の条件下で)方法論を評価します)モデルではなく(SVM方法論、CART方法論など)。

これがお役に立てば幸いです!


3

時間的に重要なデータを使用したモデリングは、私にとっては例外です。以前のデータに基づいて将来を予測する必要がある場合、Kフォールドは機能しない場合があります。テストセットは将来のデータである必要があり、トレーニング段階でテストセットに触れることはできません。exは売りまたは株式市場を予測します。ホールドアウトは、これらの場合に便利です。


重大なデータの時間ですか?
nbro

3

簡単に言えば; 時間。相互検証では、トレーニングルーチンをk回実行します(つまり、各ホールドアウトセットに対して1回)。大きなデータがある場合、たった1つのデータセットのモデルをトレーニングするのに何時間も、さらには何日もかかる可能性があるため、相互検証を使用するときにkを掛けます。

そのため、交差検証は最善の方法ですが、特定の状況では実行不可能であり、データをさまざまな方法でモデリングしたり、より良いモデルを取得するためにさまざまな損失関数を試したりするのに時間がかかったかもしれません。

私の個人的な好みは、データセット全体から検証データを取得することです。したがって、データの先頭または末尾から単一の10%チャンクを取得するのではなく、データセットの5ポイントから2%を取得します。これにより、検証データは、データ全体をもう少し代表します。


それは古い質問と新しい答えですが、「K-foldはより正確ですがわずかに計算コストが高い」という根拠のない主張に挑戦しているため、これを投票しています。
簡潔

0

相互検証を適用することが常に可能であるとは限らないことに注意してください。履歴データを使用して将来の動作の予測モデルをトレーニングするように、時間依存のデータセットを検討します。この場合、ホールドアウト検証を適用する必要があります。


2
この場合、前方検証を行う必要があります。
ニールG
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.