2.5.4
Bagging
สรุป
- สรุปเป้าหมาย สมมติฐาน และเงื่อนไขที่เหมาะสมของวิธีนี้.
- ตรวจสอบว่ากฎการอัปเดตหรือเกณฑ์การแบ่งส่งผลต่อพฤติกรรมโมเดลอย่างไร.
- ใช้ตัวอย่างโค้ดเพื่อกำหนดแนวทางปรับพารามิเตอร์อย่างเป็นรูปธรรม.
สัญชาตญาณ #
Bagging (Bootstrap Aggregating) ควรเข้าใจผ่านสมมติฐาน กลไกการปรับปรุงโมเดล และรูปแบบความผิดพลาดบนข้อมูลจริง เพื่อให้เลือกโมเดลและปรับพารามิเตอร์ได้อย่างเหมาะสม.
คำอธิบายโดยละเอียด #
ขั้นตอน #
- สุ่มข้อมูลจากชุดฝึกแบบ bootstrap เพื่อสร้างชุดย่อยหลายชุด
- ฝึกฐานโมเดล (เช่น decision tree) บนแต่ละชุด
- สำหรับงานจำแนกใช้การโหวต สำหรับงานถดถอยใช้ค่าเฉลี่ย
Bagging เน้นลด variance ของผู้เรียนที่ “เสียงดัง” เช่น decision tree ที่ลึก
โค้ดตัวอย่าง #
import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import BaggingRegressor
X, y = fetch_california_housing(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=0
)
base = DecisionTreeRegressor(max_depth=None, random_state=0)
bagging = BaggingRegressor(
estimator=base,
n_estimators=100,
max_samples=0.8,
max_features=0.8,
bootstrap=True,
oob_score=True,
random_state=0,
)
bagging.fit(X_train, y_train)
pred = bagging.predict(X_test)
print("RMSE:", mean_squared_error(y_test, pred, squared=False))
print("OOB score:", bagging.oob_score_)
พารามิเตอร์ที่สำคัญ #
n_estimators: จำนวนโมเดลย่อย มากขึ้น → แปรปรวนลดลงแต่ใช้เวลามากขึ้นmax_samples,max_features: สัดส่วนข้อมูล/ฟีเจอร์ที่ใช้ต่อโมเดลย่อยbootstrap,bootstrap_features: เลือกสุ่มซ้ำทั้งตัวอย่างหรือฟีเจอร์oob_score: ประเมินประสิทธิภาพจากตัวอย่างที่ไม่ได้ใช้ (out-of-bag) เพื่อเลี่ยงการแบ่ง validation เพิ่ม
ข้อดี / ข้อจำกัด #
| ข้อดี | ข้อจำกัด |
|---|---|
| โค้ดง่าย ขนาน (parallelize) ได้ | ต้องเก็บโมเดลหลายตัว ใช้หน่วยความจำสูง |
| ลด variance ได้มาก | ไม่ลด bias มาก ถ้าโมเดลฐานอ่อนแอเกินไป |
| มี OOB score ไม่ต้องแบ่ง validation | ผลลัพธ์ยากตีความยิ่งกว่าต้นไม้เดี่ยว |