gpt4 book ai didi

python - 使用 optuna LightGBMTunerCV 作为使用 optuna 进一步搜索的起点

转载 作者:行者123 更新时间:2023-12-04 17:25:05 24 4
gpt4 key购买 nike

我正在尝试将 LightGBM 用于回归问题(平均绝对误差/L1 - 或类似 Huber 或 pseud-Huber - 损失),我主要想调整我的超参数。 LightGBMTunerCVoptuna提供了一个很好的起点,但在那之后我想更深入地搜索(不丢失自动调谐器学到的东西)。此外,我想使用平均交叉验证分数 + 交叉验证分数的标准差作为我对模型进行排名的指标(即我假设较低的 SD 是一个好兆头,对于来自相同的未见数据的性能更稳定分配)。
我做过这样的事情:

import optuna
import optuna.integration.lightgbm as lgb

params = {
"objective": "l1",
"metric": "l1",
"verbosity": -1,
"boosting_type": "gbdt",
}

dtrain = lgb.Dataset(X, label=y)
mystudy = optuna.create_study()
tuner = lgb.LightGBMTunerCV(
params, dtrain,
verbose_eval=False,
time_budget=6000,
study = mystudy)

tuner.run()
现在我想做一个考虑到这些结果的进一步搜索。如果我之前没有结果,我可能会这样做:
def objective(trial):    
param = {
'objective': 'l1',
'metric': 'l1',
'verbosity': -1,
'boosting_type': 'gbdt',
'lambda_l1': trial.suggest_loguniform('lambda_l1', 1e-8, 10.0),
'lambda_l2': trial.suggest_loguniform('lambda_l2', 1e-8, 10.0),
'num_leaves': trial.suggest_int('num_leaves', 2, 512),
'feature_fraction': trial.suggest_uniform('feature_fraction', 0.1, 1.0),
'bagging_fraction': trial.suggest_uniform('bagging_fraction', 0.1, 1.0),
'bagging_freq': trial.suggest_int('bagging_freq', 1, 15),
'min_child_samples': trial.suggest_int('min_child_samples', 2, 256),
'seed': 1979
}

# insert code for getting X and y ready
dtrain = lgb.Dataset(X, label=y)

lcv = lgb.cv(
param,
dtrain,
verbose_eval=False)

return lcv['l1-mean'][-1]+lcv['l1-stdv'][-1]

optuna.logging.set_verbosity(optuna.logging.WARNING)
study = optuna.create_study(direction='minimize')
study.optimize(objective, n_trials=2500)
我有点不清楚如何将以前的结果添加到研究中。不定义一项新研究大概可以解决这个问题,但它看起来像 LightGBMTunerCV使用平均分数(不是mean + stdv)并且没有办法轻松改变它?可以以某种方式对研究中的试验进行后处理以添加 stdv 吗?
我什至还没有看到一个明确的例子来说明如何使用 FixedTrial强制研究重新运行最佳调整参数(即使我理解这应该是可能的),这可能是另一种方法。

最佳答案

学习类有个方法叫enqueue_trial ,其中插入一个 trial类进入评估队列。
所以你可以像这样使用调整参数作为起点:

optuna.logging.set_verbosity(optuna.logging.WARNING)
study = optuna.create_study(direction='minimize')

# insert this line:
study.enqueue_trial(tuner.best_params)

study.optimize(objective, n_trials=2500)

关于python - 使用 optuna LightGBMTunerCV 作为使用 optuna 进一步搜索的起点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63875879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com