Grid Search แบบ 2 มิติ
ข้อเสียของการปรับ hyperparameter ทีละตัวคือ อาจมีความสัมพันธ์ระหว่าง hyperparameter แต่ละตัวที่ถูกมองข้ามไป แนวทางที่ดีกว่าคือการลองทุกชุดผสมของ hyperparameter ที่เป็นไปได้ อย่างไรก็ตาม วิธีนี้ทำให้พื้นที่ค้นหาขยายตัวอย่างรวดเร็ว เช่น หากมีพารามิเตอร์ 2 ตัวและแต่ละตัวมี 10 ค่าที่เป็นไปได้ จะต้องรันการทดลองทั้งหมด 100 ครั้ง
เป้าหมายคือหาคู่ hyperparameter ที่ดีที่สุดระหว่าง max_depth และ subsample สำหรับโมเดล Gradient Boosting โดย subsample คือสัดส่วนของข้อมูลที่นำมาใช้ฝึก decision tree แต่ละต้น
มีฟังก์ชัน get_cv_score() ให้พร้อมแล้ว ซึ่งรับชุดข้อมูล train และ dictionary ของพารามิเตอร์โมเดลเป็น argument แล้วคืนค่า RMSE จาก cross-validation แบบ 3-fold
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การแข่งขัน Kaggle ด้วย Python
คำแนะนำการฝึกหัด
- กำหนด grid ของค่า
max_depthและsubsampleที่ต้องการทดสอบ โดยmax_depthใช้ค่า 3, 5 และ 7 และsubsampleใช้ค่า 0.8, 0.9 และ 1.0 - ใช้ฟังก์ชัน
product()จากแพ็กเกจitertoolsกับ grid ของ hyperparameter ทั้งสอง เพื่อสร้างทุกชุดผสมที่เป็นไปได้ - ส่งคู่ค่า hyperparameter แต่ละชุดไปยัง dictionary
paramsของโมเดล
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
import itertools
# Hyperparameter grids
max_depth_grid = [____]
subsample_grid = [____]
results = {}
# For each couple in the grid
for max_depth_candidate, subsample_candidate in itertools.____(max_depth_grid, subsample_grid):
params = {'max_depth': ____,
'subsample': ____}
validation_score = get_cv_score(train, params)
# Save the results for each couple
results[(max_depth_candidate, subsample_candidate)] = validation_score
print(results)