Hello there, ('ω')ノ
📌 1. アンサンブル学習とは?
アンサンブル学習(Ensemble Learning) とは、
複数の異なる機械学習モデルを組み合わせて、最終的な予測を行う手法 です。
📌 なぜアンサンブル学習が重要なのか?
- 1つのモデルの弱点を補完し、より高い精度を実現!
- 過学習を防ぎ、汎化性能(新しいデータへの適応力)を向上!
- 安定した予測が可能になり、実務での適用範囲が広がる!
➡ 「複数のモデルを組み合わせることで、より賢い予測ができる!」
📌 2. 主要なアンサンブル学習の手法
アンサンブル学習には、大きく分けて 3つの手法 があります。
✅ ① バギング(Bagging)
バギング(Bagging: Bootstrap Aggregating)は、「複数のモデルを並列に学習し、予測を統合する手法」 です。
📌 特徴
- データをランダムにサンプリングし、複数のモデルを学習
- 最終的な予測は、多数決(分類) or 平均値(回帰)で決定
- 過学習を防ぎ、安定した予測が可能!
📌 代表的なアルゴリズム
- ランダムフォレスト(Random Forest)(複数の決定木を使う)
- Extra Trees(Extremely Randomized Trees)(ランダム性を強化)
➡ 「バギング = 予測のバラツキを減らし、より安定したモデルを作る!」
✅ ② ブースティング(Boosting)
ブースティング(Boosting)は、「前のモデルの誤分類を次のモデルが補正する」 という考え方で、
複数の弱いモデル(決定木など)を順番に学習し、強いモデルを作る手法 です。
📌 特徴
- 前のモデルのミスを次のモデルが学習し、改善する
- 最終的な予測は、重み付きの投票 or 加重平均で決定
- 単体のモデルよりも高精度になりやすいが、過学習しやすい!
📌 代表的なアルゴリズム
- XGBoost(eXtreme Gradient Boosting)
- LightGBM(Light Gradient Boosting Machine)
- AdaBoost(Adaptive Boosting)
➡ 「ブースティング = 予測精度をどんどん向上させる!」
✅ ③ スタッキング(Stacking)
スタッキング(Stacking)は、「複数の異なるモデルを組み合わせ、最終的な予測を行うメタモデルを学習する手法」 です。
📌 特徴
- 異なるアルゴリズム(SVM, ランダムフォレスト, XGBoostなど)を組み合わせる
- 最終的な予測は、別の「メタモデル」で統合(例: ロジスティック回帰)
- 最も高精度なアンサンブル手法だが、実装が複雑!
📌 代表的な手法
- Blending(シンプルなスタッキング)
- Stacked Generalization(本格的なスタッキング)
➡ 「スタッキング = 異なるモデルの長所を最大限に活かす!」
📌 3. Pythonでアンサンブル学習を実装
✅ ① バギング(ランダムフォレスト)
まずは、ランダムフォレストを使ってバギングを実装します!
from sklearn.ensemble import RandomForestClassifier 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) # ランダムフォレストの実装(バギング) rf_model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42) rf_model.fit(X_train, y_train) # 予測 y_pred = rf_model.predict(X_test) # 精度を評価 print(f"Random Forest Accuracy: {accuracy_score(y_test, y_pred):.2f}")
✅ ランダムフォレストを使って、決定木を多数組み合わせ!
✅ バギングにより、安定したモデルを実現!
✅ ② ブースティング(XGBoost)
次に、XGBoostを使ってブースティングを試します!
import xgboost as xgb # 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 = xgb_model.predict(X_test) # 精度を評価 print(f"XGBoost Accuracy: {accuracy_score(y_test, y_pred_xgb):.2f}")
✅ XGBoostを使って、誤分類をどんどん修正!
✅ 高精度なブースティングモデルを実現!
✅ ③ スタッキング(異なるモデルを組み合わせる)
以下のコードでは、ランダムフォレスト(バギング)とXGBoost(ブースティング)を組み合わせて、
最終的な予測をロジスティック回帰で統合(スタッキング) します。
from sklearn.ensemble import StackingClassifier from sklearn.linear_model import LogisticRegression # スタッキングモデルの作成 estimators = [ ('rf', RandomForestClassifier(n_estimators=100, random_state=42)), ('xgb', xgb.XGBClassifier(n_estimators=100, learning_rate=0.1, use_label_encoder=False, eval_metric="mlogloss")) ] stacking_model = StackingClassifier(estimators=estimators, final_estimator=LogisticRegression()) # モデルの学習 stacking_model.fit(X_train, y_train) # 予測と評価 y_pred_stack = stacking_model.predict(X_test) print(f"Stacking Accuracy: {accuracy_score(y_test, y_pred_stack):.2f}")
✅ 異なるモデルを組み合わせて、より高精度な予測を実現!
✅ スタッキングにより、それぞれのモデルの強みを活かす!
🎯 まとめ
✅ アンサンブル学習は、複数のモデルを組み合わせて精度を向上!
✅ バギング(ランダムフォレスト)で予測を安定化!
✅ ブースティング(XGBoost)で精度を最大化!
✅ スタッキングで異なるモデルの長所を活かす!
Best regards, (^^ゞ