การค้นหาแบบมีข้อมูล: จากหยาบสู่ละเอียด

การปรับ Hyperparameter ใน Python

Alex Scriven

Data Scientist

การค้นหาแบบมีข้อมูล vs ไม่มีข้อมูล

 

สิ่งที่ทำมาทั้งหมดคือการค้นหาแบบไม่มีข้อมูล:

การค้นหาแบบไม่มีข้อมูล: แต่ละรอบของการปรับ hyperparameter ไม่ได้เรียนรู้ จากรอบก่อนหน้า

นี่คือสิ่งที่ช่วยให้ประมวลผลแบบขนานได้ แต่ดูเหมือนจะไม่ค่อยมีประสิทธิภาพ?

การปรับ Hyperparameter ใน Python

มีข้อมูล vs ไม่มีข้อมูล

กระบวนการที่ผ่านมา:

แผนผังกระบวนการค้นหาแบบไม่มีข้อมูล

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

แผนผังกระบวนการค้นหาแบบมีข้อมูล

การปรับ Hyperparameter ใน Python

การปรับแต่งจากหยาบสู่ละเอียด

แนวทางการค้นหาแบบมีข้อมูลขั้นพื้นฐาน:

เริ่มด้วยการค้นหาแบบสุ่มในวงกว้าง แล้วค่อยๆ แคบลงทีละขั้น

กระบวนการคือ:

  1. Random search
  2. ระบุพื้นที่ที่น่าสนใจ
  3. Grid search ในพื้นที่ที่แคบลง
  4. ทำซ้ำจนได้คะแนนที่ดีที่สุด

สามารถแทนขั้นตอน (3) ด้วย random search เพิ่มเติมก่อนทำ grid search ได้

การปรับ Hyperparameter ใน Python

ทำไมต้องใช้การปรับจากหยาบสู่ละเอียด?

การปรับแต่งจากหยาบสู่ละเอียดมีข้อดีหลายอย่าง:

  • ผสมข้อดีของ grid search และ random search
    • เริ่มค้นหาในวงกว้าง
    • ค้นหาเชิงลึกเมื่อรู้แล้วว่าบริเวณไหนน่าจะดี
  • ใช้เวลาและทรัพยากรการคำนวณได้คุ้มค่ากว่า ทำให้วนรอบได้เร็วขึ้น

ไม่ต้องเสียเวลากับพื้นที่ค้นหาที่ไม่ให้ผลดี!

หมายเหตุ: วิธีนี้ไม่ได้อิงจากโมเดลเดียว แต่ใช้กับกลุ่มโมเดล

การปรับ Hyperparameter ใน Python

การลงมือปรับจากหยาบสู่ละเอียด

ลองดูตัวอย่างกับช่วงค่า hyperparameter ต่อไปนี้:

  • max_depth_list ระหว่าง 1 ถึง 65
  • min_sample_list ระหว่าง 3 ถึง 17
  • learn_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
การปรับ Hyperparameter ใน Python

การแสดงภาพการปรับจากหยาบสู่ละเอียด

ลอง random search กับ 500 ชุดค่าผสม

พล็อตคะแนนความแม่นยำ:

กราฟความหนาแน่นของคะแนนความแม่นยำของโมเดล

โมเดลที่ดีคือโมเดลไหน?

การปรับ Hyperparameter ใน Python

การแสดงภาพการปรับจากหยาบสู่ละเอียด

ผลลัพธ์ที่ดีที่สุด:

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
การปรับ Hyperparameter ใน Python

การแสดงภาพการปรับจากหยาบสู่ละเอียด

แสดงค่า max_depth เทียบกับคะแนนความแม่นยำ:

กราฟกระจายระหว่าง max depth กับคะแนนความแม่นยำ

การปรับ Hyperparameter ใน Python

การแสดงภาพการปรับจากหยาบสู่ละเอียด

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

กราฟกระจายระหว่าง min samples leaf กับคะแนนความแม่นยำ

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

กราฟกระจายระหว่าง learn rate กับคะแนนความแม่นยำ

การปรับ Hyperparameter ใน Python

ขั้นตอนถัดไป

สิ่งที่ได้จากรอบแรก:

  • max_depth ระหว่าง 8 ถึง 30
  • learn_rate น้อยกว่า 1.3
  • min_samples_leaf อาจน้อยกว่า 8

ขั้นต่อไป? ทำ random search หรือ grid search อีกรอบด้วยข้อมูลที่มี!

หมายเหตุ: นี่เป็นการวิเคราะห์แบบ bivariate เท่านั้น สามารถดู hyperparameter หลายตัว (3, 4 ตัวขึ้นไป!) ในกราฟเดียวได้ แต่อยู่นอกขอบเขตของคอร์สนี้

การปรับ Hyperparameter ใน Python

มาฝึกกันเถอะ!

การปรับ Hyperparameter ใน Python

Preparing Video For Download...