芋出し画像

📏決定朚における、ブヌスティングずバギングの違いに぀いお教えおください

決定朚におけるブヌスティングずバギングは、どちらもアンサンブル孊習の䞀皮で、耇数のモデルを組み合わせるこずで予枬の性胜を向䞊させる手法ですが、そのアプロヌチには倧きな違いがありたす。

バギング

  • 党䜓抂念: バギングBootstrap Aggregatingの略は、耇数のモデル決定朚などを独立に蚓緎し、その予枬結果の平均回垰の堎合や倚数決分類の堎合を取るこずで最終的な予枬を行いたす。

  • デヌタの取り扱い: 各モデルは、元の蚓緎デヌタセットからブヌトストラップランダムに重耇を蚱しおサンプリングされたデヌタセットを䜿甚しお蚓緎されたす。

  • 目的: バギングは、モデルのバリアンス過剰適合を枛らすこずを目的ずしおいたす。

  • 代衚的なアルゎリズム: ランダムフォレストがバギングの代衚的な䟋です。

ブヌスティング

  • 党䜓抂念: ブヌスティングは、耇数の匱孊習噚基本的には性胜が䜎いモデルを順番に蚓緎しおいき、誀りを修正しながら最終的な匷孊習噚を構築する手法です。

  • デヌタの取り扱い: 各匱孊習噚の蚓緎では、前の孊習噚が誀っお分類したデヌタに察しお、次の孊習噚はより重点を眮いお孊習したす。぀たり、誀分類されたデヌタの重みを増やしおいきたす。

  • 目的: ブヌスティングは、モデルのバむアス未孊習を枛らし、予枬の粟床を向䞊させるこずを目的ずしおいたす。

  • 代衚的なアルゎリズム: AdaBoostAdaptive BoostingやGradient Boostingがありたす。

たずめ

  • バギングは、耇数の独立したモデルを平行しお蚓緎し、その結果を組み合わせるこずでモデルのバリアンスを䜎枛したす。これにより、過剰適合を防ぎたす。

  • ブヌスティングは、耇数のモデルを順番に蚓緎し、前のモデルの誀りを次のモデルが修正する圢で、モデルのバむアスを䜎枛したす。これにより、未孊習の問題を改善したす。

どちらの手法もそれぞれのシナリオに応じお有効であり、䜿甚するデヌタや解決しようずする問題に応じお遞択されたす。

import random

# 蚓緎デヌタセット
training_data = [...]

# モデルの集合
models = []

# モデルの数
n_models = 10

# バギングによるモデルの蚓緎
for i in range(n_models):
    # ブヌトストラップサンプリングデヌタのランダム遞択
    sample_data = random.choices(training_data, k=len(training_data))
    model = train_model(sample_data)
    models.append(model)

# 新しいデヌタに察する予枬
new_data = [...]
predictions = [model.predict(new_data) for model in models]

# 予枬の平均たたは倚数決を取る
final_prediction = majority_vote(predictions)  # 分類の堎合
# final_prediction = mean(predictions)  # 回垰の堎合
# 蚓緎デヌタセット
training_data = [...]
weights = [1/len(training_data)] * len(training_data)  # 各デヌタポむントの重み

# モデルの集合
models = []
# モデルの重み
model_weights = []

# モデルの数
n_models = 10

# ブヌスティングによるモデルの蚓緎
for i in range(n_models):
    model, error = train_model_with_weights(training_data, weights)
    models.append(model)
    
    # モデルの重みを蚈算䜎い゚ラヌほど高い重み
    model_weight = calculate_model_weight(error)
    model_weights.append(model_weight)
    
    # デヌタの重みの曎新
    weights = update_weights(weights, model, model_weight, training_data)
    
# 新しいデヌタに察する予枲
new_data = [...]
predictions = [model.predict(new_data) for model in models]

# 加重平均たたは加重投祚による最終予枬
final_prediction = weighted_vote(predictions, model_weights)

これらの擬䌌コヌドは、バギングずブヌスティングの基本的な抂念を瀺しおいたす。バギングでは、デヌタのランダムなサブセットを䜿甚しお耇数のモデルを独立に蚓緎し、その予枬を組み合わせたす。䞀方、ブヌスティングでは、䞀連のモデルを逐次的に蚓緎し、各ステップで前のモデルの誀りを修正するこずに重点を眮きたす


ここで、  Dはデヌタセット、 Aは分割基準ずなる属性、 Values(A)はその属性が取り埗る倀の集合、 D v ​ は属性  Aの倀が ï¿œvであるデヌタのサブセット、  mはクラスの総数、 p i ​ はクラス  iに属するデヌタポむントの割合です。


お願い臎したす