การปรับ Hyperparameter แบบ Bayesian ด้วย Hyperopt
ในแบบฝึกหัดนี้ เราจะตั้งค่าและรันกระบวนการปรับ hyperparameter แบบ Bayesian โดยใช้แพ็กเกจ Hyperopt (นำเข้าไว้แล้วในชื่อ hp) โดยจะเริ่มจากการกำหนด domain (ซึ่งคล้ายกับการตั้งค่ากริดใน grid search) จากนั้นตั้งค่า objective function และสุดท้ายรัน optimizer เป็นจำนวน 20 รอบ
ให้กำหนด domain โดยใช้ค่าต่อไปนี้:
max_depthใช้การแจกแจงแบบ quniform (ช่วง 2 ถึง 10 เพิ่มทีละ 2)learning_rateใช้การแจกแจงแบบ uniform (0.001 ถึง 0.9)
หมายเหตุ: เพื่อให้เหมาะสมกับแบบฝึกหัดนี้ ได้ลดขนาดของชุดข้อมูลตัวอย่าง รวมถึงจำนวนรอบของ Hyperopt และ GBM ลงแล้ว หากต้องการทดลองวิธีนี้บนเครื่องของตัวเอง ลองขยาย search space เพิ่มจำนวน trial และ cross-validation รวมถึงใช้ชุดข้อมูลที่ใหญ่ขึ้น เพื่อดูประสิทธิภาพที่แท้จริงของวิธีนี้
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การปรับ Hyperparameter ใน Python
คำแนะนำการฝึกหัด
- ตั้งค่า dictionary ชื่อ
spaceโดยใช้ domain ที่กำหนดไว้ข้างต้น - ตั้งค่า objective function โดยใช้ gradient boosting classifier
- รันอัลกอริทึมเป็นจำนวน 20 รอบ (ใช้อัลกอริทึมที่แนะนำโดยค่าเริ่มต้นจากสไลด์)
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Set up space dictionary with specified hyperparameters
space = {'max_depth': hp.____('max_depth', ____, ____, ____),'learning_rate': hp.____('learning_rate', ____,____)}
# Set up objective function
def objective(params):
params = {'max_depth': int(params[____]),'learning_rate': params[____]}
gbm_clf = ____(n_estimators=100, **params)
best_score = cross_val_score(gbm_clf, X_train, y_train, scoring='accuracy', cv=2, n_jobs=4).mean()
loss = 1 - ____
return ____
# Run the algorithm
best = fmin(fn=____,space=space, max_evals=____, rstate=np.random.default_rng(42), algo=tpe.suggest)
print(____)