首页 > 解决方案 > 运行时如何更改 LightGBM 参数?

问题描述

因此,我想在 LightGBM 运行or后更改其参数运行 10000 次后,我想添加另一个具有不同参数的模型,但使用之前训练的模型。

像这样的东西:

params = {
        "objective" : "regression", 
        "metric" : "mae", 
        "num_leaves" : 35, 
        "learning_rate" : 0.05, 
        "bagging_fraction" : 0.7,
        "bagging_seed" : 0, 
        "num_threads" : 4,
        "colsample_bytree" : 0.7,
        'min_data_in_leaf':200, 
        'min_split_gain':0.0004,
        'lambda_l2':0.1
}

model = lgb.train(  params, 
                    train_set = train_set,
                    num_boost_round=1000,
                    early_stopping_rounds=200,
                    verbose_eval=100, 
                    valid_sets=[train_set,valid_set]
)

params = {
        "objective" : "dart", 
        "metric" : "mae", 
        "num_leaves" : 44, 
        "learning_rate" : 0.01, 
        "bagging_fraction" : 0.3,
        "bagging_seed" : 0, 
        "num_threads" : 4,
        "colsample_bytree" : 0.1,
        'min_data_in_leaf':400, 
        'min_split_gain':0.0001,
        'lambda_l2':0.2
}

model = lgb.train(                   
                    params, 
                    train_set = train_set,
                    num_boost_round=2000,
                    early_stopping_rounds=200,
                    verbose_eval=100,
                    init_model=model,          
                    valid_sets=[train_set,valid_set]

)

但是在这里,当我使用时init_model=model,我得到了这个错误:

LightGBMError: Cannot set predictor after freed raw data, set free_raw_data=False when construct Dataset to avoid this.

标签: pythonmachine-learninglightgbm

解决方案


这是幸运的错误之一,您需要完全按照错误消息的说明进行操作(这是我的一段代码):

d_train = lgb.Dataset(x_train, label=y_train, free_raw_data = False)

当您构建 lightgbm.Dataset 对象时,验证集和测试集也是如此。

其余的不需要更改,您的代码看起来不错(也是 init_model 部分)。问题在于 LightGBM 的 Python 包装器,需要为此类拉入/拉出模型使用免费设置原始数据的构造。如果您有兴趣更深入地了解情况,只需查看:https ://lightgbm.readthedocs.io/en/latest/FAQ.html

我相信这个答案会解决你的情况。但如果没有,请不要犹豫,问更多。祝你好运!


推荐阅读