プロジェクトマネジメント

XGBoostはなぜAdaBoostと組み合わせない?勾配ブースティングとの違いと仕組み

はじめに

「XGBoostはAdaBoostと組み合わせて使わないの?」
「どちらも複数のモデルを重ねて精度を高めるなら、一緒に使えばさらに性能が上がるのでは?」と疑問に感じたことはありませんか。

機械学習のブースティング手法を調べていると、AdaBoostや勾配ブースティング、XGBoostが並んで紹介されるため、それぞれを組み合わせて使うものなのか、別々に選ぶものなのか分かりにくくなりがちです。

この記事では、XGBoostがAdaBoostと組み合わせて使われない理由をはじめ、AdaBoost・勾配ブースティングとの違いや、それぞれが誤差を改善する仕組みについて順を追って説明していきます。

XGBoostはAdaBoostを組み合わせた手法ではない理由は?

XGBoostとAdaBoostは、どちらも複数の弱学習器を順番に学習させるBoostingに分類されますが、学習の進め方は異なります

ここでは、XGBoostと勾配ブースティングの関係、AdaBoostとの設計上の違い、両者を組み合わせない理由について順に解説します。

XGBoostは勾配ブースティングを発展させたアルゴリズム

XGBoostは、前のモデルで生じた予測誤差を次のモデルで補いながら学習する、勾配ブースティングをもとにしたアルゴリズムです。

損失関数の勾配や2階微分の情報を利用し、損失が小さくなるように決定木を順番に追加します。

また、正則化によって木が複雑になりすぎるのを抑え、過学習を防ぎやすくしている点も特徴です。

AdaBoostとは異なるBoosting手法として設計されている

XGBoostとAdaBoostは、弱学習器を順番に追加する点は共通していますが、学習の進め方が異なります。

AdaBoostは、誤分類したデータを次の学習でより重視するのに対し、XGBoostは損失関数の勾配をもとに、損失を小さくするように決定木を追加します。

そのため、どちらもBoostingの一種ですが、異なる仕組みを持つ手法です。

XGBoostとAdaBoostを組み合わせない理由

XGBoostとAdaBoostを通常組み合わせないのは、それぞれが単独で予測を改善する仕組みを持っているためです。

XGBoostは勾配をもとに次の決定木を追加するため、AdaBoostのようなデータの重みを更新する仕組みを加える必要はありません。

そのため、基本的には別々のBoosting手法として利用されます。

XGBoost・勾配ブースティング・AdaBoostの違いを整理

XGBoost・勾配ブースティング・AdaBoostは、いずれも複数の弱学習器を順番に追加して予測性能を高めるBoosting系の手法ですが、次のモデルをどのように学習させるかが異なります。

ここでは、AdaBoostと勾配ブースティングの学習方法を確認しながら、同じBoosting系でも異なる考え方でモデルを改善していく点を整理します。

AdaBoostは誤分類されたデータを重視して学習する

AdaBoostは、前の弱学習器が正しく分類できなかったデータの重みを大きくし、次の弱学習器で重点的に学習します。

一方、正しく分類できたデータの重みは相対的に小さくします。

この学習を繰り返し、前の弱学習器が間違えた部分を補いながら予測精度を高めていきます。

勾配ブースティングは誤差を減らす方向で学習する

勾配ブースティングは、現在の予測結果をもとに、損失が小さくなる方向へ次の弱学習器を追加します。

学習では損失関数の勾配を使い、予測をどの方向へ修正すればよいかを求めます。

この処理を繰り返しながら、少しずつ予測誤差を減らしていく仕組みです。

同じBoosting系でも学習の考え方が異なる

AdaBoostと勾配ブースティングは、どちらも弱学習器を順番に追加して予測を改善しますが、学習の進め方が異なります。

AdaBoostは誤分類されたデータの重みを調整するのに対し、勾配ブースティングは損失関数の勾配をもとに学習します。

同じBoosting系でも、予測を改善するための考え方に違いがあります。

XGBoostが採用している勾配ブースティングの考え方

XGBoostの仕組みを理解するには、土台となっている勾配ブースティングの学習方法を押さえることが重要です。

ここでは、弱学習器を追加する流れやXGBoost独自の改善点を確認しながら、AdaBoostとは異なる方向で発展した理由を整理します。

弱い学習器を順番に追加して予測精度を高める

XGBoostでは、複数の決定木を1本ずつ順番に追加して学習します。

新しい決定木は、それまでの予測で残った誤差を小さくするように作られます。

この処理を繰り返し、前の決定木だけでは十分に予測できなかった部分を補いながら、予測精度を高めていく仕組みです。

過学習を抑える仕組みや性能向上の工夫がある

XGBoostには、予測精度を高めながら過学習を抑えるための仕組みがあります。

正則化によって決定木が複雑になりすぎるのを抑えるほか、学習率を使って新しく追加する決定木の影響を調整します。

そのため、必要以上に複雑なモデルになるのを防ぎながら学習を進められます。

AdaBoostとは異なる改善によって発展した手法である

XGBoostはAdaBoostを改良したものではなく、勾配ブースティングをもとに発展した手法です。

損失関数の1階微分と2階微分を利用して次の決定木を作り、さらに正則化によって木の複雑さも調整します。

そのため、誤分類したデータの重みを調整するAdaBoostとは、異なる考え方で予測性能を高めています。

XGBoostとAdaBoostを混同しやすい理由

XGBoostとAdaBoostは、どちらもBoostingに分類される機械学習手法であるため、名前や基本的な位置づけだけを見ると違いを判断しにくい場合があります。

ここでは、XGBoostとAdaBoostが混同されやすい理由を整理しながら、学習の仕組みや使い分けにつながる違いを確認します。

どちらもBoostingに分類されるため違いが分かりにくい

XGBoostとAdaBoostは、どちらも弱学習器を順番に追加しながら予測を改善するBoostingの一種です。

複数の弱学習器を組み合わせて最終的な予測を行う点も共通しています。

そのため、共通点だけを見ると同じような手法に思えますが、学習の進め方には違いがあります。

「Boost」という名前が同じでも仕組みは異なる

どちらも名前に「Boost」が含まれていますが、次の弱学習器を作る方法は異なります。

AdaBoostは誤分類したデータの重みを増やして重点的に学習するのに対し、XGBoostは損失関数の1階微分と2階微分を利用して、損失を小さくするように決定木を追加します。

そのため、同じBoostingでも予測を改善する仕組みは異なります。

目的に応じて使われる場面や考え方が変わる

AdaBoostとXGBoostは仕組みが異なるため、目的やデータに合わせて選ぶことが大切です。

比較的シンプルな仕組みで誤分類を補いながら学習したい場合はAdaBoost、高い予測性能を目指しながら過学習も抑えたい場合はXGBoostが選択肢になります。

どちらが適しているかは、実際のデータで性能を比較して判断するとよいでしょう。

まとめ

XGBoostとAdaBoostは、どちらもBoostingに分類されるため似た手法に見えますが、予測を改善するための考え方には違いがあります。

AdaBoostは誤分類したデータを重視して学習するのに対し、XGBoostは勾配ブースティングをもとに、損失を小さくする方向へ決定木を追加していく手法です。

そのため、XGBoostはAdaBoostを改良したものではなく、両者を組み合わせて使うことも基本的にはありません。

「Boost」という名前だけで同じ仕組みだと考えず、それぞれがどのように予測を改善していくのかを見ると、両者の違いを整理しやすくなります。

実際にモデルを選ぶときは、仕組みの違いを理解したうえで、扱うデータや目的に合わせて比較してみるとよいでしょう。

-プロジェクトマネジメント
-, , ,