ツリーのバギング や ブースティングのアイデアに関する多くのブログ記事、YouTubeビデオなどがあります。私の一般的な理解では、それぞれの擬似コードは次のとおりです。
バギング:
- サンプルのx%および特徴のy%のN個のランダムサンプルを取得します
- Nのそれぞれにモデル(決定木など)を適合させる
- 各Nで予測
- 予測を平均して最終予測を取得する
ブースティング:
- モデル(意思決定ツリーなど)をデータに適合させる
- 残差を取得する
- モデルを残差に適合させる
- N回のブースティングラウンドで2に進む
- 最終予測は、順次予測子の加重合計です。
上記の私の理解を明確にするために説明しますが、私の意図する質問は次のとおりです。
XGBoostとLightGBMの両方には、バギングを許可するパラメーターがあります。このアプリケーションは、バギングまたはブースティング(すべてのブログ投稿で述べられていること)ではなく、バギングとブースティングです。バギングとブースティングの組み合わせが行われる場所とタイミングの擬似コードは何ですか?
「Bagged Boosted Trees」になると思っていましたが、「Boosted Bagged Trees」のようです。違いは大きいようです。
バギングブーストツリー:
- サンプルのx%および特徴のy%のN個のランダムサンプルを取得します
- N個のサンプルのそれぞれにブーストされたツリーをフィット
- 各Nで予測
- 予測を平均して最終予測を取得する
これが最善の方法のようです。結局、ブーストのリスクは過剰適合であり、バギングの主な利点は過剰適合を減らすことです。ブーストされたモデルの束をまとめることは素晴らしいアイデアのようです。
ただし、たとえば、scikit-learn
gradient_boosting.py(サンプルのバギングを行いますが、ランダムな特徴選択は行いません)を調べ、LightGBMとXGBoostに関する投稿全体のいくつかの小さなナゲットを組み合わせると、XGBoostとLightGBMは次のように機能します。
ブーストバギングツリー:
- 決定木をデータに適合させる
- Nブーストラウンドのiの場合:
- 残差を取得する
- bag_frequency == 0の場合(つまり、5ラウンドごとにバッグする):
- サンプルのx%と特徴のy%の単一のランダムサンプルを取得します。今後このランダムなサンプルを使用してください
- 木を残差に適合させる
- 最終予測は、順次予測子の加重合計です。
ここで私の理解を修正し、詳細を入力してください。Boosted Bagged Tree(bag_frequencyごとにランダムツリーが1つだけ)は、Bagged Boosted Treeほど強力ではないようです。