首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Optuna获得可复制的结果?

如何使Optuna获得可复制的结果?
EN

Stack Overflow用户
提问于 2022-11-29 04:56:23
回答 1查看 29关注 0票数 0

我用金枪鱼来调LGBM。随机种子已经被设置,但每次Optuna获得不同的最佳配角。

这是我的金枪鱼编码:

代码语言:javascript
复制
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笔记本内核,结果将是不同的。是否有办法使金枪鱼产量可再生产?

EN

回答 1

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74609322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档