การปรับ Hyperparameter ใน Python
Alex Scriven
Data Scientist
คล้ายกับ grid search มาก:
แต่ เราจะ สุ่ม เลือก grid squares แทน
Bengio & Bergstra (2012):
งานวิจัยนี้แสดงให้เห็นทั้งเชิงประจักษ์และเชิงทฤษฎีว่า การเลือกทดลองแบบสุ่มมีประสิทธิภาพมากกว่าการทดลองแบบ grid สำหรับการปรับ hyper-parameter
เหตุผลหลัก 2 ข้อ:
Grid search:

ต้องรันโมเดลกี่ครั้งจึงจะมีโอกาส 95% ที่จะได้ช่องสีเขียว?
โมเดลที่ดีที่สุด:

หากสุ่มเลือกชุดค่า hyperparameter อย่างสม่ำเสมอ ลองพิจารณาโอกาสที่จะ MISS ทุกครั้ง เพื่อแสดงว่าสิ่งนี้ไม่น่าจะเกิดขึ้น
ครั้งที่ 1 = โอกาสสำเร็จ 0.05 และพลาด (1 - 0.05)
เมื่อทดลอง n ครั้ง โอกาสที่ทุกครั้งจะพลาดจุดที่ต้องการคือ (1-0.05)^n
ต้องทดลองกี่ครั้งจึงจะมีโอกาสสูง (95%) ที่จะอยู่ในช่วงนั้น?
หมายความว่าอะไร?
ข้อควรจำ:
ค่าสูงสุดที่ได้ยังขึ้นอยู่กับ grid ที่กำหนดเท่านั้น!
เพื่อเปรียบเทียบกับ grid search อย่างยุติธรรม ต้องใช้ "งบประมาณ" การสร้างโมเดลเท่ากัน
สร้างชุดค่า hyperparameter แบบสุ่มเองได้ดังนี้:
# Set some hyperparameter lists
learn_rate_list = np.linspace(0.001,2,150)
min_samples_leaf_list = list(range(1,51))
# Create list of combinations
from itertools import product
combinations_list = [list(x) for x in
product(learn_rate_list, min_samples_leaf_list)]
# Select 100 models from our larger set
random_combinations_index = np.random.choice(
range(0,len(combinations_list)), 100,
replace=False)
combinations_random_chosen = [combinations_list[x] for x in
random_combinations_index]
วิเคราะห์การครอบคลุมของ random search ด้วยการพล็อตค่า hyperparameter บนแกน X และ Y ได้เช่นกัน

สังเกตว่าจุดกระจายในช่วงกว้าง แต่ไม่หนาแน่นในจุดใดจุดหนึ่ง?
การปรับ Hyperparameter ใน Python