首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用optuna LightGBMTunerCV作为进一步使用optuna进行搜索的起点

使用optuna LightGBMTunerCV作为进一步使用optuna进行搜索的起点
EN

Stack Overflow用户
提问于 2020-09-14 05:45:42
回答 1查看 1.1K关注 0票数 3

我正在尝试使用LightGBM来解决回归问题(平均绝对误差/L1-或者类似于Huber或pseud-Huber - loss),并且我主要想调优我的超参数。optuna中的LightGBMTunerCV提供了一个很好的起点,但在此之后,我想更深入地搜索(而不会丢失自动调谐器所学到的内容)。此外,我想使用平均交叉验证分数+交叉验证分数的标准差作为我对模型进行排名的指标(即,我假设较低的SD是在相同分布的未见数据上更稳定性能的良好迹象)。

我做过这样的事情:

代码语言:javascript
复制
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()

现在,我想做一个考虑到这些结果的进一步搜索。如果我没有以前的结果,我可能会这样做:

代码语言:javascript
复制
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使用的是平均分(而不是均值+标准差),没有办法轻松地改变这一点?可以通过某种方式对研究中的试验进行后处理以添加stdv吗?

我甚至还没有看到一个明确的例子来说明如何使用FixedTrial来强制研究重新运行最佳调优参数(即使我知道这应该是可能的),这可能是另一种方法。

EN

回答 1

Stack Overflow用户

发布于 2021-08-28 11:27:26

学习类有一个名为enqueue_trial的方法,它将一个trial类插入到评估队列中。

因此,您可以像这样使用调优后的参数作为起点:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63875879

复制
相关文章

相似问题

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