ブースティングのout-of-bagエラー推定?


9

ランダムフォレストでは、各ツリーはデータの一意のブーストラップサンプルで並行して成長します。各ブーストラップサンプルには一意の観測値の約63%が含まれていると予想されるため、観測値の約37%が除外され、ツリーのテストに使用できます。

現在、確率的勾配ブースティングでは、RFと同様の推定値もあるようです。OOBerror

bag.fractionが0(0.5を推奨)より大きい値に設定されている場合、gbmは予測パフォーマンスの改善のout-of-bag推定を計算します。次の回帰ツリーの選択に使用されていない観測値の逸脱の減少を評価します。

出典:Ridgeway(2007)、セクション3.3(8ページ)。

それがどのように機能するか/有効であるかを理解するのに問題があります。シーケンスにツリーを追加するとします。元のデータセットのランダムなサブサンプルでこのツリーを成長させています。私はそれを育てるために使用されなかった観察でこの単一の木をテストすることができました。同意した。しかし、ブースティングはシーケンシャルなので、これらの省略された観測の予測を提供するために、これまでに構築されたツリーのシーケンス全体を使用しています。そして、先行する木々の多くがこれらの観察をすでに見ている可能性が高いです。したがって、モデルは実際にはRFのような目に見えない観測について各ラウンドでテストされていませんね?

では、なぜこれが「out-of-bag」エラー推定と呼ばれるのでしょうか。私には、観察がすでに見られているので、それはどのバッグからも「出ていない」ように見えますか?


1
こちらのgithub.com/scikit-learn/scikit-learn/pull/1806の説明を参照してください。OOB推定値の計算方法に関する懸念を表明するのはあなただけではありません。
mpiktas

リンクをありがとう、しかし残念ながらすべてのスレッドの貢献者は私と同じくらい迷っているようです!
Antoine

1
実は違う。github.com/scikit-learn/scikit-learn/pull/2188を参照してください。このコミットでは、OBMスコアがgbmが行う方法でOOB改善に変更されます。このアイデアが正確にどのように機能するかはわかりませんが、私が収集したものから、現在のツリーのOOBサンプルを使用してOOBの改善を計算しています。数式を見つけることができなかったため、この改善がどの程度正確に計算されているかを確認するには、gbmコードを掘り下げる必要があります。
mpiktas

@Antoine本当にエキサイティングな質問!決定的な答えが見つかりましたか?
Soren Havelund Welling

1
いいえ、残念ながら。上記のリンク(コメント内)、このスレッド、およびこの他のスレッドからいくつかのヒントが提供されています。これは私を完全に狂わせています。いつか誰かがフリードマン博士/ Hastieにメールを送るべきです...しかし、あなたの注意をありがとう。
Antoine、

回答:


2

部分的にのみ回答する(そして、質問に新しい質問を追加する)。

R http://www.rdocumentation.org/packages/gbm/functions/gbmのgbm実装には、 out-of-bagnessを調整するための2つのパラメーターがあります。

a)train.fractionすべてのツリーのトレーニングに使用されるデータの割合を定義します。したがって、1- train.fractionは真のOOB(out-of-bag)データになります。

b)bag.fractionブーストの次のツリーの作成に使用されるトレーニングデータの割合を定義します。したがって、ツリーの作成に決して使用されないデータがあり、それらは本当にOOBデータとして使用できます(ただし、可能性は低いですが、以下の質問を参照してください)。

これは私に質問をもたらします。データの37%がOOBであるという分析は、1つのツリーにのみ当てはまります。しかし、どのツリーでも使用されていないデータが存在する可能性ははるかに小さいです(すべてのツリーのOOBになければなりません-私の理解は、各ツリーが独自のブートストラップを行うことです)。したがって、RandomForestsでは、フォレストをテストするOOBになる可能性はほとんどありません。そして、まだR(Breimanのオリジナルコードに基づく)でランダムフォレストの実装は、OOBについて多くを語る(例えば結果データと参照http://www.rdocumentation.org/packages/randomForest/functions/randomForestを N T R E E0.37ntreesntreeerr.rateconfusion

私はそれに答える方法がわかりません(そして質問をして、randomForestsのこの側面を理解していないことに気づかせてくれてありがとう(+1)です)。考えられる解決策は、ブートストラップが1つだけあり、すべてのツリーがそれから構成されることですが、私の知る限り、そうではありません。


RF /バギングの場合、問題はありません。アンサンブル作成プロセスの任意のステップで、元のデータセットの観測を、この観測のないブーストラップサンプルでトレーニングされたすべてのツリーに供給することができます。樹木の総数の約3分の1(約37%)がこの条件を満たす。さらに、これらの木に投票させ、最も人気のあるクラスを選択することにより、観測の予測を得ることができます。予測が、すべてのクラスで平均化された観測値の真のラベルと異なる回数は、out-of-bagエラーの推定値になります
Antoine

1
また、BoostingでOOBエラーの推定機能を提供するものは、train.fractionパラメーター(gbm関数の機能にすぎないが、元のアルゴリズムには存在しない)からではなく、実際にはサブサンプルのみであることからデータを使用して、シーケンス内の各ツリーをトレーニングし、観測は除外します(テストに使用できます)。元の質問に戻ります。これらの観測は、シーケンス内の多くの先行ツリーでおそらく何度も見られているため、テストにどのように使用できますか?
アントワーヌ

RFの各ツリーは確かに、元のデータの独自のユニークなブートストラップサンプルから構築されたものであることを言及するのを忘れていました
Antoine

@ user2835597 RFに関する説明をありがとうございます。したがって、RFのOOBエラーは実際にはフォレスト内の木の1/3しか評価していません(これは私にはあまり役に立たないようです)。まあ、毎日何かを学ぶ。
ジャックウェイナー2015

とにかく、train.fractionパラメータはあなたの質問に対する答えのようです。sklearnの実装にも同様のパラメーターであるサブサンプルがあります(scikit-learn.org/stable/modules/generated/…を
Jacques Wainer、2015

-2

私は彼らが各ステップで袋から推定を行うと信じています。すべてのステップの結果が(係数とともに)追加されるため、OOBエラーは同じ係数で追加することもできます。

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