ネストされた交差検証後に最終モデルを構築し、確率しきい値を調整する方法は?


17

まず、ここでここでここでここでここここで詳細に議論されている質問を投稿することに対する謝罪、および古いトピックの再加熱用。@DikranMarsupialがこのトピックについて長々と投稿やジャーナルペーパーで書いていることは知っていますが、私はまだ混乱しており、ここにある同様の投稿の数から判断すると、他の人がまだ把握するのに苦労しています。また、このトピックに関して矛盾が生じたため、混乱を招いたことも述べておく必要があります。また、私はもともと物理学者であり統計学者ではないことも知っておく必要があります。そのため、ここでの私の専門知識はやや限られています。ネストされたCVを使用して、最終モデルに期待できるパフォーマンスを推定するジャーナルペーパーを書いています。私のドメインでは、これが最初です。(ほとんど使用しません私の分野では堅牢なCVの形ですが、ニューラルネットとブーストされた決定木を使用した研究の結果を含む論文を喜んで送り出します!)したがって、私が非常に徹底的かつ明確な理解を持っていることが重要です。私のコミュニティへの誤った手順は、何年も学ぶことができませんでした!ありがとう!質問を続けて...

ネストされた交差検証後に最終モデルを作成するにはどうすればよいですか?

L1とL2の正規化を使用した単純なglmnetモデルをトレーニングしています。それは高速で、シンプルで、解釈可能です。特徴の中心化、スケーリング、およびBox-Cox変換を実行して、特徴の分布が平均中心で標準化されており、ガウスに似ていることを確認します。情報漏えいを防ぐため、この手順は相互検証内で実行します。純粋に私のハードウェアが非常に遅いため、CPUの負荷を増やすことができないため、機能の前処理後にCV内で高速のフィルターベースの機能選択を実行します。ランダムグリッド検索を使用して、アルファおよびラムダハイパーパラメーターを選択しています。私はすべきではないことを理解していますこの推定値を取得するCVループ。内部CVループはモデル選択(この場合、最適なハイパーパラメーター)に使用され、外部ループはモデル評価に使用されること、つまり、内部CV ループと外部CVはしばしば誤って混同される2つの異なる目的を果たすことを理解しています。(私はこれまでどのようにやっていますか?)

さて、私が投稿したリンクは、「相互検証を考える方法は、モデルのパフォーマンスを推定するのではなく、モデルを構築する方法を使用して得られたパフォーマンスを推定することだ」と示唆しています。それを考えると、ネストされたCV手順の結果をどのように解釈する必要がありますか?

私が読んだアドバイスは次のことを示しているようです-これが間違っている場合は修正してください:内側のCVは、glmnetモデルの最適なアルファおよびラムダハイパーパラメーターを選択できるメカニズムの一部です。外側のCVは、ハイパーパラメーターの調整データセット全体使用して最終モデルを構築するなど、内側CVで使用されている手順とまったく同じ手順を適用すると、最終モデルから得られると予想される推定値を示します。つまり、ハイパーパラメーターの調整は「モデルの構築方法」の一部です。これは正しいですか?これは私を混乱させるものだからです。他の場所では、展開する最終モデルを構築する手順には、固定値を使用したデータセット全体のトレーニングが含まれることがわかりましたCVを使用して選択されたハイパーパラメーターの。ここで、「モデルの構築方法」にはチューニングは含まれていません。それで、どちらですか?ある時点で、最適なハイパーパラメーターが選択され、最終モデルを構築するために修正されます!どこ?どうやって?内側のループが5倍のCVで、外側のループが5倍のCVで、内側のCVでのランダムグリッド検索の一部としてテスト用に100ポイントを選択した場合、実際にglmnetを何回トレーニングしますかモデル?(100 * 5 * 5)+ 1(最終ビルド用)、または私が知らないステップが他にありますか?

基本的に、ネストされたCVからパフォーマンスの見積もりを解釈する方法と、最終モデルを構築する方法について、非常に明確な説明が必要です。

また、最終的なglmnetモデルからの確率スコアを(バイナリ)クラスラベルに変換するための確率しきい値を選択するための適切な手順を知りたい--- CVの別のループが必要ですか?

回答:


8

ネストなしのネストされた相互検証の説明

これが、クロス検証とモデル作成(ネスト)の様子です。私は化学者であり、アプリケーション側からモデル構築プロセスを見ているようになっていることに注意してください(以下を参照)。ここでの私の主なポイントは、私の観点から言えば、ネストされたさまざまなクロス検証は必要ないということです。検証方法(クロス検証など)とモデルトレーニング機能が必要です。

model = f (training data)

"my"モデルトレーニング関数f 、内部ですべてのハイパーパラメーターチューニング(たとえばalphalambdaおよびthreshold)を行うため、ハイパーパラメーターを必要としません

言い換えれば、私のトレーニング機能には、任意の数の内部相互検証(または、アウトオブバッグまたは私が有用だと思うパフォーマンス推定値)が含まれている場合があります。ただし、通常、パラメーターハイパーパラメーターの違いは、ハイパーパラメーターを手元のデータセット/アプリケーションに合わせて調整する必要があるのに対し、パラメーターはデータに関係なく適合できることに注意してください。したがって、新しい分類アルゴリズムの開発者の観点からは、g (training data, hyperparameters)データとハイパーパラメーターが与えられた場合にパラメーターに適合する「裸の」適合関数()のみを提供することは理にかなっています。

「外部」トレーニング機能を使用するポイントfは、クロス検証を実行した後、「データセット全体で」トレーニングする簡単な方法を提供することです。クロス検証サロゲートモデルのf (whole data set)呼び出しの代わりに使用するだけf (cv split training data)です。

したがって、あなたの例では、への5 + 1の呼び出しがありf、への各呼び出しにfは、例えば100 * 5の呼び出しがありgます。


確率閾値

さらに別の相互検証でこれを行うことができますが、これは必要ではありません。これは、すぐに使用できるモデルが持っているハイパーパラメータであり、内部で推定することができますf

これを修正するために必要なのは、このようなしきい値を計算できるヒューリスティックです。さまざまなヒューリスティックがあります(ROCから、最小許容感度または特異度またはPPVまたはNPVを超える偽陰性と比較して偽陽性を回避することの重要性を指定して、2つのしきい値と「不確実」(NA)レベルなどを許可します)さまざまな状況に適しています-優れたヒューリスティックは、通常、非常にアプリケーション固有です。

ただし、ここでの質問については、内部fでこれを行うことができます。たとえば、内部クロス検証で取得した予測を使用してROCを計算し、それに応じて作業ポイント/しきい値を見つけます。


質問の一部への具体的なコメント

最終モデルの予想パフォーマンスの推定値として最適なハイパーパラメーターを選択するために使用されるCVのパフォーマンスを報告すべきではないことを理解しています(過度に楽観的です)代わりに、この推定値を取得するために外部CVループを含める必要があります。

はい。(内側の推定値は、外側の推定値に関連する情報を保持しますが、外側の推定値よりもはるかに最適な場合、通常は過剰適合です。)

モデルの選択には内部CVループが使用されることを理解しています

あらゆる種類のデータ駆動型モデルチューニング、実際には->カットオフしきい値のチューニングが含まれます。

(この場合、最適なハイパーパラメーター)および外側のループはモデル評価に使用されます。つまり、内側と外側のCVは、誤って混同されることが多い2つの異なる目的を果たします。

はい。

つまり、ハイパーパラメーターの調整は「モデルの構築方法」の一部です。

私もこのように見たいと思います:私は化学者であり、あなたがアプリケーション側から見ているように:私にとって、訓練/適合モデルはハイパーパラメーターなしでは完全ではありません、より正確には、モデルは私が直接使用できるものです予測を取得します。ただし、他の人は異なるビューを持っていることに注意してください(ハイパーパラメーターチューニングなし)。私の経験では、これは多くの場合、新しいモデルを開発している人々に当てはまります。ハイパーパラメーターの調整は「解決された問題」であり、考慮されません。(補足:検証の観点からクロス検証ができることに関する彼らの見解は、アプリケーション側からクロス検証ができることとは少し異なります)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.