Linear base learners
หลังจากที่ได้ใช้ decision tree เป็น base model ใน XGBoost แล้ว คราวนี้มาลองใช้ base model อีกประเภทหนึ่ง นั่นคือ linear learner แม้ว่าโมเดลประเภทนี้จะไม่ค่อยถูกนำมาใช้กับ XGBoost บ่อยนัก แต่ก็ช่วยให้สร้าง regularized linear regression ได้โดยอาศัย learning API อันทรงพลังของ XGBoost อย่างไรก็ตาม เนื่องจากเป็นรูปแบบที่ไม่ค่อยพบบ่อย จึงต้องใช้ฟังก์ชันของ XGBoost โดยตรง ซึ่งไม่รองรับ scikit-learn เช่น xgb.train()
ในการทำเช่นนี้ ต้องสร้าง parameter dictionary เพื่อกำหนดประเภทของ booster ที่ต้องการใช้ (คล้ายกับที่สร้าง dictionary ในบทที่ 1 ตอนใช้ xgb.cv()) คู่ key-value ที่กำหนดประเภท booster (base model) คือ "booster":"gblinear"
เมื่อสร้างโมเดลแล้ว สามารถใช้เมธอด .train() และ .predict() ได้เช่นเดิม
ในแบบฝึกหัดนี้ ข้อมูลถูกแบ่งเป็นชุดเทรนและชุดทดสอบไว้เรียบร้อยแล้ว จึงเริ่มสร้างออบเจกต์ DMatrix ที่ XGBoost learning API ต้องการได้เลย
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Extreme Gradient Boosting with XGBoost
คำแนะนำการฝึกหัด
- สร้างออบเจกต์
DMatrixสองตัว ได้แก่DM_trainสำหรับชุดเทรน (X_trainและy_train) และDM_testสำหรับชุดทดสอบ (X_testและy_test) - สร้าง parameter dictionary โดยกำหนดประเภท
"booster"ที่จะใช้ ("gblinear") และ"objective"ที่ต้องการ minimize ("reg:squarederror") - เทรนโมเดลด้วย
xgb.train()โดยระบุอาร์กิวเมนต์สำหรับพารามิเตอร์ต่อไปนี้:params,dtrainและnum_boost_roundใช้จำนวน boosting rounds เท่ากับ5 - ทำนายเลเบลบนชุดทดสอบด้วย
xg_reg.predict()โดยส่งDM_testเข้าไป แล้วกำหนดผลลัพธ์ให้กับpreds - กด 'ส่งคำตอบ' เพื่อดูค่า RMSE!
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Convert the training and testing sets into DMatrixes: DM_train, DM_test
DM_train = ____
DM_test = ____
# Create the parameter dictionary: params
params = {"____":"____", "____":"____"}
# Train the model: xg_reg
xg_reg = ____.____(____ = ____, ____=____, ____=____)
# Predict the labels of the test set: preds
preds = ____
# Compute and print the RMSE
rmse = np.sqrt(mean_squared_error(y_test,preds))
print("RMSE: %f" % (rmse))