XGBoostとは?勾配ブースティングの仕組みと特徴

2026年7月28日に生成

Python機械学習

アルゴリズムの概要

XGBoost(eXtreme Gradient Boosting)は、勾配ブースティング決定木をベースにしたオープンソースの機械学習ライブラリだ。C++、Python、R、Java、Scalaなど多数の言語に対応しており、表形式データの分類・回帰・ランキングタスクで広く使われている。

ブースティングとは、弱い学習器(ここでは決定木)を順番に積み上げ、前のモデルの誤りを次のモデルが補正していく手法だ。XGBoostはこの繰り返しの最適化に勾配降下法を用いる。通常の勾配ブースティングと異なる点として、過学習を防ぐ正則化項(L1・L2)がアルゴリズム本体に組み込まれており、チューニングなしでも汎化性能が出やすい。

他の手法との比較

手法 木の構築順序 速度 正則化
Random Forest 並列(独立) 速い なし(標準)
勾配ブースティング(sklearn) 逐次 やや遅い なし(標準)
XGBoost 逐次(並列最適化あり) 速い L1・L2 内蔵
LightGBM 逐次(リーフ優先) 非常に速い L1・L2 内蔵

Random Forestと異なりXGBoostは木を逐次構築するが、各木内の分岐探索を並列化することで速度を稼いでいる。LightGBMと比べると大規模データでやや遅いものの、カテゴリ変数の扱いや安定性で選ばれるケースがある。

Pythonでの基本的な使い方

pip install xgboost でインストールしてすぐ試せる。分類タスクの最小構成はこのようになる。

import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = xgb.XGBClassifier(n_estimators=100, learning_rate=0.1, eval_metric="logloss")
model.fit(X_train, y_train)
print(accuracy_score(y_test, model.predict(X_test)))

scikit-learnのfit / predictインターフェースをそのまま使えるため、既存のパイプラインへの組み込みが容易だ。1

主要なハイパーパラメータ

実務でまず触る項目に絞ると以下になる。

  • n_estimators: 構築する木の本数。多いほど精度が上がりやすいが過学習リスクも高まる
  • learning_rate(eta): 各木の寄与を縮小するスケール。小さくするとn_estimatorsを増やす必要がある
  • max_depth: 木の深さの上限。深いほど複雑なパターンを学習できるが過学習しやすい
  • subsample / colsample_bytree: 行・列のサンプリング率。0.8前後が出発点になりやすい
  • reg_alpha / reg_lambda: L1・L2正則化の強さ

learning_rateを0.01〜0.05程度に下げてn_estimatorsを増やすと精度が安定しやすい。学習時間が増えるため、early_stopping_roundsと合わせて使うのが定石だ。

現在の位置づけと背景

XGBoostは2014年にTianqi Chenが開発し、2016年のKaggleコンペで多くの優勝解法に使われたことで広まった2。その後LightGBMやCatBoostが台頭したが、ベースラインモデルの構築や特徴量重要度の確認には今でも選ばれることが多い。

画像やテキストではなく、行と列が明確な表形式データであれば、XGBoostは最初に試す候補として妥当だ。数百万行を超えるデータで学習時間がボトルネックになるなら、LightGBMへの切り替えを検討するのが次の一手になる。

Footnotes

  1. XGBoostはscikit-learn互換のAPIとネイティブAPIの2種類を提供している。大規模データや細かい制御が必要な場合はネイティブAPIのxgb.train()が使われる。

  2. Tianqi Chenらの論文「XGBoost: A Scalable Tree Boosting System」(KDD 2016)で詳細なアルゴリズムが公開された。

参考ソース