mei_13のPython講座 ロゴ

【Pythonコラム】LightGBM:高速かつ高精度な勾配ブースティング決定木を使いこなす




LightGBM:高速かつ高精度な勾配ブースティング決定木を使いこなす

機械学習の世界において、予測精度の高いモデルを効率的に構築することは常に重要な課題です。そんな課題解決に貢献する強力なアルゴリズムの一つが、Microsoft社が開発した「LightGBM (Light Gradient Boosting Machine)」です。今回は、LightGBMの概要、特徴、基本的な使い方について、初心者にもわかりやすく解説します。

LightGBMとは?

LightGBMは、勾配ブースティング決定木 (Gradient Boosting Decision Tree: GBDT) と呼ばれる機械学習アルゴリズムの一種です。GBDTは、複数の決定木を組み合わせて予測精度を高めるアンサンブル学習の手法であり、その中でもLightGBMは特に高速かつ高精度なことで知られています。

従来のGBDTアルゴリズムと比較して、LightGBMは大規模なデータセットや高次元の特徴量を持つデータに対して、より効率的に学習を進めることができます。そのため、データサイエンスの現場で広く利用されており、Kaggleなどの機械学習コンペティションでも頻繁に使用される人気のアルゴリズムです。

LightGBMの特徴

LightGBMの主な特徴は以下のとおりです。

  • 高速な学習速度と高い効率性: LightGBMは、Histogram-based LearningLeaf-wise Tree Growth という二つの技術を採用することで、学習速度を大幅に向上させています。

    • Histogram-based Learning: 連続値を離散的なビンに分割し、ヒストグラムを作成することで、最適な分割点を見つける計算コストを削減します。

    • Leaf-wise Tree Growth: 決定木を成長させる際、最も損失を減らす葉を選択して分割します。これにより、バランスの取れた木構造となり、より効率的に学習を進めることができます。

  • メモリ使用量の削減: Histogram-based Learningは、データのヒストグラムを使用するため、メモリ使用量を削減できます。大規模なデータセットを扱う際に特に有効です。

  • 高い予測精度: Leaf-wise Tree Growthにより、より複雑なモデルを構築できるため、高い予測精度を実現できます。

  • 並列学習のサポート: LightGBMは、特徴量ごとの分割点の探索を並列化することで、学習速度をさらに向上させます。

  • 欠損値の扱い: LightGBMは、欠損値を含むデータでも、特別な処理なしに学習を進めることができます。

  • カテゴリカル特徴量のサポート: LightGBMは、カテゴリカル特徴量を直接扱うことができます。ワンホットエンコーディングなどの前処理が不要になるため、手間を省くことができます。

LightGBMの基本的な使い方

LightGBMをPythonで使用するには、まずライブラリをインストールする必要があります。以下のコマンドを実行してください。

pip install lightgbm

インストールが完了したら、LightGBMを使ってモデルを学習させることができます。以下に、基本的なコード例を示します。

import lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

# データの準備 (例としてirisデータセットを使用)
iris = load_iris()
X, y = iris.data, iris.target

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

# LightGBMのパラメータを設定
params = {
    'objective': 'multiclass',  # 多クラス分類
    'num_class': 3,             # クラス数
    'metric': 'multi_logloss', # 評価指標
    'boosting_type': 'gbdt',    # Boostingアルゴリズム (Gradient Boosting Decision Tree)
    'num_leaves': 31,           # 葉の数
    'learning_rate': 0.05,      # 学習率
    'feature_fraction': 0.9    # 特徴量のサンプリング割合
}

# LightGBMのDatasetを作成
train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test, reference=train_data)

# LightGBMのモデルを学習
model = lgb.train(params,
                  train_data,
                  num_boost_round=100,  # 学習ラウンド数
                  valid_sets=[test_data],# 検証データ
                  callbacks=[lgb.early_stopping(stopping_rounds=10)]) # early stopping

# モデルを使って予測
y_pred = model.predict(X_test)

# 予測結果の表示 (確率値)
print(y_pred)

このコードでは、load_iris関数を使ってirisデータセットをロードし、訓練データとテストデータに分割しています。その後、LightGBMのパラメータを設定し、lgb.Datasetを使ってLightGBMが扱える形式のデータセットを作成します。そして、lgb.train関数を使ってモデルを学習させます。num_boost_roundは学習ラウンド数、valid_setsは検証データ、callbacksは学習の早期終了を設定するためのものです。最後に、学習済みのモデルを使ってテストデータに対する予測を行い、結果を表示しています。

まとめ

LightGBMは、高速な学習速度と高い予測精度を兼ね備えた強力な機械学習アルゴリズムです。大規模なデータセットや高次元の特徴量を持つデータに対して特に有効であり、データサイエンスの現場で広く利用されています。今回紹介した基本的な使い方を参考に、ぜひLightGBMを自身のプロジェクトで活用してみてください。様々なパラメータを調整することで、更なる精度向上が期待できます。



< ランダムフォレスト
コラム一覧に戻る
Ansible >

レッスン概要

◯月額4,000円で質問し放題!!
◯完全オンライン
◯翌日までには必ず返信
◯挫折しない独自の学習メソッド
◯圧倒的高評価!!
◯テキストベースで時間を選ばない
◯高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!