アルゴリズムの概要
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 xgbfrom sklearn.datasets import load_breast_cancerfrom sklearn.model_selection import train_test_splitfrom 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への切り替えを検討するのが次の一手になる。