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

Optuna catboost 修剪

如何解决Optuna catboost 修剪

有没有办法使用 catboost 和 Optuna 进行修剪(在 LightGBM 中很容易,但在 catboost 中我找不到任何提示)。 我的代码是这样的

def objective(trial):
    param = {
        'iterations':trial.suggest_int('iterations',100,1500,step=100),'learning_rate':trial.suggest_uniform("learning_rate",0.001,0.3),'random_strength':trial.suggest_int("random_strength",1,10),'max_bin':trial.suggest_categorical('max_bin',[2,3,4,5,6,8,10,20,30]),'grow_policy':trial.suggest_categorical('grow_policy',['SymmetricTree','Depthwise','Lossguide']),"colsample_bylevel": trial.suggest_uniform("colsample_bylevel",0.1,1),'od_type' : "Iter",'od_wait' : 30,"depth": trial.suggest_int("max_depth",12),"l2_leaf_reg": trial.suggest_loguniform("l2_leaf_reg",1e-8,100),'custom_metric' : ['AUC'],"loss_function": "Logloss",}
    
    if param['grow_policy'] == "SymmetricTree": 
        param["boosting_type"]= trial.suggest_categorical("boosting_type",["Ordered","Plain"])
    else:
        param["boosting_type"] = "Plain"
        
    # Added subsample manually
    param["subsample"] = trial.suggest_float("subsample",1)

### CV ###

    # How to add a callback for pruning?
    scores = cv(train_dataset,param,fold_count=5,early_stopping_rounds=30,plot=False,verbose=False)
    
    return scores['test-AUC-mean'].mean()

解决方法

不,因为 catboost 不像其他 boosting 库那样提供任何回调。不过,catboost 计划在不久的将来引入回调函数。该功能发布后,optuna 可能会像 LightGBM 一样为 catboost 实现集成。另请参阅 github https://github.com/optuna/optuna/issues/2464 上的功能请求。

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