我用金枪鱼来调LGBM。随机种子已经被设置,但每次Optuna获得不同的最佳配角。
这是我的金枪鱼编码:
def get_hpo_params(opt_X_train, opt_X_val, opt_y_train, opt_y_val, n_trials=180, cat_features=""):
def objective(trial):
dtrain = lgb.Dataset(opt_X_train, opt_y_train, categorical_feature=cat_features)
dval = lgb.Dataset(opt_X_val, opt_y_val, categorical_feature=cat_features)
upper = min(32768, int(opt_X_train.shape[0]))
params = {
"objective": "binary",
"metric": "auc",
"random_state": 10,
"verbosity": -1,
"boosting": "gbdt",
"num_threads": 4,
"num_leaves": trial.suggest_int("num_leaves", 4, 30),
"learning_rate": trial.suggest_loguniform("learning_rate", 0.005, 1.0),
"bagging_fraction": trial.suggest_uniform("bagging_fraction", 0.1, 1.0),
"feature_fraction": trial.suggest_uniform("feature_fraction", 0.1, 1.0),
"bagging_freq": trial.suggest_int("bagging_freq", 10, 30),
"min_data_in_leaf": trial.suggest_int("min_data_in_leaf", 1000, 3000),
"num_iterations": trial.suggest_int("num_iterations", 1000, 3000)
}
pruning_callback = optuna.integration.LightGBMPruningCallback(trial, "auc")
clf = lgb.train(
params, dtrain, valid_sets=[dval], verbose_eval=False, callbacks=[pruning_callback]
)
y_val_pred = clf.predict(opt_X_val)
auc = roc_auc_score(opt_y_val, y_val_pred)
return auc
start = timeit.default_timer()
study = optuna.create_study(direction="maximize", pruner=optuna.pruners.HyperbandPruner(),
sampler=optuna.samplers.TPESampler(seed=10), study_name='lgbm_hpo')
study.optimize(objective, n_trials=n_trials)
print("Number of finished trials: {}".format(len(study.trials)))
best_trial = study.best_trial
print(f"Best trial performance: {best_trial.value}")
stop = timeit.default_timer()
print('Time (min): ', (stop - start)/60)
return best_trial.params如果我重新启动ipython笔记本内核,结果将是不同的。是否有办法使金枪鱼产量可再生产?
发布于 2022-11-29 05:40:57
我终于解决了问题。需要使用以下方法在我的笔记本上设置哈希种子:https://gerrychain.readthedocs.io/en/latest/topics/reproducibility.html#set-pythonhashseed-0
此解决方案在optuna中提到,用于复制剪枝行为:https://optuna.readthedocs.io/en/stable/reference/generated/optuna.pruners.HyperbandPruner.html
https://stackoverflow.com/questions/74609322
复制相似问题