【问题标题】:Optuna for Catboost outputs "trials" in random order?Catboost 的 Optuna 以随机顺序输出“试验”?
【发布时间】:2021-10-24 04:36:55
【问题描述】:

我正在使用 Optuna for CatboostRegressor 进行超参数调整,但我意识到我得到的试验是随机顺序的(我的试验从试验 7 开始,然后是试验 5,然后是试验 8。我在网上看到的所有示例是按顺序排列的,例如 Trial 0 以值结束:xxxxx、Trial 1、Trial 2...(例如:https://www.kaggle.com/saurabhshahane/catboost-hyperparameter-tuning-with-optuna

这是一个问题还是无需担心?不知道为什么我的顺序是随机的。

还想知道我是否应该使用cb.cv(Catboost 的交叉验证)而不是cb.CatBoostRegressor,然后使用.fit.predict 进行超参数调整?或者我使用哪种方式来获得最佳超参数并不重要?

这是我的代码:

def objective(trial):

    optuna_params = {"subsample": trial.suggest_float("subsample", 0.5, 0.99),
                     'od_wait': trial.suggest_int('od_wait', 10, 50, step=1),
                     "colsample_bylevel": trial.suggest_float("colsample_bylevel", 0.5, 0.99),
                     "random_strength": trial.suggest_int("random_strength", 1, 10, step=1),
                     "l2_leaf_reg": trial.suggest_float("l2_leaf_reg", 1.0, 50.0),
                     "max_depth": trial.suggest_int("max_depth", 4, 10, step=1),
                     "n_estimators": trial.suggest_int("n_estimators", 100, 2500, step=1),
                     'learning_rate': trial.suggest_loguniform("learning_rate", 0.005, 0.1)}

    cbregressor = cb.CatBoostRegressor(**optuna_params, 
                                       random_state=0,
                                       loss_function='MAE', 
                                       eval_metric='MAE', 
                                       one_hot_max_size=0,
                                       boost_from_average=True)
    
    cat_optuna = cbregressor.fit(cat_train_pool2, eval_set=cat_val_pool2, verbose=False, early_stopping_rounds=10)
    
    y_valid_pred_cat3 = cat_optuna.predict(X_validation2)
    
    MAE = mean_absolute_error(y_validation, y_valid_pred_cat3)
    print('MAE score of CatBoost =', MAE)
    return MAE
study = optuna.create_study(direction="minimize", sampler = TPESampler(seed=0), study_name="Catboost Optuna")
study.optimize(objective, n_trials=100, n_jobs=-1)

【问题讨论】:

    标签: python catboost optuna


    【解决方案1】:

    这是一个问题还是无需担心?不知道为什么我的顺序是随机的。

    没有。当我们在study.optimize方法中设置n_jobs=-1时,使用线程并行进行优化。

    回归与 CV

    我想两者都可以。一般来说,当我们使用 CV 时,过拟合比单个训练/验证拆分(即此设置中的回归器)更不可能发生。但是,CV成本的计算成本很高。

    【讨论】:

    • 我还有一个关于 optuna 的问题,这是我第一次使用 optuna,一直在使用 Hyperopt :) 在输出中时间戳旁边的数字是什么意思?例如在“037、312、584”上面的输出中。这些不是助推轮的数量,对吧?因为我正在调整 n_estimators 的提升轮数,这些轮数在更新后的最佳参数中返回(与时间戳旁边的数字不同)。
    • 你是对的。这些数字是毫秒值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2018-04-10
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多