【Python×LightGBM入門】第1回:LightGBMとは?基本概念と環境構築
はじめに
機械学習の世界で高い人気を誇る「LightGBM」。Kaggleなどのデータ分析コンペティションでも頻繁に使用され、実務でも広く活用されています。本記事は全6回のシリーズの第1回として、LightGBMの基本概念から環境構築まで、初心者の方にもわかりやすく解説します。
LightGBMとは?
LightGBM(Light Gradient Boosting Machine)は、Microsoftが開発した勾配ブースティング決定木(GBDT)アルゴリズムの実装です。以下のような特徴があります:
主な特徴
-
高速な学習速度
- 葉優先(Leaf-wise)の木成長戦略により、従来の勾配ブースティング手法よりも高速
-
メモリ効率が良い
- ヒストグラムベースのアルゴリズムにより、メモリ使用量を削減
-
高精度
- 多くのベンチマークで優れた予測精度を実現
-
大規模データへの対応
- 並列学習や分散学習をサポート
XGBoostとの比較
LightGBMとよく比較される「XGBoost」との主な違いは以下の通りです:
特徴 | LightGBM | XGBoost |
---|---|---|
木の成長方法 | Leaf-wise(葉優先) | Level-wise(レベル優先) |
速度 | より高速 | 標準的 |
メモリ使用量 | より少ない | 標準的 |
カテゴリ変数 | 直接サポート | エンコーディング必要 |
環境構築
それでは実際にLightGBMを使えるように環境を構築していきましょう。
1. Pythonのインストール確認
まず、Python(3.7以上推奨)がインストールされているか確認します:
python --version
# または
python3 --version
2. 仮想環境の作成(推奨)
プロジェクトごとに独立した環境を作ることをお勧めします:
# 仮想環境の作成
python -m venv lightgbm_env
# 仮想環境の有効化
# Windows
lightgbm_env\Scripts\activate
# Mac/Linux
source lightgbm_env/bin/activate
3. 必要なパッケージのインストール
LightGBMと関連パッケージをインストールします:
pip install lightgbm numpy pandas scikit-learn matplotlib seaborn jupyter
4. インストールの確認
Pythonで以下のコードを実行して、正しくインストールされているか確認しましょう:
import lightgbm as lgb
import numpy as np
import pandas as pd
import sklearn
print(f"LightGBM version: {lgb.__version__}")
print(f"NumPy version: {np.__version__}")
print(f"Pandas version: {pd.__version__}")
print(f"Scikit-learn version: {sklearn.__version__}")
初めてのLightGBMモデル
環境構築が完了したら、簡単な例でLightGBMを体験してみましょう。
サンプルデータの準備
scikit-learnのアイリスデータセットを使用します:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import lightgbm as lgb
# データの読み込み
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
)
print(f"訓練データのサイズ: {X_train.shape}")
print(f"テストデータのサイズ: {X_test.shape}")
LightGBMモデルの構築と学習
# LightGBM用のデータセット形式に変換
train_data = lgb.Dataset(X_train, label=y_train)
valid_data = lgb.Dataset(X_test, label=y_test, reference=train_data)
# パラメータの設定
params = {
'objective': 'multiclass', # 多クラス分類
'num_class': 3, # クラス数
'metric': 'multi_logloss', # 評価指標
'boosting_type': 'gbdt', # ブースティングタイプ
'num_leaves': 31, # 葉の数
'learning_rate': 0.05, # 学習率
'feature_fraction': 0.9, # 特徴量のサンプリング率
'bagging_fraction': 0.8, # データのサンプリング率
'bagging_freq': 5, # バギングの頻度
'verbose': 0 # ログ出力レベル
}
# モデルの学習
model = lgb.train(
params,
train_data,
valid_sets=[valid_data],
num_boost_round=100,
callbacks=[lgb.early_stopping(10), lgb.log_evaluation(10)]
)
print("学習が完了しました!")
予測と評価
from sklearn.metrics import accuracy_score, classification_report
# 予測
y_pred = model.predict(X_test, num_iteration=model.best_iteration)
y_pred_class = np.argmax(y_pred, axis=1)
# 精度の評価
accuracy = accuracy_score(y_test, y_pred_class)
print(f"\nテストデータの精度: {accuracy:.4f}")
# 詳細な分類レポート
print("\n分類レポート:")
print(classification_report(y_test, y_pred_class,
target_names=iris.target_names))
特徴量の重要度を可視化
import matplotlib.pyplot as plt
# 特徴量の重要度を取得
importance = model.feature_importance(importance_type='gain')
feature_names = iris.feature_names
# 可視化
plt.figure(figsize=(10, 6))
plt.barh(feature_names, importance)
plt.xlabel('重要度')
plt.title('特徴量の重要度')
plt.tight_layout()
plt.show()
LightGBMの基本的なパラメータ
LightGBMには多くのパラメータがありますが、まずは以下の重要なものを押さえておきましょう:
1. 基本パラメータ
- objective: 目的関数('regression', 'binary', 'multiclass'など)
- metric: 評価指標('rmse', 'binary_logloss', 'multi_logloss'など)
- boosting_type: ブースティングの種類('gbdt', 'dart', 'goss', 'rf')
2. 制御パラメータ
- num_leaves: 葉の最大数(デフォルト: 31)
- max_depth: 木の最大深さ(デフォルト: -1、制限なし)
- learning_rate: 学習率(デフォルト: 0.1)
- n_estimators: ブースティングの回数
3. 正則化パラメータ
- lambda_l1: L1正則化(デフォルト: 0)
- lambda_l2: L2正則化(デフォルト: 0)
- min_child_samples: 葉に必要な最小サンプル数(デフォルト: 20)
よくあるエラーと対処法
1. ImportError
# エラー例
ImportError: No module named 'lightgbm'
# 対処法
pip install lightgbm --upgrade
2. カテゴリ変数のエラー
# カテゴリ変数を含むデータの場合
# categorical_featureパラメータで指定
train_data = lgb.Dataset(
X_train,
label=y_train,
categorical_feature=['cat_col1', 'cat_col2'] # カテゴリ列を指定
)
まとめ
第1回では、LightGBMの基本概念から環境構築、そして簡単なモデルの構築まで学びました。重要なポイントは:
- LightGBMは高速で精度の高い勾配ブースティングフレームワーク
- pipで簡単にインストール可能
- scikit-learnとの相性が良く、使いやすい
- 特徴量の重要度を簡単に可視化できる
次回は「基本的な分類問題への適用」について、より実践的な内容を扱います。実際のデータセットを使って、前処理からモデル評価まで詳しく解説する予定です。
参考リンク
ご質問やフィードバックがございましたら、ぜひコメント欄でお知らせください。次回もお楽しみに!