勾配ブースティングによる回帰分析 | 回帰アルゴリズム | Pythonによる機械学習を学ぶ

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

勾配ブースティングによる回帰分析(XGBoost、LightGBM)

勾配ブースティング(Gradient Boosting)は、複数の決定木を順番に学習させることで予測精度を高めるアンサンブル学習手法です。回帰分析や分類問題で高い性能を発揮し、実務やデータ分析コンペティションでも広く利用されています。

特に、XGBoostLightGBMは、勾配ブースティングを高速かつ高精度に実装した代表的なライブラリです。本記事では、勾配ブースティングの基本的な考え方と、XGBoostおよびLightGBMを用いた回帰分析の実装方法を解説します。

勾配ブースティングの仕組みを図で理解する

勾配ブースティングの仕組みを図で理解する

勾配ブースティングとは?

勾配ブースティングは、予測性能の低いモデル(弱学習器)を順番に学習させ、それらを組み合わせて高精度な予測モデルを構築する手法です。

一般的には決定木が弱学習器として利用されます。

学習の流れは次のようになります。

  1. 最初の決定木を作成して予測する
  2. 予測結果と実際の値との差(誤差)を計算する
  3. その誤差を補正する新しい決定木を学習する
  4. この処理を何度も繰り返す
  5. すべての決定木の結果を組み合わせて最終予測を行う

つまり、後から追加される決定木ほど、前のモデルが苦手としていた部分を学習する仕組みになっています。

XGBoostとは?

XGBoost(Extreme Gradient Boosting)は、勾配ブースティングを高速かつ高精度に実装したライブラリです。

正則化機能や欠損値処理などが組み込まれており、多くの機械学習コンペティションで高い実績があります。

主な特徴は次の通りです。

  • 高い予測精度
  • 過学習を抑える正則化機能
  • 欠損値を自動的に処理できる
  • 特徴量の重要度を確認できる
  • 並列処理に対応している

ライブラリのインストール

pip install xgboost

サンプルデータの準備

import numpy as np
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# サンプルデータ作成
X = np.random.rand(100, 10)
y = np.random.rand(100)

# 訓練データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.2,
    random_state=42
)

XGBoostモデルの作成と学習

# XGBoostモデルの作成
xg_reg = xgb.XGBRegressor(
    objective='reg:squarederror',
    colsample_bytree=0.3,
    learning_rate=0.1,
    max_depth=5,
    alpha=10,
    n_estimators=100,
    random_state=42
)

# 学習
xg_reg.fit(X_train, y_train)

# 予測
y_pred = xg_reg.predict(X_test)

# 評価
mse = mean_squared_error(y_test, y_pred)

print(f'XGBoostのMSE: {mse:.3f}')

このコードでは、XGBoostを用いて回帰モデルを学習し、平均二乗誤差(MSE)によって予測精度を評価しています。

LightGBMとは?

LightGBM(Light Gradient Boosting Machine)は、Microsoftによって開発された勾配ブースティングライブラリです。

XGBoostと同様に高い精度を持ちながら、特に大規模データに対して高速な学習を実現しています。

LightGBMの特徴は次の通りです。

  • 学習速度が非常に高速
  • メモリ使用量が少ない
  • 大規模データに強い
  • 多数の特徴量を扱いやすい
  • ハイパーパラメータが比較的少ない

ライブラリのインストール

pip install lightgbm

LightGBMモデルの作成と学習

import lightgbm as lgb

# LightGBM用データセット
train_data = lgb.Dataset(
    X_train,
    label=y_train
)

# パラメータ設定
params = {
    'objective': 'regression',
    'metric': 'mse',
    'boosting_type': 'gbdt',
    'learning_rate': 0.05,
    'num_leaves': 31,
    'max_depth': -1
}

# 学習
lgb_model = lgb.train(
    params,
    train_data,
    num_boost_round=100
)

# 予測
y_pred_lgb = lgb_model.predict(X_test)

# 評価
mse_lgb = mean_squared_error(
    y_test,
    y_pred_lgb
)

print(f'LightGBMのMSE: {mse_lgb:.3f}')

LightGBMでは、データをDataset形式へ変換して学習を行います。学習速度が速いため、大量のデータを扱う場合に特に有効です。

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

XGBoostやLightGBMでは、ハイパーパラメータの設定が性能に大きく影響します。

パラメータ 説明
learning_rate 各決定木の学習量を調整する
max_depth 決定木の最大深さ
n_estimators 作成する決定木の数
num_leaves LightGBMにおける葉ノード数
subsample 学習時に使用するデータ割合

一般的に、決定木を増やしすぎると過学習の原因となるため注意が必要です。

XGBoostとLightGBMの比較

特性 XGBoost LightGBM
処理速度 高速 非常に高速
メモリ効率 やや多く使用 比較的少ない
大規模データ 強い 特に強い
過学習への耐性 高い パラメータ調整が重要
学習の安定性 高い 高速だが調整次第
初心者向け 比較的扱いやすい やや知識が必要

どちらを選ぶべきか?

小規模から中規模のデータで安定した性能を求める場合は、XGBoostが選ばれることが多いです。

一方で、大規模データを高速に処理したい場合や学習時間を短縮したい場合は、LightGBMが有力な選択肢となります。

実務では両方を試し、クロスバリデーションなどで比較して採用するケースも少なくありません。

まとめ

勾配ブースティングは、複数の決定木を順番に学習させることで高い予測性能を実現するアンサンブル学習手法です。

  • XGBoostは高精度かつ安定した性能を持つ
  • LightGBMは高速で大規模データに強い
  • どちらも回帰分析や分類問題で広く利用されている
  • ハイパーパラメータ調整が性能向上の鍵となる
  • 実際には両方を比較して選択することが多い

勾配ブースティングは現在の機械学習において非常に重要な技術の一つです。XGBoostとLightGBMを理解することで、高精度な予測モデルを効率的に構築できるようになります。