Hello there, ('ω')ノ
📌 1. XGBoost・LightGBMとは?
XGBoostとLightGBMは、どちらも勾配ブースティング(Gradient Boosting) を使った強力な決定木アルゴリズムです。
📌 XGBoost・LightGBMの特徴
アルゴリズム | 特徴 | 代表的な用途 |
---|---|---|
XGBoost | 高精度、過学習に強い | Kaggle、金融・保険 |
LightGBM | XGBoostより高速、大規模データ向き | レコメンドシステム、広告最適化 |
➡ 「精度重視ならXGBoost」「速度・大規模データならLightGBM」
📌 2. 勾配ブースティングとは?
XGBoost・LightGBMは「勾配ブースティング」 という手法を使っています。
これは「複数の決定木を少しずつ改善しながら学習する」アルゴリズムです。
📌 勾配ブースティングの流れ
1. 最初にシンプルな決定木(弱学習器)を作る
2. 誤差(残差)を計算し、その誤差を修正する新しい決定木を作る
3. このプロセスを繰り返し、精度の高いモデルを作る!
➡ 「誤差を少しずつ修正して、どんどん強くなる」のが勾配ブースティングの強み!
📌 ランダムフォレストとの違い
アルゴリズム | 学習の方法 | 長所 |
---|---|---|
ランダムフォレスト | 多数の決定木を「並列」に学習 | 並列処理が可能、頑健 |
勾配ブースティング | 決定木を「順番」に学習し、誤差を修正 | 高精度、過学習に強い |
➡ 「並列処理で安定感」ならランダムフォレスト、「高精度な調整」ならXGBoost・LightGBM!
📌 3. XGBoostとLightGBMの違い
✅ XGBoost
✅ 汎化性能が高く、過学習を防ぐ工夫がされている
✅ 勾配ブースティングの細かい調整が可能
✅ やや計算コストが高い(遅い)
✅ LightGBM
✅ データを「リーフ単位」で分岐し、学習が速い(XGBoostの約10倍速い)
✅ 大規模データ向き(数百万レコードでも高速)
✅ やや過学習しやすい(調整が必要)
📌 結論
条件 | 選ぶべき手法 |
---|---|
精度を最大限にしたい | XGBoost |
大規模データ(数百万行以上) | LightGBM |
学習を高速化したい | LightGBM |
➡ 「モデルを細かくチューニングしたいならXGBoost、大量データならLightGBM」
📌 4. PythonでXGBoost・LightGBMを実装
✅ ① XGBoostで分類タスク
まずは、Irisデータセットを使って XGBoostを実装 します!
import xgboost as xgb from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # データの読み込み 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) # XGBoostモデルの作成 xgb_model = xgb.XGBClassifier(n_estimators=100, learning_rate=0.1, use_label_encoder=False, eval_metric="mlogloss") xgb_model.fit(X_train, y_train) # 予測 y_pred = xgb_model.predict(X_test) # 精度の評価 print(f"XGBoost Accuracy: {accuracy_score(y_test, y_pred):.2f}")
✅ XGBoostで高精度な分類モデルを作成!
✅ 学習率(learning_rate)や決定木の数(n_estimators)を調整可能!
✅ ② LightGBMで分類タスク
次に、LightGBMを使って同じ分類タスク を実装してみます。
# ✅ 必要なライブラリをインポート import lightgbm as lgb import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # ✅ ダミーデータの作成 np.random.seed(42) data = { "Feature1": np.random.rand(200), "Feature2": np.random.randint(0, 100, 200), "Feature3": np.random.choice([0, 1], 200), "Feature4": np.random.randn(200), "Target": np.random.randint(0, 2, 200), } df = pd.DataFrame(data) # ✅ 特徴量とターゲットを分離 X = df.drop(columns=["Target"]) y = df["Target"] # ✅ データ分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # ✅ LightGBM モデルの作成(エラー完全解消) lgb_model = lgb.LGBMClassifier( n_estimators=200, # 決定木の数 learning_rate=0.05, # 学習率 max_depth=-1, # 無制限の深さ num_leaves=50, # リーフ数 feature_fraction=0.8, # 特徴量サンプリング率 bagging_fraction=0.9, # データサンプリング率 bagging_freq=5, # バギングの頻度 max_bin=512, # 分割の粒度 reg_alpha=0.0, # L1正則化なし reg_lambda=0.0, # L2正則化なし min_child_samples=20, # ✅ min_data_in_leaf は削除 min_gain_to_split=None, # ✅ 明示的に None に設定 objective="binary", # バイナリ分類 is_unbalance=True, # クラス不均衡の自動調整 force_col_wise=True, # ✅ カラム単位での分割最適化 verbosity=-1, # ✅ 警告の抑制 ) # ✅ モデルの学習 lgb_model.fit(X_train, y_train) # ✅ 予測 y_pred_lgb = lgb_model.predict(X_test) # ✅ 精度の評価 print(f"✅ LightGBM Accuracy: {accuracy_score(y_test, y_pred_lgb):.2f}")
✅ LightGBMで高速な分類モデルを作成!
✅ XGBoostと比べて学習が速い!
📌 5. ハイパーパラメータの調整
XGBoostやLightGBMでは、ハイパーパラメータを適切に調整すると、精度が大幅に向上 します!
📌 主なハイパーパラメータ
パラメータ | 説明 | 適用 |
---|---|---|
n_estimators | 決定木の数 | XGBoost・LightGBM |
learning_rate | 学習率(小さいほど精度が上がるが遅くなる) | XGBoost・LightGBM |
max_depth | 決定木の深さ(大きいと過学習しやすい) | XGBoost |
num_leaves | LightGBMの分岐数(大きすぎると過学習) | LightGBM |
📌 ハイパーパラメータの最適化(Optunaを使用)
import optuna def objective(trial): param = { "n_estimators": trial.suggest_int("n_estimators", 50, 300), "learning_rate": trial.suggest_float("learning_rate", 0.01, 0.3), } model = xgb.XGBClassifier(**param, use_label_encoder=False, eval_metric="mlogloss") model.fit(X_train, y_train) return accuracy_score(y_test, model.predict(X_test)) study = optuna.create_study(direction="maximize") study.optimize(objective, n_trials=10) print(study.best_params)
✅ Optunaでハイパーパラメータを最適化!
✅ 手動で調整せず、自動的に最適値を探せる!
🎯 まとめ
✅ XGBoost・LightGBMは勾配ブースティングを利用した強力なモデル!
✅ XGBoostは精度重視、LightGBMは速度重視!
✅ PythonでXGBoost・LightGBMを実装し、分類タスクを試そう!
✅ ハイパーパラメータの調整で、さらに精度を向上できる!
Best regards, (^^ゞ