XGBoost (eXtreme Gradient Boosting) คือการใช้งาน gradient boosting ที่เน้นเรื่อง regularization และความเร็ว รองรับการจัดการ missing value การปรับแต่งโครงสร้างต้นไม้ และการฝึกแบบขนาน จึงเป็นตัวเลือกยอดนิยมทั้งในงานจริงและการแข่งขัน
1. จุดเด่นสำคัญ #
- Loss แบบมี regularization: ใช้ L1/L2 ลด overfitting
- ทิศทางสำหรับค่าหาย: เลือกสาขาที่เหมาะสมให้ missing โดยอัตโนมัติ
- การขนาน: สร้างต้นไม้แบบขนานเพื่อความเร็ว
- พารามิเตอร์ละเอียด: ปรับได้ทั้งความลึก จำนวนใบ และการสุ่มตัวอย่าง
2. การฝึกด้วยแพ็กเกจ xgboost #
import xgboost as xgb
from sklearn.metrics import mean_absolute_error
dtrain = xgb.DMatrix(X_train, label=y_train)
dvalid = xgb.DMatrix(X_valid, label=y_valid)
params = {
"objective": "reg:squarederror",
"eval_metric": "rmse",
"max_depth": 6,
"eta": 0.05,
"subsample": 0.8,
"colsample_bytree": 0.8,
"lambda": 1.0,
}
evals = [(dtrain, "train"), (dvalid, "valid")]
bst = xgb.train(
params,
dtrain,
num_boost_round=1000,
evals=evals,
early_stopping_rounds=50,
)
pred = bst.predict(xgb.DMatrix(X_test), iteration_range=(0, bst.best_iteration + 1))
print("MAE:", mean_absolute_error(y_test, pred))
เมื่อกำหนด early_stopping_rounds การฝึกจะหยุดเมื่อคะแนนไม่ดีขึ้น และเลือกจำนวนรอบที่ดีที่สุดให้เอง
3. ไฮเปอร์พารามิเตอร์หลัก #
| พารามิเตอร์ | บทบาท | เคล็ดลับ |
|---|---|---|
eta | learning rate | ยิ่งต่ำยิ่งเสถียร แต่ต้องเพิ่มจำนวนรอบ |
max_depth | ความลึกของต้นไม้ | ลึกขึ้นแสดงผลได้มากขึ้นแต่เสี่ยง overfit |
min_child_weight | น้ำหนักขั้นต่ำของลูกโหนด | เพิ่มเมื่อข้อมูลมี noise มาก |
subsample / colsample_bytree | อัตราการสุ่ม | 0.6–0.9 มักช่วย generalization |
lambda, alpha | L2 / L1 regularization | เพิ่มเพื่อลด overfitting; alpha ช่วยให้ sparse |
4. การใช้งานจริง #
- ข้อมูลเชิงโครงสร้าง: เหมาะกับตารางที่ผ่าน encoding แล้ว
- ค่าหาย: จัดการได้ภายใน
- ความสำคัญฟีเจอร์: ดูได้จาก Gain/Weight/Cover
- SHAP: ใช้ร่วมกับ
xgboost.to_graphvizและshap.TreeExplainerได้
5. คำแนะนำเพิ่มเติม #
- ลด learning rate (เช่น 0.1 → 0.02) แล้วเพิ่มจำนวนรอบ เพื่อเพิ่มความแม่นยำ
tree_method:"hist"เร็ว,"gpu_hist"สำหรับ GPU,"approx"สำหรับข้อมูลใหญ่- Cross-validation: ใช้
xgb.cvพร้อมearly_stopping_rounds
สรุป #
- XGBoost รวม regularization การจัดการ missing และความเร็ว เหมาะกับข้อมูลเชิงตาราง
- ต้องปรับ
eta,max_depth,min_child_weight, sampling และ regularization อย่างสมดุล - เลือกใช้ XGBoost, LightGBM หรือ CatBoost ตามลักษณะข้อมูล