使用 Hyperopt 進行貝葉斯式超參數調校
在這個範例中,你會使用 Hyperopt 套件(已為你匯入為 hp)來設定並執行貝葉斯式超參數最佳化流程。你會先設定搜尋空間(類似於為網格搜尋設定網格),接著建立目標函式。最後,將最佳化器執行 20 次迭代。
你需要用以下值來設定搜尋空間:
max_depth使用離散均勻分佈(quniform,介於 2 到 10,以 2 為步進)learning_rate使用連續均勻分佈(uniform,0.001 到 0.9)
注意:為了本練習的目的,我們縮小了資料樣本數,以及 hyperopt 與 GBM 的迭代次數。 如果你在自己的電腦上試用這個方法,建議擴大搜尋空間、增加試驗次數、增加交叉驗證摺數,並使用更大的資料集,這樣更能看出效果!
本練習屬於課程
Python 超參數調校
練習說明
- 依照上述條件,建立
space字典作為搜尋空間。 - 使用梯度提升分類器來建立目標函式。
- 將演算法執行 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(____)