Leave-one-out-cross-validation(LOOCV)の信頼区間を計算する方法

Aug 24 2020

50サンプルの非常に小さなデータセットがあり、単純なロジスティック回帰モデルのパフォーマンスを評価するためにLOOCVを実行しています。評価の信頼区間を知りたいのですが、これはLOOCVで可能ですか?異なるランダムシードを使用してloocv実験を複数回実行しようとしました(ロジスティック回帰のscikit learn実装でランダム状態を設定することを含む)。実行ごとに常に同じ結果が得られるため、分散はゼロです。

私の経歴は統計ではないので、どんな提案でも大歓迎です!
ありがとう。

更新: 以下のすべての回答に感謝します!この特定の問題だけでなく、一般的な相互検証についても学びました。https://avehtari.github.io/modelselection/CV-FAQ.html また、CVに関する問題を学ぶための優れた情報源でもあります。

回答

3 cbeleitesunhappywithSX Aug 25 2020 at 12:10

異なるランダムシードを使用してloocv実験を複数回実行しようとしましたが、[...]実行ごとに常に同じ結果が得られるため、分散はゼロです。

もちろん、同じ結果が得られます。LOOの場合、ランダムシードは異なる代理モデルが評価される順序以外は変更できません。LOOの1回の実行は、それぞれがテストに1つのケースを使用し、残りのn-1を使用するn個の代理モデルで構成されます。トレーニングのケース。どのように多くの実行を行っても、モデルテストケースは各実行で同じトレーニングセットでトレーニングされます。
LOOは、n-1のトレーニングケースを持つすべての可能なモデルが標準の実行で計算されるという意味で網羅的です。

LOOを使用すると、モデルの不安定性による分散の不確実性と、テストされたケースによる分散の不確実性を区別できません。これは、常に1つのケースを1つのサロゲートモデルでテストするためです。サロゲートモデルが複数のケースでテストされることはなく、ケースが複数のモデルでテストされることもありません。
これは、LOOの根底にある実験の設計における根本的な欠陥だと思います。


性能指数(一般化エラーなど)の適切な信頼区間または信頼区間を計算することは、一般に、計算が困難な場合と不可能な場合の間のどこかです。

不確実性のいくつかの原因が全体の不確実性に寄与しています。

  1. テストされたケースの数が有限であるため、分散の不確実性。
  • 分類の精度、感度、特異度(一般に:テストされたケースの比率)などのいくつかの性能指数については、二項分布を使用できます。二項分布の分散は試行の割合と数に依存するため、信頼区間または信頼区間に到達するには、たとえば、観測された正しいケースの数とテストされたケースの数だけが必要です。

    Pythonモジュールについてはよくわかりませんが、たとえばRパッケージのbinomがそのような計算を提供します(さまざまな近似値が利用可能で、参考文献もあります)。このような間隔は、他のすべての不確実性の原因が無視できると想定します(特定の状況では有効な想定となる可能性があります)。

  • 他の性能指数については、残差からエラー伝播を行うことができます。または、たとえば、個々の予測から性能指数をブートストラップします。

  1. モデルの不安定性、つまり代理モデルの真のパフォーマンスの変動。私は上記で説明したように、LOOはケース・ツー・ケースの変動でこれを融合します(遠くで特定の予測のために、あなたはモデルが不良であるかケースが困難またはその両方であるかを知ることができません。)
    品種の繰り返しクロスバリデーション葉ものターン/フォールドごとに複数のケース(または他の多くのリサンプリング検証スキーム)を実行すると、モデルの(不安定な)安定性を直接評価できます。たとえば、私たちの論文Beleites、C。&Salzer、R。の小さなサンプルサイズの状況でのケモメトリックスモデルの安定性の評価と改善、Anal Bioanal Chem、2008、390、1261-1271を参照してください

  2. 場合は、あなたがのパフォーマンスに興味がある上、この特定のアルゴリズムで訓練を受けたモデルではなく、与えられた大きさのトレーニングセットあなたがから、この特定のアルゴリズムで得られるモデル手元のトレーニングデータ、あなたは基本的に測定できないという更なる不確実性があります検証をリサンプリングすることによって。たとえば、Bengio、Y。およびGrandvalet、Y。:No Unbiased Estimator of the Variance of K-Fold Cross-Validation Journal of Machine Learning Research、2004、5、1089-1105を参照してください。

  3. 今のところバイアスについては考えていません。

実用上重要なシナリオの1つは、安定したモデルを取得したことです(不安定性はごくわずかであるため、2。を気にする必要はありません)。アプリケーションは、3。が適用されないことを意味します。その場合、先に進み、1に従って間隔を計算できます。
これは、本番用にモデルをトレーニングし、モデルの複雑さを制限して安定したモデルを作成するタスクの場合によくあります。

もちろん、分散1と2をカバーする信頼区間を導出することもできます。

同様に役立つ可能性のあるより簡単な代替方法は、信頼区間を主張せずに、これらの観測された変動(1.および2.)を表示することです。

3 DemetriPananos Aug 25 2020 at 03:32

1つの方法は、平均と標準偏差を取得し、中心極限定理を適用して、古い平均+2標準誤差の式を正当化することです。各フォールドは非常に高い相関関係があるため、これを行うことに異議がある場合とない場合があります。最善の方法は、実際にプロセス全体をブートストラップしてから、EfronGongブートストラップ手順を使用してトレーニングエラーの楽観性を修正することだと思います。手順はここでRで非常によく説明さており、少しの努力でpythonに変換できます。

1 PeterLeopold Aug 25 2020 at 03:18

「評価の信頼区間」という表現が「LOO交差検定手法を使用してトレーニングデータのロジスティック回帰を実行するときに推測する各パラメーターの信頼できる値の範囲」を意味すると理解した場合。とのトレーニングセットの場合$n$ の値 $p$-次元予測子 $x_i$ と応答 $y_i, i=1\ldots n$、実行します $n$ の計算 $n$ LOOサブセットはそれぞれ $n-1$ポイント。LOOサブセットごとに、計算します$\hat{\beta}^{(i)}, i=1\dots n$ これから、各パラメーター値の2.5パーセンタイルと97.5パーセンタイルを見つけることができます。 $\beta_j$、そしてそれを報告します。

これらの数値は、ヘッセ行列を返すようにフラグを設定して、logistic_regression.fit(model、data、hessian = True)関数(使用しているパッケージ内)を実行することによって得られる頻度信頼区間と一致する必要があります。ヘッセ行列の対角要素は、の要素の逆分散とほぼ同等です。$\beta.$ 次に、たとえば、報告します。 $$ Pr\bigg( |\beta_j-\hat{\beta}_j| < t^c_{\alpha=0.05/2}(\nu) \times \sqrt{\frac{1}{\text{Hessian}[j,j]}}\bigg) < \alpha/2 $$ どこ $\nu=n-p-1$ は自由度であり、 $p$は独立変数の次元数です。ただし、これにはロジスティック回帰の計算が1つだけ必要であり、LOOは必要ありません。これは、興味がないようです。