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

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