การเลือกจำนวน Boosting Round อัตโนมัติด้วย early_stopping
แทนที่จะต้องเลือกจำนวน boosting round ที่ดีที่สุดด้วยตัวเอง XGBoost สามารถเลือกจำนวนนั้นให้โดยอัตโนมัติภายใน xgb.cv() เทคนิคที่ใช้เรียกว่า early stopping
Early stopping ทำงานโดยทดสอบโมเดล XGBoost หลังจากแต่ละ boosting round กับชุดข้อมูลสำรอง แล้วหยุดสร้าง boosting round เพิ่มเติม (คือสิ้นสุดการเทรนโมเดลก่อนกำหนด) หากค่าเมตริก ("rmse" ในกรณีนี้) ไม่ดีขึ้นติดต่อกันตามจำนวน round ที่กำหนด ในที่นี้จะใช้พารามิเตอร์ early_stopping_rounds ใน xgb.cv() โดยกำหนดจำนวน boosting round สูงสุดไว้ที่ 50 อย่างไรก็ตาม หากค่าเมตริกของชุดข้อมูลสำรองยังคงดีขึ้นต่อเนื่องจนถึง num_boost_rounds ที่กำหนด early stopping จะไม่เกิดขึ้น
DMatrix และ parameter dictionary ได้เตรียมไว้ให้แล้ว งานของคุณคือใช้ cross-validation ร่วมกับ early stopping
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Extreme Gradient Boosting with XGBoost
คำแนะนำการฝึกหัด
- ทำ cross-validation แบบ 3-fold พร้อม early stopping โดยใช้
"rmse"เป็นเมตริก กำหนด early stopping rounds เป็น10และ boosting rounds เป็น50ระบุseedเป็น123และให้ผลลัพธ์เป็น DataFrame ของpandasอย่าลืมระบุพารามิเตอร์อื่น ๆ เช่นdtrain,paramsและmetricsด้วย - แสดงผล
cv_results
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Create your housing DMatrix: housing_dmatrix
housing_dmatrix = xgb.DMatrix(data=X, label=y)
# Create the parameter dictionary for each tree: params
params = {"objective":"reg:squarederror", "max_depth":4}
# Perform cross-validation with early stopping: cv_results
cv_results = ____
# Print cv_results
print(____)