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

スポンサーリンク
スポンサーリンク

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

勾配ブースティング(Gradient Boosting)は、複数の決定木モデルを組み合わせて予測精度を向上させる強力なアンサンブル学習アルゴリズムです。この手法は、回帰分析や分類問題に広く利用され、XGBoostやLightGBMはその中でも非常に人気のあるライブラリです。本記事では、XGBoostとLightGBMを用いた回帰分析の基本的な実装方法について紹介します。

勾配ブースティングの基本概念

勾配ブースティングは、次のステップでモデルを強化していきます。

  1. まず、1つ目の弱学習器(通常は決定木)を作成し、予測を行います。
  2. その後、予測誤差に基づいて、次の学習器を作成します。
  3. このプロセスを繰り返し、複数のモデルをアンサンブルして最終的な予測を行います。

勾配ブースティングはこの誤差を最小限にするために、勾配降下法を利用します。XGBoostやLightGBMはこの手法を最適化して、計算効率を高め、より大規模なデータに対しても効果的に処理できるようにしたライブラリです。

XGBoostによる回帰分析の実装

まず、XGBoostを使用した回帰分析の基本的な実装を紹介します。scikit-learn互換のインターフェースを持っているため、非常に簡単に利用できます。

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

!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モデルの作成と学習

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

# モデルの学習
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の回帰モデルを作成し、mean_squared_error(平均二乗誤差)を使用してモデルの評価を行っています。モデルのパラメータには、colsample_bytreelearning_ratemax_depthなどがあります。これらはモデルの性能に大きな影響を与えます。

LightGBMによる回帰分析の実装

次に、LightGBMを使用した回帰分析の実装を紹介します。LightGBMはXGBoostに似ていますが、大規模データに対してさらに高速に処理できる点が特徴です。

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

!pip install lightgbm

LightGBMモデルの作成と学習

import lightgbm as lgb

# データをLightGBM用に変換
train_data = lgb.Dataset(X_train, label=y_train)

# LightGBMのハイパーパラメータ設定
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では、データをlgb.Dataset形式に変換して学習を行います。XGBoost同様に、learning_ratenum_leavesなどのハイパーパラメータを設定します。これにより、モデルの性能を調整できます。

XGBoostとLightGBMの比較

XGBoostとLightGBMの違いは以下の通りです。

特性 XGBoost LightGBM
処理速度 比較的遅い 非常に高速
メモリ効率 多めに使用 少なめに使用
パラメータ調整 豊富だが複雑 簡単で扱いやすい

まとめ

XGBoostとLightGBMは、どちらも非常に強力な回帰アルゴリズムです。XGBoostはパフォーマンスが安定しており、LightGBMはより高速に処理できるため、データのサイズや応答時間の要件に応じて使い分けることが可能です。