เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

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)
แก้ไขและรันโค้ด