微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 Optuna 在经过一定次数的试验后会卡住 环境可重现的示例

如何解决为什么 Optuna 在经过一定次数的试验后会卡住 环境可重现的示例

我正在尝试使用 Optuna 进行超调。数据集是 MovieLense (1M)。在一个脚本中,我有 LassoRidgeKnn。 Optuna 适用于 Lasso 和 Ridge,但适用于 Knn。

您可以看到 Ridge 模型调整的试验是在 2021-07-22 18:33:53 完成的。后来在 2021-07-22 18:33:53 为 Knn 创建了一项新研究。现在(在发布时)它是 2021-07-23 11:07:48,但是 Knn 没有试用。

^[[32m[I 2021-07-22 18:33:53,959]^[[0m Trial 199 finished with value: -1.1917496039282074 and parameters: {'alpha': 3.553292157377711e-07,'solver': 'sag','normalize': False}. Best is trial 71 with value: -1.1917485424789929.^[[0m
^[[32m[I 2021-07-22 18:33:53,961]^[[0m A new study created in memory with name: no-name-208652b3-68ec-4464-a2ae-5afefa9bf133^[[0m

同样的事情发生在 SVR 模型上(在 2021-07-23 05:13:40 的 84 号试用后,您可以看到 optuna 卡住了)

^[[32m[I 2021-07-23 05:13:37,907]^[[0m Trial 83 finished with value: -1.593471166487258 and parameters: {'C': 834.9834466420455,'epsilon': 99.19181748590665,'kernel': 'linear','norm': 'minmax'}. Best is trial 61 with value: -1.553044709891868.^[[0m
^[[32m[I 2021-07-23 05:13:40,261]^[[0m Trial 84 finished with value: -1.593471166487258 and parameters: {'C': 431.4022584640214,'epsilon': 2.581688694428477,'norm': 'minmax'}. Best is trial 61 with value: -1.553044709891868.^[[0m

你能告诉我为什么 Optuna 卡住了,我该如何解决这些问题?

环境

  • Optuna 版本:2.8.0
  • Python 版本:3.8
  • 操作系统:Linux CentOS 7
  • (可选)其他库及其版本:Scikit Learn、Pandas 和(最常见的库)

可重现的示例

我用于超调的代码

def tune(objective):
    study = optuna.create_study(direction="maximize")
    study.optimize(objective,n_trials=200,n_jobs=40)
    params = study.best_params
    return params

def knn_objective(X_train: DataFrame,y_train: DataFrame,cv_method: kfolds) -> Callable[[Trial],float]:
    def objective(trial: Trial) -> float:
        args: Dict = dict(
            n_neighbors=trial.suggest_int("n_neighbors",2,40,1),            weights=trial.suggest_categorical("weights",["uniform","distance"]),            metric=trial.suggest_categorical("metric",["euclidean","manhattan","mahalanobis"]),        )
        estimator = KNeighborsRegressor(**args)
        scores = cross_validate(
            estimator,X=X_train,y=y_train,scoring="neg_mean_squared_error",cv=cv_method,n_jobs=-1
        )
        return float(np.mean(scores["test_score"]))

    return objective

解决方法

没有关注问题。你是什​​么意思 Optuna 被“卡住了”?试验没有完成还是没有找到新的好值?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。