การปรับ Hyperparameter ใน Python
Alex Scriven
Data Scientist
สิ่งที่ทำมาทั้งหมดคือการค้นหาแบบไม่มีข้อมูล:
การค้นหาแบบไม่มีข้อมูล: แต่ละรอบของการปรับ hyperparameter ไม่ได้เรียนรู้ จากรอบก่อนหน้า
นี่คือสิ่งที่ช่วยให้ประมวลผลแบบขนานได้ แต่ดูเหมือนจะไม่ค่อยมีประสิทธิภาพ?
กระบวนการที่ผ่านมา:

อีกแนวทางหนึ่ง:

แนวทางการค้นหาแบบมีข้อมูลขั้นพื้นฐาน:
เริ่มด้วยการค้นหาแบบสุ่มในวงกว้าง แล้วค่อยๆ แคบลงทีละขั้น
กระบวนการคือ:
สามารถแทนขั้นตอน (3) ด้วย random search เพิ่มเติมก่อนทำ grid search ได้
การปรับแต่งจากหยาบสู่ละเอียดมีข้อดีหลายอย่าง:
ไม่ต้องเสียเวลากับพื้นที่ค้นหาที่ไม่ให้ผลดี!
หมายเหตุ: วิธีนี้ไม่ได้อิงจากโมเดลเดียว แต่ใช้กับกลุ่มโมเดล
ลองดูตัวอย่างกับช่วงค่า hyperparameter ต่อไปนี้:
max_depth_list ระหว่าง 1 ถึง 65min_sample_list ระหว่าง 3 ถึง 17learn_rate_list 150 ค่า ระหว่าง 0.01 ถึง 150มีโมเดลที่เป็นไปได้ทั้งหมดกี่โมเดล?
combinations_list = [list(x) for x in product(max_depth_list, min_sample_list, learn_rate_list)]
print(len(combinations_list))
134400
ลอง random search กับ 500 ชุดค่าผสม
พล็อตคะแนนความแม่นยำ:

โมเดลที่ดีคือโมเดลไหน?
ผลลัพธ์ที่ดีที่สุด:
| max_depth | min_samples_leaf | learn_rate | accuracy |
|---|---|---|---|
| 10 | 7 | 0.01 | 96 |
| 19 | 7 | 0.023355705 | 96 |
| 30 | 6 | 1.038389262 | 93 |
| 27 | 7 | 1.11852349 | 91 |
| 16 | 7 | 0.597651007 | 91 |
แสดงค่า max_depth เทียบกับคะแนนความแม่นยำ:

min_samples_leaf ให้ผลดีกว่าเมื่อต่ำกว่า 8

learn_rate แย่ลงเมื่อเกิน 1.3

สิ่งที่ได้จากรอบแรก:
max_depth ระหว่าง 8 ถึง 30learn_rate น้อยกว่า 1.3min_samples_leaf อาจน้อยกว่า 8ขั้นต่อไป? ทำ random search หรือ grid search อีกรอบด้วยข้อมูลที่มี!
หมายเหตุ: นี่เป็นการวิเคราะห์แบบ bivariate เท่านั้น สามารถดู hyperparameter หลายตัว (3, 4 ตัวขึ้นไป!) ในกราฟเดียวได้ แต่อยู่นอกขอบเขตของคอร์สนี้
การปรับ Hyperparameter ใน Python