Gradient Boosting と AdaBoost
Gradient Boosting と AdaBoost は、機械学習における強力なアンサンブル学習アルゴリズムです。以下にそれぞれの特徴と違いをまとめます。
AdaBoost (Adaptive Boosting)
基本概念
- 目的: 複数の弱学習器を組み合わせて、強力な分類器を構築する。
- 手法: 各学習器が前の学習器の誤分類を重視するように学習する。
アルゴリズムの流れ
- 初期化: 全てのデータポイントに同じ重みを割り当てる。
- 学習: 弱学習器を順次訓練し、誤分類されたデータポイントの重みを増やす。
- 重みの更新: 各学習器の重みを計算し、誤分類されたデータポイントの重みを増やす。
- 最終予測: 各学習器の予測結果を重み付き多数決で決定する。
数式
重みの更新: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$ はインジケータ関数です。
学習器の重み:tex
$$ \alpha_t = \frac{1}{2} \ln \left( \frac{1 - \epsilon_t}{\epsilon_t} \right) $$ ここで、$\epsilon_t$ は学習器 $t$ の誤差率です。
応用
- 画像認識
- テキスト分類
- 医療診断
Gradient Boosting
基本概念
- 目的: 逐次的に学習器を追加し、残差を最小化することでモデルを強化する。
- 手法: 各学習器が前の学習器の誤差を補正するように学習する。
アルゴリズムの流れ
- 初期化: 初期モデルを設定する。
- 学習: 各ステップで残差に対して新しい学習器を訓練する。
- モデルの更新: 新しい学習器を追加し、全体のモデルを更新する。
- 最終予測: 全ての学習器の予測結果を合計して最終予測を行う。
数式
モデルの更新:tex
$$ F_{m}(x) = F_{m-1}(x) + \nu h_{m}(x) $$ ここで、$F_{m}(x)$ はステップ $m$ のモデル、$\nu$ は学習率、$h_{m}(x)$ はステップ $m$ の学習器です。
残差の計算:tex
$$ r_{i}^{(m)} = y_i - F_{m-1}(x_i) $$ ここで、$r_{i}^{(m)}$ はデータポイント $i$ の残差です。
応用
- 回帰分析
- 時系列予測
- クラス分類
比較
特徴 | AdaBoost | Gradient 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}")
これらのアルゴリズムは、機械学習の多くの分野で広く使用されており、それぞれの特性に応じて適切に選択されます。