การแข่งขัน Boosting: Light vs Extreme
แม้โมเดล CatBoost จะให้ประสิทธิภาพที่ดีพอสมควร แต่ลองมาทดสอบ boosting อีกสองแนวทางเพื่อดูว่าแบบใดให้ผลดีกว่า นั่นคือแนวทาง "Light" หรือ "Extreme"
CatBoost เหมาะอย่างยิ่งเมื่อข้อมูลมี feature ประเภท categorical แต่ในกรณีนี้ทุก feature เป็นตัวเลข ดังนั้นแนวทางอื่นอาจให้ผลลัพธ์ที่ดีกว่า
เนื่องจากเรากำลังสร้าง regressor จึงต้องใช้พารามิเตอร์เพิ่มเติมคือ objective ซึ่งระบุฟังก์ชันการเรียนรู้ที่ต้องการใช้ หากต้องการใช้ squared error ให้กำหนด objective เป็น 'reg:squarederror' สำหรับ XGBoost และ 'mean_squared_error' สำหรับ LightGBM
นอกจากนี้ยังกำหนดพารามิเตอร์ n_jobs สำหรับ XGBoost เพื่อเพิ่มความเร็วในการประมวลผล
หมายเหตุ: ระวังอย่าใช้ classifier แทน regressor เพราะอาจทำให้เซสชันหมดอายุได้!
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Ensemble Methods ใน Python
คำแนะนำการฝึกหัด
- สร้าง
XGBRegressorโดยใช้พารามิเตอร์:max_depth = 3,learning_rate = 0.1,n_estimators = 100และn_jobs=2 - สร้าง
LGBMRegressorโดยใช้พารามิเตอร์:max_depth = 3,learning_rate = 0.1และn_estimators = 100
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Build and fit an XGBoost regressor
reg_xgb = ____.____(____, ____, ____, ____, objective='reg:squarederror', random_state=500)
reg_xgb.fit(X_train, y_train)
# Build and fit a LightGBM regressor
reg_lgb = ____.____(____, ____, ____, objective='mean_squared_error', seed=500)
reg_lgb.fit(X_train, y_train)
# Calculate the predictions and evaluate both regressors
pred_xgb = reg_xgb.predict(X_test)
rmse_xgb = np.sqrt(mean_squared_error(y_test, pred_xgb))
pred_lgb = reg_lgb.predict(X_test)
rmse_lgb = np.sqrt(mean_squared_error(y_test, pred_lgb))
print('Extreme: {:.3f}, Light: {:.3f}'.format(rmse_xgb, rmse_lgb))