Gradient Boosting と AdaBoost

Gradient Boosting と AdaBoost は、機械学習における強力なアンサンブル学習アルゴリズムです。以下にそれぞれの特徴と違いをまとめます。

AdaBoost (Adaptive Boosting)

基本概念

  • 目的: 複数の弱学習器を組み合わせて、強力な分類器を構築する。
  • 手法: 各学習器が前の学習器の誤分類を重視するように学習する。

アルゴリズムの流れ

  1. 初期化: 全てのデータポイントに同じ重みを割り当てる。
  2. 学習: 弱学習器を順次訓練し、誤分類されたデータポイントの重みを増やす。
  3. 重みの更新: 各学習器の重みを計算し、誤分類されたデータポイントの重みを増やす。
  4. 最終予測: 各学習器の予測結果を重み付き多数決で決定する。

数式

  1. 重みの更新:tex

    $$ w_{i}^{(t+1)} = w_{i}^{(t)} \exp(\alpha_t \cdot I(y_i \neq h_t(x_i))) $$

    ここで、$w_{i}^{(t)}$ はデータポイント $i$ の重み、$\alpha_t$ は学習器 $t$ の重み、$I$ はインジケータ関数です。

  2. 学習器の重み:tex

    $$ \alpha_t = \frac{1}{2} \ln \left( \frac{1 - \epsilon_t}{\epsilon_t} \right) $$ ここで、$\epsilon_t$ は学習器 $t$ の誤差率です。

応用

  • 画像認識
  • テキスト分類
  • 医療診断

Gradient Boosting

基本概念

  • 目的: 逐次的に学習器を追加し、残差を最小化することでモデルを強化する。
  • 手法: 各学習器が前の学習器の誤差を補正するように学習する。

アルゴリズムの流れ

  1. 初期化: 初期モデルを設定する。
  2. 学習: 各ステップで残差に対して新しい学習器を訓練する。
  3. モデルの更新: 新しい学習器を追加し、全体のモデルを更新する。
  4. 最終予測: 全ての学習器の予測結果を合計して最終予測を行う。

数式

  1. モデルの更新:tex

    $$ F_{m}(x) = F_{m-1}(x) + \nu h_{m}(x) $$ ここで、$F_{m}(x)$ はステップ $m$ のモデル、$\nu$ は学習率、$h_{m}(x)$ はステップ $m$ の学習器です。

  2. 残差の計算:tex

    $$ r_{i}^{(m)} = y_i - F_{m-1}(x_i) $$ ここで、$r_{i}^{(m)}$ はデータポイント $i$ の残差です。

応用

  • 回帰分析
  • 時系列予測
  • クラス分類

比較

特徴AdaBoostGradient Boosting
主な目的誤分類を重視残差を最小化
学習器の重み誤差率に基づく学習率に基づく
ノイズ耐性低い高い
適用分野分類分類、回帰

実装例 (Python/scikit-learn)

AdaBoost

from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

# データの準備
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)

# モデルの作成と学習
adaboost = AdaBoostClassifier(base_estimator=DecisionTreeClassifier(max_depth=1), n_estimators=50, random_state=42)
adaboost.fit(X_train, y_train)

# 精度の評価
accuracy = adaboost.score(X_test, y_test)
print(f"AdaBoost Accuracy: {accuracy}")

Gradient Boosting

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

# データの準備
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)

# モデルの作成と学習
gbc = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
gbc.fit(X_train, y_train)

# 精度の評価
accuracy = gbc.score(X_test, y_test)
print(f"Gradient Boosting Accuracy: {accuracy}")

これらのアルゴリズムは、機械学習の多くの分野で広く使用されており、それぞれの特性に応じて適切に選択されます。