テストデータがトレーニングデータに漏れないようにする方法を教えてください。


60

予測モデルを構築している人がいると仮定しますが、その人は必ずしも適切な統計的または機械学習の原則に精通しているとは限りません。たぶん私たちは学習中のその人を助けているかもしれませんし、あるいはその人は使用するのに最低限の知識しか必要としない何らかのソフトウェアパッケージを使っているかもしれません。

この人は、実際のテストがサンプル外の精度(またはその他のメトリック)に由来することを非常によく認識するかもしれませんデータの。しかし、私の懸念は、心配する微妙な点があることです。単純な場合、彼らはモデルを構築し、トレーニングデータで評価し、保留されているテストデータで評価します。残念ながら、その時点で戻ってモデル化パラメーターを微調整し、同じ「テスト」データで結果を確認するのは非常に簡単な場合があります。この時点で、データはもはやサンプル外のデータではなく、オーバーフィッティングが問題になる可能性があります。

この問題を解決する1つの潜在的な方法は、多くのサンプル外のデータセットを作成して、各テストデータセットを使用後に破棄し、まったく再利用しないようにすることです。ただし、これには多くのデータ管理が必要です。特に、分析の前に分割を行う必要があります(したがって、事前に分割数を知る必要があります)。

おそらく、従来のアプローチはk倍交差検証です。しかし、ある意味では、特にまだ学習している人にとって有用だと思う「トレーニング」と「テスト」のデータセットの区別を失います。また、これはすべてのタイプの予測モデルに意味があるとは確信していません。

経験の浅いユーザーにはまだある程度明確でありながら、オーバーフィットと漏れのテストの問題を克服するために見落としている方法はありますか?


マイケル、私はMLサイトから重複したスレッドを閉じ、ここで答えをマージしました。この質問を編集して、必要な変更を反映させてください。誤って意味を変更することを恐れて、それを引き受けたくありません。
whuber

この質問は古く、受け入れられた答えがありますが、最初の前提が矛盾しているように思えることを頭から逃れられません。これが演習の学習に関するものである場合、それに取り組むための最善の方法は、それらを失敗させ、その後うまく予測できないオーバーフィットモデルを作成することです。(おそらく、彼らのやり方の誤りを示す秘密のホールドアウトデータセットを保持します。)しかし、誰かが真剣に受け止めて行動しようとしているモデルを作成する資格のない人々がいるように思われ、被害を最小限に抑えようとしています腕の長さで。あなたが言うように、微妙な点がたくさんあります。
ウェイン

回答:


50

あなたは正しい、これは機械学習/統計的モデリングにおける重要な問題です。本質的にこの問題を実際に解決する唯一の方法は、独立したテストセットを保持し、調査が完了するまでそれを保持し、最終検証に使用することです。

ただし、テストセットの結果を見て、それに応じてモデルを変更することは避けられません。ただし、異なるモデルのパフォーマンスの違いは、主に特定のテストデータのサンプルによるものである可能性があるため、必ずしも一般化のパフォーマンスが向上するわけではありません。この場合、選択を行う際に、テストエラーを効果的に過剰適合させます。

これを制限する方法は、テスト誤差の分散を可能な限り小さくすることです(つまり、同じ基礎となる分布から引き出されたデータの異なるサンプルをテストセットとして使用した場合に見られるテスト誤差のばらつき)。これは、可能であれば大規模なテストセットを使用するか、使用可能なデータが少ない場合のブートストラップや相互検証などを使用して最も簡単に実現できます。

モデルの選択におけるこの種の過剰適合は、特にパフォーマンスの推定に関して、一般的に認められているよりもはるかに厄介であることがわかりました。

GC CawleyおよびNLC Talbot、モデル選択の過剰適合とパフォーマンス評価におけるその後の選択バイアス、Journal of Machine Learning Research、2010年。Research、vol。11、ページ2079-2107、2010年7月(www)

この種の問題は、多くの研究で使用されているベンチマークデータセットの使用に特に影響し、新しい研究はそれぞれ以前の研究の結果によって暗黙的に影響を受けるため、観測されたパフォーマンスは真の過度に楽観的な推定値である可能性が高いメソッドのパフォーマンス。私がこれを回避しようとする方法は、多くのデータセットを見て(メソッドが特定のデータセットに調整されていない)、パフォーマンス推定に複数のランダムテスト/トレーニング分割を使用することです(推定の分散を減らすため)。ただし、これらのベンチマークが過剰に適合しているという注意が必要です。

これが発生する別の例は、検証セットに基づいたリーダーボードを使用した機械学習コンテストです。必然的に一部の競合他社は、リーダーボードをさらに上げるためにモデルをいじり続けますが、最終ランキングの最下位になります。この理由は、複数の選択肢が検証セットを過剰に適合しているためです(小さな検証セットのランダムな変動を効果的に学習します)。

統計的に純粋なテストセットを維持できない場合、2つの最良の選択肢は(i)新しいデータを収集して新しい統計的に純粋なテストセットを作成するか、(ii)新しいモデルが基づいているという警告を作成することですテストセットエラーを観察した後に行われた選択により、パフォーマンスの推定値は楽観的なバイアスを持つ可能性があります。


1
+1この答えが経験によってどれだけうまく伝えられているか、そして質問にどれだけ効果的に対処しているかに感銘を受けました。
whuber

3
乾杯、これはここ数年の私の主要な研究トピックであり、機械学習で広く使用されている多くのモデル選択手順は非常に脆弱であり、徹底的に評価されるほど、うまく機能していないようです。機械学習で使用される多くの方法が、パフォーマンス評価中に使用される偏ったモデル選択手順のために、以前のより単純な方法よりもうまく機能しないことは驚くことではありません。質問は本当に良いものです。いじくり回して自分でモデル選択手順に参加しないことが重要です!
ディクラン有袋類

とても興味深い。(あなたの返事が私にそれをより良く感謝させたので、私も質問自体を支持しました。)
whuber

2
(+1)良い反応。テスト精度の過度に楽観的な尺度をもたらす同じデータセットでのいくつかの分類器の使用については、最適な分類器の選択と誤り率推定における負のバイアスで議論されています:高次元予測に関する実証研究、BMC MRM 2009、9:85 (ここに PDFのスライドがあります)、分類ルールの比較における複数ルールバイアス(Yousefi et al。、Bioinformatics 2011、27(12):1675)の他の議論。
CHL

論文へのリンクをありがとう、彼らは面白そうだ。
ディクランマースピアル

15

これを確実にする1つの方法は、モデルを調整するために行うことをすべて「コーディング」していることを確認することです。このように、クロス検証などを使用してプロセスを繰り返し実行すると、実行間で一貫性が保たれます。これにより、すべての潜在的な変動要因が相互検証プロセスによって確実に取得されます。

もう1つの非常に重要なことは、両方のデータセットに代表的なサンプルがあることを確認することです。データセットが予測に使用する予定のデータの種類を代表していない場合、できることはあまりありません。すべてのモデリングは、「誘導」が機能するという前提に基づいています-私たちが観察していないことは、私たちが観察したことのように振る舞います。

一般的な規則として、(i)自分が何をしているのかがわかっていて、(ii)より簡単な方法を試してみて、それらが機能しないことがわかった場合、および複雑な方法が簡単な方法の問題。「単純」および「複雑」とは、フィッティングを行う人にとって「単純」または「複雑」という意味です。これが非常に重要な理由は、「スニフテスト」と呼んでいるものを結果に適用できるからです。結果は正しく見えますか?理解できない手順の結果を「匂い」させることはできません。

N>>p p Np N<p

サンプルが大きい場合、特定の観測値を使用する場合と使用しない場合の違いは、モデリングが「ローカル」すぎない限り、非常に小さくなります。これは、特定のデータポイントの影響が通常のオーダーであるためです。1Nieitest=(1hii)1eitraineitrainhiiiihii=ppN>>phiip=21N×pX

hii=xiT(XTX)1xi=1Nsx2(1xi)(x2¯x¯x¯1)(1xi)=1+x~i2N

x¯=N1ixix2¯=N1ixi2sx2=x2¯x¯2x~i=xix¯sxxi1N100x~i=5hii=26100126100=7410010000126100001%10000x~=5025%

N>>p2hii=xiTEET(XTX)1EETxiEXTXΛhii=ziTΛ1zi=j=1pzji2Λjjzi=ETxixi

ke{k}test=(IkH{k})1e{k}trainH{k}=X{k}(XTX)1X{k}TX{k}N>>p

基本的に、これはすべて、BICやAICなどのトレーニングエラーとテストエラーの違いを考慮して、ペナルティ用語を使用することになります。これにより、テストセットを使用した場合と同じ結果が効果的に得られますが、潜在的に有用な情報を捨てることは強制されません。BICを使用すると、数学的には次のようなモデルの証拠を近似できます。

p(D|MiI)=p(y1y2yN|MiI)

Mi

p(D|MiI)=p(y1|MiI)p(y2yN|y1MiI)
=p(y1|MiI)p(y2|y1MiI)p(y3yN|y1y2MiI)
==i=1Np(yi|y1yi1MiI)
log[p(D|MiI)]=i=1Nlog[p(yi|y1yi1MiI)]

これは、クロスバリデーションの形式を示唆していますが、トレーニングセットが絶えず更新されている場合は、カルマンフィルターと同様に、テストセットから一度に1つの観測が行われます。現在のトレーニングセットを使用してテストセットから次の観測値を予測し、条件付き対数尤度を使用して観測値からの偏差を測定し、トレーニングセットを更新して新しい観測値を含めます。ただし、この手順では、利用可能なすべてのデータを完全に消化すると同時に、すべての観測値が「サンプル外」のケースとしてテストされるようにします。また、不変であり、「観測1」または「観測10」と呼ばれるものは重要ではありません。結果は同じです(一部の順列の計算は他のものより簡単かもしれません)。損失関数も「適応的」ですLi=log[p(yi|y1yi1MiI)]Lii

この方法で予測モデルを評価することは非常にうまくいくと思います。


4
+1-レバレッジに関する優れたアドバイスと興味深い議論(大規模なデータセットの場合)。オーバーフィッティングが発生する可能性のある小さなデータセットを使用する傾向があり、そのような状況では、限界尤度(「証拠」)をオーバーフィッティングすることが非常に簡単であり、最初よりも悪いモデルになってしまいます。AICとBICも同様に「脆弱」だと思います。基本的に最適化は統計上のすべての悪の根源です。有限のサンプルに基づいて行う選択やパラメーターの選択は、過剰適合の可能性をもたらします。マージナライズの方がはるかに安全ですが、一般的に計算コストが高くなります。
ディクランマースピアル

2
+1-特に3番目の段落(最初に簡単な方法を使用)。古き良きパレートルールを思い起こさせます。機械学習者が新しい飼育アルゴリズムの優位性を証明するための不十分な試みを公開する前に、そのことを念頭に置いておくと...
steffen

8

これを保証する唯一の方法は他の誰かがテストデータを持っていること思います。クライアントとコンサルタントの関係では、これはかなり簡単に管理できます。クライアントはコンサルタントにモデルを構築するためのトレーニングセットを提供し、このトレーニングセット内でコンサルタントは必要以上の方法でデータを分割してオーバーフィットを防止します。発生する; その後、モデルはクライアントに戻され、テストデータで使用されます。

個々の研究者にとって、ベストプラクティスはこのセットアップを模倣することであることは理にかなっています。これは、すべてのモデル選択が実行された後、テストするデータの一部を除外することを意味します。残念ながら、あなたが言うように、これは多くの人々によって実践されておらず、さらによく知っているべき人々にも起こります!

ただし、最終的には、モデルの用途によって異なります。その単一のデータセットの予測にのみ興味がある場合は、多分あなたが好きなものをオーバーフィットできますか?ただし、モデルを一般化するモデルとして宣伝したり、実際のアプリケーションで使用したりする場合は、もちろんこれは非常に重要です。

私が言及しなければならない副次的な問題があります。それは、すべての手順を正しく実行しても、データが本当にiidではないため、過剰に適合したモデルになる可能性があるということです。たとえば、データに時間的な相関がある場合、時間1〜3からすべてのトレーニングデータを取得し、時間4でテストすると、予測誤差が予想よりも大きいことがわかります。あるいは、使用中の測定デバイスや、人間の実験における被験者のプールなど、モデルの一般化が予想よりも悪化する原因となる実験固有のアーティファクトが存在する可能性があります。


はい、サンプルから外れたデータセットを作成するのは驚くほど難しいことを知っています。それは偶然に一時的な相関関係に陥りやすく、そうではないからです。
マイケル

1
一部の企業はポリシーとしてこれを行います。たとえばview、一部のチームがテストデータプライベートで、他のチームがテストデータブラインドである場合に、データベースのアクセス許可を適宜設定することによって実装されます。
-ijoseph

6

これは非常に良い質問であり、非常に微妙な問題です。もちろん、あなたをだまそうとする誰かに由来する悪い意図の間違いがあります。しかし、偶発的な漏れを防ぎ、正直な間違いを避ける方法については、さらに深い疑問があります。

運用上の優良事例をいくつか挙げてみましょう。それらはすべて、ある時点で私が犯した正直な間違いに起因しています。

  • データを3つのグループに分けます:トレーニング、検証、テスト。
  • 問題のセットアップを理解して、合理的なものとそうでないものを議論できるようにします。問題を理解してください。データが何を表すかについての微妙な誤解が何度も漏れにつながる可能性があります。たとえば、1つのビデオの同じフレームで誰もトレーニングやテストを行うことはありませんが、同じビデオの2つのフレームが異なるフォールドに分類される場合、同じビデオの2つのフレームは同じ照明を同じ個人に共有するなど、より微妙です。
  • 以前に作成された相互検証手順には非常に注意してください。あなたによって書かれていないもの(LIBSVMはここでは大きな犯罪者です)についてはもっとそうです。
  • オフィスメイトに報告する場合でも、何かを報告する前にすべての実験を少なくとも2回繰り返します。実験コミットを実行し、実行しているコードのバージョンを書き留める前に、バージョン管理はあなたの友人です。
  • データを正規化するときは十分に注意してください。多くの場合、これにより、同時にテストする完全なデータセットがあると考えることになりますが、これも現実的ではありません。

トレーニング/評価セットについて質問がありましたが、machinelearning.stackexchange.com / a / 196/114でそれについて理論的な概要を説明しまし -層別ホールドアウト、k倍交差検証、繰り返し実験の説明。私の教育を受けていない心に、これらの方法は上記の質問に完全に対処し、残りは「教師の問題」です。また、リスト内のすべてのプラクティスは「単純にずさんな、容認できない間違い」を修正するようで、そこには微妙な点は見当たりません。私は何が欠けているのかを理解したい-コメントできますか?
アンドレイスター

私はそれらがすべてずさんなことに由来することに同意します。また、それらはまったく理論的ではないことも述べました(それらは動作可能であると述べました)。投稿を少し編集しました。
carlosdc

5

多くの重要なポイントは、すでに与えられた優れた答えに含まれています。

最近、私はテストデータの統計的な独立性のためにこの個人用チェックリストを作成しました。

  • データ階層の最高レベルでデータを分割(例:患者ごとの分割)
  • また、楽器の日々の変動など、既知の交絡因子または疑わしい交絡因子についても独立して分割します。
  • (DoEは測定のランダムなシーケンスを処理する必要があります**)
  • 複数の患者*が関与する最初の(通常は前処理)ステップから始まるすべての計算ステップは、リサンプリング検証で各サロゲートモデルごとにやり直す必要があります。ホールドアウト/独立テストセットの検証では、このステップの前にテスト患者を分離する必要があります。
    • これは、計算が前処理と呼ばれるか、実際のモデルの一部と見なされるかには関係ありません。
    • 典型的な犯人:平均中心化、分散スケーリング(通常は軽度の影響のみ)、PCAやPLSなどの次元削減(大きなバイアスを引き起こす可能性があります。
  • あらゆる種類のデータ駆動型の最適化またはモデル選択には、最終モデルを独立して検証するための別の(外部)テストが必要です。
  • 特定の独立したテストセットでしか測定できない一般化パフォーマンスには、たとえば、将来測定されるケースの予測パフォーマンスがどのように低下​​するかなどがあります(機器のドリフトだけで時系列予測を扱っていません)。しかし、これには適切に設計された検証研究が必要です。
  • 私の分野では、別の独特なタイプのデータリークがあります。生物組織の空間分解分光法です。クラスター分析を使用して、各クラスターが属するクラス(セミスーパーバイズされていないテストデータ)まったく独立しています)。

  • 最後に大事なことを言い忘れていません。リサンプリング検証をコーディングするとき、実際にデータセットへの計算されたインデックスが、トレーニング患者、日数などからテスト行をつかまないかどうかをチェックします。

「独立性を確保するために行われない分割」と「複数のケースを含む計算が発生する前に分割する」は、独立したテストセットを使用することを主張するテストでも発生し、データアナリストがテストケースの参照を知らない。これらの間違いは、最終モデルが提示されるまでテストデータが保留されている場合は発生しません。

*説明を簡単にするために、データの最上位階層として患者を使用しています。
**私は分析化学者です。機器のドリフトは既知の問題です。実際、化学分析方法の検証の一部は、検証サンプルに対してキャリブレーションをチェックする必要がある頻度と、キャリブレーションをやり直す必要がある頻度を決定することです。


FWIW:実際には、次のようなアプリケーションを扱っています

  • p102103
  • nrowsp
  • nbiol.replicatesnpatientsp100101102
  • 分光測定法に応じて、たとえば、患者のすべての行は、異なる種類のスペクトルの信号対雑音比(機器誤差)も桁違いに変化するため、非常に類似またはかなり異なる場合があります

個人的には、分類器の開発のために適切な独立したテストセットを脇に置いておくのに十分な独立したケースを得るアプリケーションにまだ会っていません。したがって、適切に行われたリサンプリング検証は、メソッドがまだ開発中である間、より良い代替手段であるという結論に達しました。最終的には適切な検証研究を行う必要がありますが、メソッド開発がまだ変化している段階でそれを行うと、リソースの膨大な浪費になります(または、分散のために結果に有用な情報が含まれません)。


2

私の記憶が正しければ、いくつかの予測コンテスト(NetflixやKaggleのコンテストなど)は次のスキームを使用します。

「回答」付きのトレーニングセットがあります。研究者が回答を提供するテストセット#1があります。研究者はスコアを見つけます。研究者が回答を提供するテストセット#2がありますが、研究者はスコアを見つけられません。研究者は、どの予測ケースが#1と#2にあるかを知りません。

ある時点で、セット#2が表示される必要がありますが、少なくとも汚染は制限されています。


2

生物学的シーケンスに基づく予測子などの場合には、ケースが複数のセットに表示されないようにするだけでは不十分です。それでも、セット間の依存関係について心配する必要があります。

たとえば、シーケンスベースの予測では、異なるセット(異なる交差検証セットを含む)のシーケンスが高レベルのシーケンス類似性を共有しないようにすることで、冗長性を削除する必要があります。


2

「k-fold cross validation」は理論的な観点からは正しい答えだと思いますが、あなたの質問は組織的および教育的なものに関するもののように思われるため、別の方法で答えます。


人々が「まだ学習中」である場合、アルゴリズムと「余分な」知識(問題の動機付け、データセットの準備、検証、エラー分析、実用的な落とし穴など)を「迅速かつ汚れて」適用する方法を学習していると考えられることがよくあります)「準備が整った」ときに「後で」学習されます。

これはまったく間違っています。

  1. 学生またはテストセットとトレーニングセットの違いを理解してもらいたい場合、最悪の場合は、「この段階で」「余分な知識」が有害です。これは、ソフトウェア開発におけるウォーターフォールアプローチに似ています-数か月の純粋な設計、数か月の純粋なコーディング、数か月の純粋なテスト、そして最終的には残念な結果。

  2. 学習は滝として行くべきではありません。学習のすべての部分-問題の動機付け、アルゴリズム、実用的な落とし穴、結果の評価-は、小さなステップでまとめなければなりません。(ソフトウェア開発におけるアジャイルなアプローチのように)。

たぶん、ここの誰もがAndrew Ngのml-class.orgを経験しているでしょう-私は彼のコースを堅牢な「アジャイル」の例として、もしそうなら、学習スタイル-「どのように」テストデータがトレーニングデータに漏れないことを確認してください。」


私はあなたの質問を完全に誤解しているかもしれないので、おaびします!:)


人間のための学習(つまり、一般的なモデル化の方法の学習)は、滝としてではなく、モデルの学習としてすべきです。そうしないと、テストデータの一部がトレーニングデータに侵入し、モデルが過剰適合しやすくなります。
マイケルマク

そして、ソフトウェア側からもっと考えていました。ユーザーは、トレーニングで90%、テストで75%の精度を得るモデルを作成します。次に、ソフトウェアのいくつかのノブと設定を微調整し、「テスト」の精度を80%にします。彼らは再び戻って、より多くの微調整を行い、「テスト」で85%の精度を得る。しかし、このいわゆる「テスト」データセットはもはやサンプル外ではなく、モデルはそれに過剰に適合しています。
マイケルマク

まさに。これは人間の学習の問題です(教師の問題、そうする場合)。「XがYに漏れないようにする」という人為的な手段で非表示にするのではなく、できるだけ早く公開する必要があります
-andreister

もっとよく知っておくべき人々はまだこの間違いを犯します。暗黙的または明示的にグッドプラクティスを奨励し、悪いプラクティスを阻止するワークフローを使用して、ソフトウェアパッケージでこの影響をある程度緩和できます。人間がよりよく知っているべきであるということは、問題を無視する理由ではありません。
マイケルマク

@MichaelMcGowan-リークの利点も無視しています-テストセットを使用することでアルゴリズムが改善されている可能性があること(つまり、train + testはtrainのみよりも多くのデータです)。これは、実際には異なるトレードオフであり、精度の向上と精度の測定の向上です。私の場合、前者のほうが重要です。
確率論的
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.