ホーム Topics XGboost XGBoostとは
watsonx.aiでXGBoost を使用する AI関連の最新情報を購読する
雲、円グラフ、グラフのピクトグラムをコラージュしたイラスト

公開日:2024年5月9日
寄稿者: Eda Kavlakoglu、Erika Russi

XGBoostとは

XGBoost(eXtreme Gradient Boosting)は、勾配降下法による教師ありブースティング・アルゴリズムである勾配ブースティング決定木を使用した、分散型のオープンソース機械学習ライブラリーです。スピードと効率、そして大規模なデータ・セットで適切に拡張できる点が強みです。

ワシントン大学のTianqi Chen氏によって開発されたXGBoostは、同じ一般的なフレームワークによる勾配ブースティングの高度な実装です。残余を足し合わせることで、弱い学習器を強い学習器に結合します。このライブラリーは、C++、Python、R、Java、Scala、Juliaで使用できます。1

 

決定木とブースティングの比較

決定木は、機械学習における分類または回帰タスクに使用されます。階層的なツリー構造を使用し、内部ノードは特徴を表し、枝は決定ルールを表し、各葉ノードはデータ・セットの結果を表します。

決定木は、オーバーフィッティング(過学習)する傾向があるため、ブースティングなどのアンサンブル手法は、多くの場合、より堅牢なモデルを構築するために使用されます。ブースティングは、複数の個別の弱い決定木(ランダムな偶然よりもわずかに優れたパフォーマンスを発揮するモデル)を組み合わせて、強力な学習器を形成します。それぞれの弱い学習器は、前のモデルによって生じたエラーを修正するように順番にトレーニングされます。何百回も繰り返すことで、弱い学習器は強い学習器に変換されます。

ランダム・フォレストとブースティング・アルゴリズムはどちらも、個々の学習ツリーを使用して予測パフォーマンスを向上させる、一般的なアンサンブル学習の手法です。ランダム・フォレストは、バギング(Bootstrap Aggregation)の概念に基づいており、各ツリーを個別にトレーニングして予測を組み合わせます。一方、ブースティング・アルゴリズムは、弱い学習器を順番にトレーニングして、前のモデルの間違いを修正するように順番にトレーニングします。

勾配ブースティング決定木

勾配ブースティング決定木は、勾配降下法を使用するブースティング・アルゴリズムの一種です。他のブースティング手法と同様に、予測を行うための弱い学習器からスタートします。勾配ブースティングの最初の決定木は、ベース学習器と呼ばれます。次に、ベース学習器の間違いに基づいて追加的に新しいツリーが作成されます。続いて、アルゴリズムは各ツリーの予測残差を計算し、モデルの予測が現実からどの程度かけ離れていたかを判断します。残余とは、モデルの予測値と実際の値の差です。次に、残差が集計されて、損失関数に基づいてモデルにスコアが付けられます。

機械学習では、損失関数を使用してモデルのパフォーマンスを測定します。勾配ブースティング決定木の勾配は、勾配降下法を指しています。勾配降下法は、新しいモデルをトレーニングする際の損失を最小限に抑える(つまり、モデルのパフォーマンスを向上させる)ために使用されます。勾配降下法は、機械学習問題の損失関数を最小化するために使用される一般的な最適化アルゴリズムです。損失関数の例としては、回帰問題の平均二乗誤差や平均絶対誤差、分類問題の交差エントロピー誤差、特定のユースケースやデータ・セットに合わせて開発されたカスタムの損失関数などがあります。

エンタープライズAIを拡張するために、AIガバナンスがビジネス上不可欠である理由

特にAIガバナンスやリスク管理ソリューションの欠如など、AI導入の障壁について学びましょう。

関連コンテンツ

責任あるAIワークフローに関する電子ブックに登録する

XGBoostの特徴

scikit-learn2の勾配ブースティング・パッケージと比較した、PythonのXGBoostの一部の機能について説明します。

  • 並列および分散コンピューティング:ライブラリーは、データをブロックと呼ばれるメモリ内に格納します。個別のブロックはマシン間で分散したり、Out-of-Coreコンピューティングを使用して、外部メモリに保存したりできます。XGBoostでは、計算を高速化するためにコンピューターのクラスター全体に分散トレーニングを行うなど、より高度なユースケースも可能になります。XGBoostは、Apache Spark、Dask、Kubernetesなどのツールを使用して分散モードで実装することもできます。
  • キャッシュを考慮したプリフェッチ・アルゴリズム:XGBoostは、キャッシュを意識したプリフェッチ・アルゴリズムを使用しており、大規模なデータセットの実行時間を短縮するのに役立ちます。このライブラリーは、1台のマシンで他の既存のフレームワークよりも10倍以上高速に動作します。そのスピードにより、XGBoostは少ないリソースで何十億もの例を処理することができ、スケーラブルなツリー・ブースティング・システムとなっています。
  • 正則化の組み込み:XGBoostには、通常の勾配ブースティングとは異なり、学習目的の一部として正則化が組み込まれています。また、ハイパーパラメーターのチューニングによって、データを正則化することもできます。XGBoostに組み込まれた正則化を活用することで、このライブラリは通常のscikit-learnの勾配ブースティング・パッケージよりも良い結果を出すことも可能です。
  • 欠損値の扱い: XGBoostは、スパース・データにスパース対応のアルゴリズムを使用します。データ・セットに欠損値がある場合、データ・ポイントはデフォルトの方向に分類され、アルゴリズムは欠損値を処理するための最適な方向を学習します。
XGBoostの仕組み

このセクションでは、XGBoostパッケージの使用方法、XGBoostツリー・ブースターのハイパーパラメーターの選択方法、XGBoostと他のブースティング方法との比較、いくつかのユースケースについて説明します。

データを分割し、DMatrix形式に変換する

すでにデータに対して探索的データ分析を実行している場合は、トレーニング・データ・セットとテスト・データ・セットの間でデータを分割する作業を続行します。次に、データをXGBoostが想定するDMatrix形式に変換します。3 DMatrixは、メモリー効率とトレーニング速度に最適化されたXGBoostの内部データ構造です4

モデルの生成と評価

次に、XGBoostモデルをインスタンス化し、ユースケースに応じて、「object」ハイパーパラメーターでどの目的関数を使うかを選択します。たとえば、マルチ・クラス分類タスクがある場合は、目標を「multi:softmax」に設定する必要があります。5 あるいは、バイナリ分類の問題がある場合は、ロジスティック回帰目的「binary:logistic」を使用できます。これで、トレーニング・セットを使用してモデルをトレーニングし、テスト・セットとして取っておいたデータ・セットの分類を予測できます。予測値をテスト・セットの実際の値と比較することにより、モデルのパフォーマンスを評価します。精度、正確さ、再現率、f-1スコアなどの指標を使用してモデルを評価できます。また、混同行列を使用して、真陽性、真陰性、偽陽性、偽陰性を視覚化することもできます。

ハイパーパラメータ・チューニング

次に、ハイパーパラメーターの組み合わせを反復して、モデルのパフォーマンスを向上させることをお勧めします。ハイパーパラメーター・チューニングとは、機械学習アルゴリズムのハイパーパラメーターを最適化するプロセスのことです。最適なハイパーパラメーターは、グリッド検索と相互検証の手法を使用して見つけることができます。この手法では、可能なハイパーパラメーターの組み合わせのディクショナリを調べます。

XGBoostの勾配ブースティング決定木用に選択されたハイパーパラメーター

XGBoostで勾配ブースティングされた決定木のチューニングに利用できるいくつかのハイパーパラメータについて説明します。

  • 学習率 (「ステップサイズ」または「縮小率」とも呼ばれる)は、最も重要な勾配ブースティングのハイパーパラメータです。XGBoost ライブラリでは、「eta」と呼ばれ、0~1までの数値で、デフォルトでは0.3です。6 学習率は、ブースティング・アルゴリズムが各反復から学習する速度を決定します。etaの値を小さくすると、アンサンブル内の各ツリーの寄与が小さくなるため、学習が遅くなり、オーバーフィッティングを防ぐことができます。逆に、etaの値が高いと学習は高速化されますが、慎重に調整されないと、オーバーフィッティングにつながる可能性があります。
  • n_estimatorsのハイパーパラメータは、アンサンブルで構築するツリーの数を指定します。各ブースティング・ラウンドでは、アンサンブルに新しいツリーが追加され、モデルは徐々に前のツリーによって作られたエラーを修正するように学習します。N_estimatorsはモデルの複雑さを指示し、学習時間と未知のデータに対するモデルの汎化能力の両方に影響を与えます。n_estimatorsの値を大きくすると、モデルがデータのより複雑なパターンを捉えることができるようになるため、一般的にモデルの複雑さが増します。しかし、ツリーを増やしすぎると、オーバーフィッティングになる可能性があります。一般的には、n_estimatorが増えると、学習率は減ります。
  • Gamma(ラグランジュ乗数または最小損失削減パラメーターとも呼ばれます)は、ツリーの葉ノードをさらに分割するために必要な最小損失削減量を制御します。値が小さいほど、XGBoostは早く停止しますが、最適な回答が見つからない可能性があります。一方、値が大きいほど、XGBoostはより長くトレーニングを継続し、より良い回答を見つける可能性がありますが、オーバーフィッティングのリスクが高くなります。Gammaには上限がありません。XGBoostのデフォルトは0で、10を超える値はすべて高いと見なされます。
  • Max_depthは、ブースティング・プロセスの各ツリーがトレーニング中にどれだけ深く成長できるかを表します。ツリーの深さは、根ノードから葉ノードまでのレベルまたは分割の数を指します。この値を増やすと、モデルがより複雑になり、オーバーフィッティングの可能性が高まります。XGBoostでは、デフォルトのmax_depthは6であり、これはモデル内の各ツリーが最大6レベルまで成長することが許可されていることを意味します。
PythonでXGBoostを実装する

XGBoostアルゴリズムを使用して分類タスクを実行するチュートリアルをご覧ください。

XGBoostと他のブースティング・アルゴリズムの比較

XGBoostは、多く利用されているオープンソースのブースティング・アルゴリズムのうちの1つです。このセクションでは、XGBoostを他の3つのブースティング・フレームワークと比較します。

XGBoostとAdaBoostの比較

AdaBoostは、1995年にYoav FreundとRobert Schapireによって発明された初期のブースティング・アルゴリズムです。7 AdaBoostでは、予測が難しいデータポイントに大きな影響を与える重み付けシステムを通じて、誤った予測にさらに重点が置かれています。まず、データ・セット内の各データ・ポイントに特定の重みが割り当てられます。弱い学習器が例を正しく予測すると、例の重みが減ります。しかし、学習器が例を間違えると、そのデータ・ポイントの重みが大きくなります。新しいツリーが作成されると、その重みは前の学習器の誤分類に基づいて決まります。学習器の数が増えるにつれて、予測しやすいサンプルは将来の学習器にはあまり使用されなくなり、予測が難しいデータ・ポイントはより目立つように重み付けされます。勾配ブースティングとXGBoostは、その精度と速度により、AdaBoostのより強力な代替手段となる傾向があります。

XGBoostとCatBoostの比較

CatBoostは、もう1つの勾配ブースティング・フレームワークです。2017年にYandexによって開発され、前処理を必要とせずにカテゴリー別の特徴を処理することに特化しており、一般的に、広範なハイパーパラメーター調整を実行する必要なく、すぐに使用できる優れたパフォーマンスを発揮します。8 XGBoostと同様に、CatBoostには欠損データを処理するためのサポートが組み込まれています。CatBoost は、カテゴリーの特徴が多いデータ・セットに特に役立ちます。Yandexによると、このフレームワークは検索、レコメンデーション・システム、パーソナル・アシスタント、自動運転車、天気予報、その他のタスクに使用されています。

XGBoostとLightGBMの比較

LightGBM(Light Gradient Boosting Machine)は、ここで確認する最後の勾配ブースティング・アルゴリズムです。LightGBMはMicrosoftによって開発され、2016年に最初にリリースされました。9 ほとんどの決定木の学習アルゴリズムが深さ方向にツリーを成長させるのに対し、LightGBMは葉ごとにツリーの成長戦略を使用します。10 XGBoostと同様に、LightGBMはモデル・トレーニングの速度と精度が高く、大規模なデータ・セットで優れたパフォーマンスを発揮します。

XGBoostの応用例

XGBoostと勾配ブースティング決定木は、次のようなさまざまなデータサイエンス用途に使用されています。

  • ランク付けの学習:XGBoostアルゴリズムの最も一般的な使用例の1つは、ランク付けです。情報検索において、ランク付けのための学習の目標は、関連性によって順序付けされたコンテンツをユーザーに提供することです。XGBoostでは、XGBRankerはLambdaMARTアルゴリズムをベースにしています。11
  • 広告のクリック率予測:研究者はXGBoostで学習させたモデルを使って、10日間のクリック率データからオンライン広告のクリック頻度を割り出しました。この調査の目標は、オンライン広告の効果を測定し、どの広告が効果的かを特定することでした12
  • 店舗の売上予測:この論文で45か所のWalmartの店舗の売上がXGBoostモデルを使用して予測されたように、XGBoostは予測モデリングに使用できます。13
  • マルウェアの分類:コシツェ工科大学のエンジニアは、XGBoost分類器を使用して、マルウェアを正確に分類することに成功しました。14
  • Kaggleコンペティション:XGBoost は、DMLC(Distributed(Deep)Machine Learning Community)ページに記載されているように、Kaggleコンペティションで人気のある受賞アルゴリズムであり、XGBoost をエントリーに使用した最近のKaggleコンペティションの受賞者のリストが掲載されています。15
参考情報 ディシジョン・ツリーとは

ノンパラメトリックの教師あり学習アルゴリズムであり、分類タスクと回帰タスクの両方に使用されているディシジョン・ツリーについて学びましょう。

ブースティングとは

一連の弱い学習器を強い学習器に組み合わせるアンサンブル学習方法について説明します。

RにおけるXGBoostの実装

XGBoostアルゴリズムを使用して分類タスクを実行するチュートリアルをご覧ください。

次のステップ

AI開発者向けの次世代エンタープライズ・スタジオであるIBM watsonx.aiを使用して、生成AI、基盤モデル、機械学習機能をトレーニング、検証、チューニング、デプロイしましょう。わずかなデータとわずかな時間でAIアプリケーションを構築できます。

watsonx.aiの詳細はこちら デモの予約
脚注

1 "Scalable and Flexible Gradient Boosting," https://xgboost.ai/ (ibm.com外部へのリンク)

2 Tianqi Chen and Carlos Guestrin, "XGBoost: A Scalable Tree Boosting System," University of Washington, 10 June 2016, https://arxiv.org/pdf/1603.02754(ibm.com外部へのリンク)

3 "XGBoost Python Package Introduction, Data Interface," https://xgboost.readthedocs.io/en/stable/python/python_intro.html#data-interface (ibm.com外部へのリンク)

4 "XGBoost API Reference, Core Data Structure," https://xgboost.readthedocs.io/en/stable/python/python_api.html#module-xgboost.core (ibm.com外部へのリンク)

5 "XGBoost Parameters, Learning Task Parameters," https://xgboost.readthedocs.io/en/stable/parameter.html#learning-task-parameters (ibm.com外部へのリンク)

6 "XGBoost Parameters for Tree Booster," https://xgboost.readthedocs.io/en/stable/parameter.html#parameters-for-tree-booster (ibm.com外部へのリンク)

7 Yoav Freund and Robert E. Schapire, "A decision-theoretic generalization of on-line learning and an application to boosting," Journal of Computer and System Sciences, Vol. 55, pp. 119–139, August 1997.

8 "CatBoost is a high-performance open source library for gradient boosting on decision trees," https://catboost.ai/ (ibm.com外部へのリンク)

9 Qi Meng, Guolin Ke, Taifeng Wang, Wei Chen, Qiwei Ye, Zhi-Ming Ma and Tie-Yan Liu, "A Communication-Efficient Parallel Algorithm for Decision Tree," Peking University, Microsoft Research and Chinese Academy of Mathematics and Systems Science, 4 November 2016, https://arxiv.org/pdf/1611.01276 (ibm.com外部へのリンク)

10 "LightGBM Features, Leaf-wise (Best-first) Tree Growth," https://lightgbm.readthedocs.io/en/latest/Features.html#leaf-wise-best-first-tree-growth (ibm.com外部へのリンク)

11 "XGBoost Tutorials, Learning to Rank Overview," https://xgboost.readthedocs.io/en/latest/tutorials/learning_to_rank.html#overview (ibm.com外部へのリンク)

12 AlAli Moneera, AlQahtani Maram, AlJuried Azizah, Taghareed AlOnizan, Dalia Alboqaytah, Nida Aslam and Irfan Ullah Khan, "Click through Rate Effectiveness Prediction on Mobile Ads Using Extreme Gradient Boosting," College of Computer Science and Information Technology, Imam Abdulrahman bin Faisal University, 12 September 2020, https://www.techscience.com/cmc/v66n2/40673/html (ibm.com外部へのリンク)

13 Yetunde Faith Akande, Joyce Idowu, Abhavya Gautam, Sanjay Misra, Oluwatobi Noah Akande and Ranjan Kumar Behera, "Application of Xgboost Algorithm for Sales Forecasting Using Walmart Dataset," Landmark University, Ladoke Akintola University of Technology, Brandan University, Covenant University and XIM University, June 2022, https://www.researchgate.net/publication/361549465_Application_of_XGBoost_Algorithm_for_Sales_Forecasting_Using_Walmart_Dataset (ibm.com外部へのリンク)

14 Jakub Palša, Norbert Ádám, Ján Hurtuk, Eva Chovancová, Branislav Madoš, Martin Chovanec and Stanislav Kocan, "MLMD—A Malware-Detecting Antivirus Tool Based on the XGBoost Machine Learning Algorithm," MDPI.com Journal of Applied Sciences, Vol 12, 6672, 1 July 2022, https://www.mdpi.com/2076-3417/12/13/6672 (ibm.com外部へのリンク)

15 "Distributed (Deep) Machine Learning Community XGBoost Machine Learning Challenge Winning Solutions," https://github.com/dmlc/xgboost/tree/master/demo#machine-learning-challenge-winning-solutions (ibm.com外部へのリンク)