予測エラーを推定するためのクロス検証とブートストラップの違い


102

クロスバリデーションとブートストラップの違いについて、予測エラーを推定するためにあなたの考えをお願いします。

データセットのサイズが小さい場合や大きなデータセットの場合はうまく機能しますか?

回答:


88

これは、分散とバイアス(通常どおり)に帰着します。CVは偏りが少ない傾向がありますが、KフォールドCVの分散はかなり大きくなります。一方、ブートストラップは分散を大幅に削減する傾向がありますが、より偏った結果をもたらします(悲観的な傾向があります)。他のブートストラップ方法は、ブートストラップバイアス(632および632+ルールなど)に対処するように適合されています。

他の2つのアプローチは、「モンテカルロCV」、別名「脱退グループCV」です。この方法の分散は非常に低く、ホールドアウトのデータの割合が低い場合、バイアスはそれほど悪くありません。また、繰り返されるCVは数回Kフォールドを実行し、通常のKフォールドと同様の結果を平均します。低バイアスを維持し、分散を減らすため、私はこれに最も偏っています。

編集

サンプルサイズが大きい場合、分散の問題はそれほど重要ではなくなり、計算の部分が問題になります。小さいサンプルサイズと大きいサンプルサイズの場合は、CVを繰り返し実行します。

関連する研究の一部を以下に示します(esp KimおよびMolinaro)。

参照資料

Bengio、Y。、およびGrandvalet、Y。(2005)。k分割交差検定の分散を推定する際のバイアス。複雑なデータ問題の統計モデリングと分析、75〜95。

ブラガネト、UM(2004)。クロスサンプル検証は、小サンプルのマイクロアレイ分類Bioinformatics、20(3)、374–380に有効です。doi:10.1093 / bioinformatics / btg419

エフロン、B。(1983)。予測ルールのエラー率の推定:相互検証の改善。Journal of the American Statistics Association、316–331。

Efron、B.&&Tibshirani、R.(1997)。交差検証の改善:The。632+ブートストラップ方式。Journal of the American Statistics Association、548–560。

Furlanello、C.、Merler、S.、Chemini、C.、&Rizzoli、A.(1997)。ブートストラップ632+ルールの生態学的データへの適用。WIRN 97。

Jiang、W.&&Simon、R.(2007)。マイクロアレイ分類における予測誤差を推定するためのブートストラップ手法と調整されたブートストラップ手法の比較。医学統計、26(29)、5320–5334。

Jonathan、P.、Krzanowski、W.&McCarthy、W.(2000)。多変量予測のパフォーマンスを評価するための交差検証の使用について。統計とコンピューティング、10(3)、209–229。

キム・J・H (2009)。分類エラー率の推定:繰り返し交差検証、繰り返しホールドアウトおよびブートストラップ。計算統計およびデータ分析、53(11)、3735–3745。doi:10.1016 / j.csda.2009.04.009

コハビ、R。(1995)。精度推定とモデル選択のための交差検証とブートストラップの研究。人工知能に関する国際合同会議、14、1137–1145。

Martin、J.&&Hirschberg、D.(1996)。分類エラー率の小さなサンプル統計I:エラー率の測定。

モリナロ、AM(2005)。予測誤差の推定:リサンプリング方法の比較。バイオインフォマティクス、21(15)、3301-3307。doi:10.1093 / bioinformatics / bti499

Sauerbrei、W.、&Schumacher1、M.(2000)。データ駆動型回帰モデルの複雑さを評価するためのブートストラップと相互検証。医療データ分析、26–28。

Tibshirani、RJ、およびTibshirani、R。(2009)。交差検定の最小エラー率のバイアス補正。ArxivプレプリントarXiv:0908.2904。


2
ブートストラップバイアスは悲観的ではなく、楽観的です(.0632ではなくシンプルブートストラップ)。これは、Bootstrapがモデルをテストするために多くのトレーニング要素を使用するため、サンプルエラーで多くの重みが生じるためです。
D1X

33

@Frank Harrellはこの質問に対して多くの仕事をしました。特定の参照については知りません。

しかし、私はむしろ2つの手法が異なる目的のためのものであると考えています。クロス検証は、モデルを決定する際の優れたツールです。実際に過剰適合している場合でも、優れたモデルがあると思い込ませるのを防ぐのに役立ちます。

モデルが修正されたら、ブートストラップを使用する方が理にかなっています(少なくとも私には)。

http://www.burns-stat.com/pages/Tutor/bootstrap_resampling.htmlで Rを使用したこれらの概念(および置換テスト)の紹介があります。


2
最初にCVを使用してモデルを選択し、その後、同じデータでブートストラップを使用して推定の誤差を評価することは理にかなっていますか?具体的には、未知の非ガウスノイズを含むデータに対してMLを使用して線形回帰を実行します。
sebhofer

9

私の理解では、ブートストラップはモデルの不確実性を定量化する方法であり、クロス検証はモデルの選択と予測精度の測定に使用されます。


答えてくれてありがとう。ブートストラップは、データセットが小さい(obsが30未満)場合に優れていると考えました。番号?
付与

そう思うでしょう。サンプルサイズが小さい場合、相互検証は適切ではない場合があります。相互検証を1つ省略してもかまいませんが、それは過度に楽観的な傾向があります。
グレン

また、小さなサンプルでブートストラップを行うと、エフロンの元の論文で述べられているように、いくつかの偏った推定値につながることに注意してください。
グレン

予測精度を測定することは、不確実性を定量化する方法ではありませんか?モデル選択にはCVがより一般的であると理解していますが、LASSOのAUCを推定したいのですが、CVまたはブートストラップの方が優れていますか?
マックスゲニス

9

違いの1つは、ジャックナイフのような交差検証ではすべてのデータポイントが使用されるのに対して、データをランダムにリサンプリングするブートストラップではすべてのポイントがヒットしない場合があることです。

必要なだけブートストラップできます。つまり、リサンプルを大きくすることで、サンプルを小さくするのに役立ちます。

交差検定またはジャックナイフ平均はサンプル平均と同じになりますが、ブートストラップ平均はサンプル平均と同じになることはほとんどありません。

交差検証とジャックナイフはすべてのサンプルポイントの重みを同じにするため、ブートストラップよりも小さい(おそらくは誤っている)信頼区間を設定する必要があります。


2
ニール、あなたの発言が間違っているのは少なくとも4人のうち2人のようです。1.各特定のブーストラップサンプルは元のデータポイントの〜63%をカバーしますが、通常のように多くの(たとえば10k)ブートストラップサンプルをサンプリングする場合、各ポイントが少なくとも1つでカバーされる可能性は基本的に100%です。2.簡単な数値チェックを行いました-ブートストラップおよびブートストラップ外のサンプルの平均は、データ全体の平均に非常に近いです。あなたは自分自身を確認することができます
コチェデ

コードは次のとおりです(「編集」をクリックして書式を確認します)。numpyをnpとしてインポートし、pandasをpdとしてインポートn = 1000 B = 1000 y = np.random.randn(n)meanb、meansoob = []、[] for b in range(B):ib = np.random.choice(n、n、replace = True)meanb = y [ib] .mean()meansb.append(meanb)indoob = np.ones(n、dtype = bool)indoob [ib] = False meanoob = y [indoob] .mean()meansoob.append(meanoob)pd.Series(meansb).hist(histt​​ype = 'step')pd.Series(meansoob).hist(histt​​ype = 'step' )印刷np.mean(meansb)、np.mean(meansoob)、pd.Series(Y).mean()
Kochede

@Kochede「本質的に100%」は100%ではありません。「非常に平均に近い」とは、平均とまったく同じではありません。イタチの言葉を使用しています。私は間違っていません
ニールマクギガン

間違った答えを出すだけでなく、デマゴジーでそれらを主張します。ブートストラップサンプルによる予想されるデータのカバレッジは、サンプル数の増加に伴い100%に急速に収束します。上記の実験では、10個未満のブートストラップサンプルの後、すべてのデータポイントがブートストラップによってヒットされます。同様に、ブートストラップサンプルの平均の期待値はサンプル平均に等しくなります。そして、上記の実験では、1000個のブートストラップサンプルの差は0.1%未満です(randnの平均は0であるため、randnの代わりにnp.random.randを使用)
Kochede

参照用に更新されたコードは次のとおりです。numpyをnp、pandasをpdとしてインポートします。n = 1000; B = 1000; y = np.random.rand(n); meansb = []; covered = np.zeros(n、dtype = bool); カバレッジ= []; range(B)のbの#beginループ:ib = np.random.choice(n、n、replace = True); covered [ib] = True; coverage.append(covered.sum()* 1.0 / n); meanb = y [ib] .mean(); meansb.append(meanb); #end loop print coverage [:10]; print np.mean(meansb)、pd.Series(y).mean(); print(np.mean(meansb)-pd.Series(y).mean())/ pd.Series(y).mean();
コチェデ

2

これらは、リサンプリングの2つの手法です。

相互検証では、データをランダムにkfoldに分割し、オーバーフィットに役立ちますが、このアプローチには欠点があります。ランダムサンプルを使用するため、一部のサンプルで大きなエラーが発生します。CVを最小化するための手法はありますが、分類の問題にはそれほど強力ではありません。ブートストラップはこれに役立ち、独自のサンプルチェックからのエラーを改善します。詳細については、参照してください。

https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/cv_boot.pdf

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