バギングとアンサンブル学習の概要 | 分類アルゴリズム | Pythonによる機械学習を学ぶ

スポンサーリンク
スポンサーリンク

バギングとアンサンブル学習の概要

アンサンブル学習は、複数の機械学習モデルを組み合わせて、より良い予測結果を得るための技術です。単一のモデルでは十分な性能を発揮できない場合でも、複数のモデルを組み合わせることで性能を向上させることができます。アンサンブル学習には、バギング(Bagging)、ブースティング(Boosting)、スタッキング(Stacking)などがあります。本記事では、バギングとその代表的な手法であるランダムフォレストを中心に解説します。

バギング(Bagging)とは

バギングは、Bootstrap Aggregatingの略で、同じモデルを異なるデータサンプルに対して学習させ、それぞれの予測結果を平均化(または多数決)する手法です。これにより、モデルのバリアンス(分散)を抑えることができ、過学習を防ぎます。

バギングの手順

  1. 元のトレーニングデータセットからランダムにサブセット(ブートストラップサンプル)を生成します。
  2. それぞれのサブセットに対して同じアルゴリズムでモデルを学習させます。
  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.3, random_state=42)

# ランダムフォレストモデルの作成
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 予測
y_pred = model.predict(X_test)

# 精度の計算
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')

上記のコードでは、RandomForestClassifierを使ってアンサンブル学習のバギング手法であるランダムフォレストを実装しています。ランダムフォレストは、複数の決定木を用いたモデルで、各決定木がランダムにサブセット化されたデータに基づいて学習されます。

アンサンブル学習の利点

  • 汎化性能の向上: 複数のモデルの予測を組み合わせることで、過学習を防ぎ、未知のデータに対する予測精度を向上させます。
  • バリアンスの低減: バギングは特にモデルのバリアンスを低減する効果が高く、データに対するモデルの過度な適合を防ぎます。
  • 多様性の確保: 複数の異なるモデルやサブセットを利用するため、1つのモデルに依存することなく、データ全体に対してより安定した予測を行えます。

ランダムフォレストとバギングの違い

バギングでは、一般に同じモデルを使って複数の予測を行いますが、ランダムフォレストはバギングの応用として、決定木モデルにランダム性を導入しています。具体的には、ランダムフォレストでは各決定木が異なる特徴量のサブセットを使って学習します。

ランダムフォレストの特徴

  • 複数の決定木を作成し、それぞれにランダムなデータサンプルを使う。
  • 特徴量のサブセットをランダムに選択することで、各木に多様性を持たせる。
  • 最終的な予測は、多数決(分類)または平均(回帰)によって行われる。

他のアンサンブル学習手法との比較

アンサンブル学習にはバギング以外にも、ブースティングやスタッキングなどがあります。それぞれの違いを簡単にまとめた表を以下に示します。

手法 概要 利点 欠点
バギング 複数のモデルを並行して学習し、予測を平均化する。 バリアンスが減少し、安定した結果が得られる。 モデルによっては精度向上が限定的。
ブースティング 弱いモデルを順次学習し、誤りを修正しながら予測精度を向上させる。 精度が高く、過学習に強い。 計算コストが高く、学習時間が長い。
スタッキング 異なるモデルの予測結果をさらに別のモデルで組み合わせる。 多様なモデルを組み合わせることで柔軟性が高い。 モデルの選択と調整が複雑。

まとめ

バギングとアンサンブル学習は、単一のモデルで限界がある場合でも複数のモデルを組み合わせることで、精度を向上させることができます。バギングは特に過学習のリスクを減少させる効果があり、ランダムフォレストはその代表的な手法です。次回はブースティングについてさらに詳しく学習します。