INDEX
バギングとアンサンブル学習の概要
アンサンブル学習は、複数の機械学習モデルを組み合わせて、単一のモデルよりも安定した予測を目指す手法です。
1つのモデルだけでは予測が不安定になったり、過学習しやすくなったりする場合があります。アンサンブル学習では、複数のモデルの予測を集約することで、より信頼性の高い結果を得やすくなります。
バギングとアンサンブル学習を図で理解する

アンサンブル学習とは
アンサンブル学習とは、複数のモデルを組み合わせて予測する方法です。
分類では多数決、回帰では平均を使って最終的な予測を決定することが一般的です。
- 複数のモデルを使う
- 各モデルの予測を集約する
- 予測のばらつきを抑える
- 単一モデルより安定した結果を得やすい
バギングとは
バギング(Bagging)は、Bootstrap Aggregatingの略です。
元の訓練データからランダムにデータを取り出して複数のサブセットを作り、それぞれでモデルを学習させます。その後、各モデルの予測を集約して最終的な予測を行います。
バギングの基本的な流れ
- 元の訓練データからランダムにサンプルを抽出する
- 複数のブートストラップサンプルを作成する
- それぞれのサンプルでモデルを学習する
- 各モデルの予測結果を集約する
- 分類では多数決、回帰では平均を使って最終予測を行う
バギングの効果
バギングは、モデルの予測のばらつきを抑える効果があります。
特に、決定木のようにデータの変化に敏感なモデルでは、複数の木を組み合わせることで過学習を抑え、安定した予測を行いやすくなります。
| 効果 | 内容 |
|---|---|
| バリアンスの低減 | 予測結果のばらつきを抑える |
| 過学習の抑制 | 単一モデルへの依存を減らす |
| 安定性の向上 | 複数モデルの結果を集約して判断する |
ランダムフォレストとは
ランダムフォレストは、バギングを応用した代表的なアンサンブル学習手法です。
複数の決定木を作成し、それぞれの予測を多数決または平均によって統合します。さらに、各決定木の学習時に使用する特徴量もランダムに選ぶことで、木同士に多様性を持たせます。
ランダムフォレストの特徴
- 複数の決定木を使う
- 各木は異なるデータサンプルで学習する
- 特徴量の一部もランダムに選ぶ
- 分類では多数決、回帰では平均で予測する
- 単一の決定木より過学習しにくい
Pythonでの実装例
以下は、scikit-learnを使ってランダムフォレストを実装する例です。
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}')
このコードでは、Irisデータセットを使ってランダムフォレスト分類モデルを作成し、予測精度を確認しています。
バギングとランダムフォレストの違い
| 項目 | バギング | ランダムフォレスト |
|---|---|---|
| 基本的な考え方 | 複数のモデルを異なるデータで学習する | 複数の決定木を異なるデータと特徴量で学習する |
| 使用するモデル | 任意のモデルを使える | 主に決定木を使う |
| ランダム性 | データサンプルをランダムに抽出 | データに加えて特徴量もランダムに選択 |
| 代表例 | BaggingClassifier | RandomForestClassifier |
他のアンサンブル学習手法との比較
| 手法 | 概要 | 特徴 |
|---|---|---|
| バギング | 複数のモデルを並列に学習し、予測を集約する | ばらつきを抑えやすい |
| ブースティング | 前のモデルの誤りを補うように順番に学習する | 高精度になりやすいが調整が重要 |
| スタッキング | 複数モデルの予測を別のモデルで統合する | 柔軟だが構成が複雑になりやすい |
バギングが向いている場面
- 単一モデルの予測が不安定な場合
- 決定木の過学習を抑えたい場合
- データのばらつきによる影響を減らしたい場合
- 安定した予測結果を得たい場合
アンサンブル学習を使う際の注意点
- 複数のモデルを使うため計算コストが増える
- 単一モデルより結果の解釈が難しくなることがある
- モデル数を増やしすぎても性能向上が頭打ちになる場合がある
- データや目的に応じて手法を選ぶ必要がある