XGBoost

Basic

XGBoost | Gradient boosting ที่เร็วและแม่นยำ

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. ไฮเปอร์พารามิเตอร์หลัก #

พารามิเตอร์บทบาทเคล็ดลับ
etalearning rateยิ่งต่ำยิ่งเสถียร แต่ต้องเพิ่มจำนวนรอบ
max_depthความลึกของต้นไม้ลึกขึ้นแสดงผลได้มากขึ้นแต่เสี่ยง overfit
min_child_weightน้ำหนักขั้นต่ำของลูกโหนดเพิ่มเมื่อข้อมูลมี noise มาก
subsample / colsample_bytreeอัตราการสุ่ม0.6–0.9 มักช่วย generalization
lambda, alphaL2 / 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 ตามลักษณะข้อมูล