モデル選択のためのネストされたクロス検証


91

モデル選択にネストされたクロス検証を使用するにはどうすればよいですか?

私がオンラインで読んだものから、ネストされたCVは次のように機能します。

  • グリッド検索を実行できる内部CVループがあります(たとえば、利用可能なすべてのモデルに対してK折りを実行します。たとえば、ハイパーパラメーター/機能の組み合わせ)
  • 外側のCVループがあります。ここでは、内側のフォールドで勝ったモデルのパフォーマンスを、別の外側のフォールドで測定します。

このプロセスの終わりに、モデルになります(は外側のループの折り畳みの数です)。これらのモデルは、内部CV内のグリッド検索で勝ったモデルであり、異なる可能性があります(たとえば、グリッド検索に応じて、異なるカーネルを備えた、おそらく異なる機能でトレーニングされたSVM)。KK

この出力からモデルを選択するにはどうすればよいですか?各モデルはデータセットのさまざまな部分でトレーニングおよびテストされているため、これらの勝利モデルから最良のモデルを選択することは公平な比較ではないように思えます。K

モデルの選択にネストされたCVを使用するにはどうすればよいですか?

また、ネストされたモデルの選択が学習手順の分析にどのように役立つかを議論するスレッドを読みました。外側のKフォールドから取得したスコアを使用して、どのような種類の分析/チェックを実行できますか?

回答:


76

この[外部クロス検証]出力からモデルを選択するにはどうすればよいですか?

簡単な答え:そうではありません。

モデルの適合手順の一部として内部交差検証を扱います。つまり、ハイパーパラメーターのフィッティングを含むフィッティング(これは、内部クロス検証が非表示になる場所です)は、他のモデル推定ルーチンとまったく同じです。
外側のクロス検証では、このモデルフィッティングアプローチのパフォーマンスを推定します。そのためには、通常の仮定を使用します

  • 外側のサロゲートモデルが構築されたことにより、「本物」のモデルと同等であり 、すべてのデータを持ちます。kmodel.fitting.procedure
  • または、ケース1.で故障した場合(リサンプリング検証の悲観的バイアス)、少なくとも外部代理モデルは互いに同等です。 これにより、テスト結果をプール(平均)できます。また、それらは基本的に同じであると想定しているため、それらの中から選択する必要がないことも意味します。この2番目の弱い仮定の内訳は、モデルの不安定性です。k

サロゲートモデルのうち、一見最適なものを選択しないでください。これは通常、テストの不確実性を「収穫」するだけで、楽観的なバイアスにつながります。k

モデルの選択にネストされたCVを使用するにはどうすればよいですか?

内側の CVは選択を行います。

各モデルはデータセットのさまざまな部分でトレーニングおよびテストされているため、これらのK個の勝利モデルから最良のモデルを選択することは公平な比較ではないように思えます。

サロゲートモデルの1つを選択するのは得策ではないという点で、あなたは正しいです。しかし、あなたはその理由について間違っています。本当の理由:上記を参照してください。これらが同じデータでトレーニングおよびテストされていないという事実は、ここでは「痛い」ことはありません。k

  • 同じテストデータを持たない:後でテスト結果が見たことのないデータに一般化すると主張したいので、これは違いを生むことができません。
  • 同じトレーニングデータがない:
    • モデルが安定していても、違いはありません。ここで安定しているとは、いくつかのケースを他のケースに置き換えてトレーニングデータが「乱れ」ている場合、モデルが(ほとんど)変化しないことを意味します。
    • モデルが安定していない場合、3つの考慮事項が重要です。
      1. 反復/反復 倍交差検証を使用することにより、実際にこれが当てはまるかどうか、またどの程度であるかを実際に測定できます。これにより、わずかに異なるトレーニングデータに基づいて構築された異なるモデルによって予測された同じケースのクロス検証結果を比較できます。k
      2. モデルが安定していない場合、倍交差検証のテスト結果で観測される分散が増加します。合計で有限数のケースのみがテストされるという事実による分散があるだけでなく、追加の分散があります。モデルの不安定性(予測能力の分散)のため。k
      3. 不安定性が実際の問題である場合、「実際の」モデルのパフォーマンスを適切に推定することはできません。

最後の質問にお答えします。

外側のKフォールドから取得したスコアを使用して、どのような種類の分析/チェックを実行できますか?

  • 予測の安定性をチェックします(反復/反復交差検証を使用)
  • 最適化されたハイパーパラメーターの安定性/変動を確認してください。
    1つには、乱雑に分散するハイパーパラメーターが、内部最適化が機能しなかったことを示している可能性があります。別のこととして、これにより、将来同様の状況でコストのかかる最適化ステップなしでハイパーパラメーターを決定できる場合があります。コストがかかるので、計算リソースについては言及しませんが、この「コスト」情報は「通常の」モデルパラメーターを推定するために使用するほうがよいという事実を指します。

  • 選択したモデルの内側と外側の推定値の違いを確認してください。大きな差がある場合(内部が非常に楽観的である場合)、過剰適合のために内部の最適化がうまく機能しなかったというリスクがあります。


@ user99889の質問を更新:外側のCVが不安定になった場合はどうすればよいですか?

まず、外側のCVループで、モデルがその点で安定した予測を生成しないことを検出することは、予測誤差がアプリケーションにとって高すぎることを検出することと実際には異なりません。これは、モデルの検証(または検証)の結果の1つであり、私たちが持っているモデルがその目的に適合していないことを意味しています。

@davipsに答えるコメントで、私は内部 CVの不安定性に取り組むことを考えていました-つまり、モデル最適化プロセスの一部として。

しかし、あなたは確かに正しいです。外側のCVの結果に基づいてモデルを変更する場合、変更されたモデルの独立したテストの別のラウンドが必要です。
ただし、外部CVの不安定性は、最適化が適切に設定されなかったことの兆候でもあります。したがって、外部CVの不安定性を見つけることは、内部CVが必要な方法で不安定性にペナルティを与えなかったことを意味します-これが私の主要なポイントですそのような状況での批判。言い換えれば、最適化によりモデルが過度にオーバーフィットすることを許可/導くのはなぜですか?

しかし、1つのクセは私見であることここにあり後に「最終」モデルのさらなる変化言い訳正確な状況を慎重に考慮し、我々は過剰適合を検出しなかったとして、モデルへの提案された変更を(少数のDF /より制限または凝集)になります。オーバーフィッティングの少ない方向(または、少なくともオーバーフィッティングの傾向が少ないハイパーパラメーター)であること。独立したテストのポイントは、過剰適合を検出することです-不足適合は、トレーニングプロセスで既に使用されたデータによって検出できます。

たとえば、PLSモデルの潜在変数の数をさらに減らすことについて話をしている場合(提案された変更がSVMではなくPLSなどのまったく異なるタイプのモデルである場合、すべてのベットはオフになります) )、とにかくモデリングの中間段階にいることを知っていれば、それについてさらにリラックスできます-結局、最適化されたモデルがまだ不安定であれば、さらに多くのケースが必要であることは疑いありません。また、多くの状況では、パフォーマンスのさまざまな側面を適切にテストするために設計された研究を最終的に実行する必要があります(たとえば、将来取得したデータの一般化)。それでも、完全なモデリングプロセスを報告する必要があり、これらの最新の変更の影響を慎重に議論する必要があると主張します。

また、すでに利用可能な結果から、パフォーマンスのアウトオブバッグアナログCV推定を含む集計が可能になります。これは、ここで良性と考えたい他のタイプのモデルの「後処理」です。繰り返しになりますが、集計が個々の予測よりも有利でないことを確認するために、最初から調査を設計した方が良いでしょう(これは、個々のモデルが安定していると言う別の方法です)。


更新(2019):これらの状況について考えれば考えるほど、「ネストなしのクロスネスト検証」のアプローチを好むようになります。


分類器が不安定な場合、モデルの選択について、最良のものの中からパフォーマンスの中央値を選択する必要がありますか?この選択は、内側のパフォーマンスと外側のパフォーマンスを比較するという提案に似ています。
viyps 14年

2
@davips:モデルが不安定な場合、最適化は機能しません(不安定性により追加のばらつきが生じます)。ただし、中央値(または平均値)のパフォーマンスを持つ1つのモデルを選択しても役に立ちません。代わりに、モデルが不安定な場合は、より制限の厳しいモデル(たとえば、より強い正則化)を使用するか、モデルアンサンブル(1つのモデルの選択とは根本的に異なる)を構築することをお勧めします。
cbeleites

1
@ user99889:最新の回答をご覧ください。
-cbeleites

1
@ user99889:はい-しかし、そこに奇跡を期待しないでください。ケースの80%(k = 5)でトレーニングする際に安定性が問題になる場合は、k = 10の問題、つまり80%/ k = 5のサロゲートモデルと比較してnの90%=追加の12.5%が問題になる可能性があります。
-cbeleites

1
@cbeleites:関連する仮説。パラメータ空間c:[1,2,3]を検索するとします。データセット全体でネストされたCVを実行しますが、パフォーマンスはそれほど良くありません。したがって、検索スペースをc:[0.5,1,1.5,2,2.5,3,3.5,4]に拡張します。非常に悪いことをしたことがありますか?テストデータから得られた知識に基づいて、パラメータ空間(モデリングプロセスの一部)を本質的に変更したため、現在のデータセットの外部のデータセットで評価する必要がありますか?あなたがそれが最善だと思うなら、これを別の質問にしてください。
-user0

27

cebeleitesの優れた答え(+1)に加えて、基本的な考え方は、交差検証を使用して、モデル自体ではなく、モデルを近似する方法のパフォーマンスを評価することです。モデルの選択を実行する必要がある場合、モデルの適合手順の不可欠な部分であるため、交差検証手順の各フォールドで独立して実行する必要があります。交差検証ベースのモデル選択手順を使用する場合、これはネストした交差検証になってしまうことを意味します。各交差検証の目的を検討すると役立ちます。1つはモデル選択用で、もう1つはパフォーマンス推定用です。

ネストされた交差検証を使用して、そのモデルから得られると合理的に期待できるパフォーマンスのアイデアを得た後、モデル(モデルの選択を含む)をデータセット全体に適合させることにより、最終モデルを作成します。


1
なぜあなたはする必要がありget an idea of the performanceますか?
viyps

1
@davips一般に、統計的手法を実用的な目的に使用する場合、ユーザーはそれがどのように機能するかをある程度知りたいと思うでしょう(例:医学的スクリーニングテスト)。また、機械学習アルゴリズムを開発している場合、競合する方法と比較して、それがどれだけうまく機能するかについて公平な推定値を持つことが有用です。また、メソッドが実際に機能するかどうかを検証する便利な手段でもあります(パラメーターの選択とパフォーマンスの推定の両方に相互検証が使用される場合は無効になります)。
ディクラン有袋類14年

5
最終モデルで使用するパラメータを実際に決定するには、一度内側のループを実行しますか?内側のループが10倍の検証だった場合、各モデルのデータトレインの1/10をこのモデルで10回繰り返し、平均誤差が最小のパラメーター値を選択しますか?次に、データセット全体でそのパラメーター値を使用してモデルを再トレーニングしますか?
emschorsch

2
はい、それは正しいです。r
ディクランマースピアル

1
@FedericoTedeschi公平なパフォーマンス推定値を得るために、単に異なる分割ではなく、交差検証をネストする必要があります(私の論文jmlr.csail.mit.edu/papers/volume11/cawley10a/cawley10a.pdfのセクション5.3を参照) 。一般に、LOOCVは、効率的に計算でき、小さなデータセットのモデルにブートストラップ/バギングを使用するモデルのモデル選択にのみ使用します(外側の交差検証をOOBエラーで置き換えます)。
ディクランMarsupial

7

誰も本当に最初の質問に答えたとは思わない。「ネストされた相互検証」によって、彼はそれをGridSearchと組み合わせることを意味したと思います。通常、GridSearchにはCVが組み込まれており、テストするフォールドの数に関するパラメーターを受け取ります。これら2つを組み合わせることは良い習慣だと思いますが、GridSearchとCrossValidationのモデルは最終的なモデルではありません。最適なパラメーターを選択し、最終的にすべてのデータを使用して新しいモデルをトレーニングするか、見えないデータに対してもここでCrossValidationを実行し、モデルが本当に良い場合は、すべてのデータでトレーニングします。それが最終モデルです。


3
明確にするために、python scikit-learnではGridSearchCV(refit=True)、最適なパラメーターを使用して完全なデータにモデルを実際に再適合させるため、追加のステップは不要です。 ドキュメントを参照してください
ポール

改造オプションについては正しいです。私はちょうど明白なことを述べていた!
アンセル

「GridSearchのモデルは最終的なモデルではありません」。しかし、私のポイントは、修理された=真とグリッドサーチモデルがあることである最終モデル。あなたと私が同じページにいるということですか?しかし、CVを使用したグリッド検索でネストがどこで発生するかはまだわかりません。私にはCVの単一レイヤーのように思えます(例えば、グリッド検索の5倍CVはCVの単一レイヤーです)。
ポール

改修については同じページにあります。ただし、ネストされたCVでは、GridSearchの外部に別のCVループを作成し、トレーニングから一部のデータを残して、最終ファイナルモデルが一般化するかどうかを確認します(未知のデータに対して適切な予測を行います)
18年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.