首页 > 解决方案 > LightGBM 最佳迭代总是返回 1

问题描述

我正在使用 lightgbm 来解决回归问题,以下是我的参数:

lgbm_params = {
    'nthread': 5,
    'boosting_type': 'gbdt',
    'objective': 'regression',
    'scale_pos_weight':7,
    'metric':['rmse',"l1"],
    'learning_rate': 0.001,
    'max_bin':2**7-1,
    'num_leaves': 63,
    'max_depth': -1,
    'subsample': 1,
    'feature_fraction': 0.9,
    'colsample_bytree': 0.08,
    'min_split_gain': 0.09,
    'lambda_l2' : 0.2,
    'verbose': 1,
}

带有训练参数:

def lgb_mae_score(y_hat, data):
    y_true = data.get_label()
    return 'lgb_mae_score', mean_absolute_error(y_hat,y_true), True

dtrain = lgb.Dataset(train_x, label=train_y)
dval = lgb.Dataset(valid_x, label=valid_y, reference=dtrain)
bst = lgb.train(
    lgbm_params, dtrain, num_boost_round=20000,
    valid_sets=[dval], early_stopping_rounds=1000, verbose_eval=100,feval=lgb_mae_score
)

但我的训练过程总是在 1000 epoch 停止并返回:

在此处输入图像描述

很明显loss还在下降,第一轮并不是最好的迭代。

任何想法为什么我会陷入这种情况?

任何建议将不胜感激。

- - - - - - - - - - - - - -更新 - - - - - - - - - - - ------

我认为问题是由我的自定义指标函数引起的lgb_mae_score

我将它从训练功能中删除,训练过程很顺利,但我仍然不明白为什么。

标签: pythonlightgbm

解决方案


您在模型训练中设置 early_stopping_rounds 参数。所以它将停止在 1000 个 epoch。

请参考 light-gbm 文档: https ://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.early_stopping.html 。

当模型准确性有所提高时,训练将停止。如果我们设置 early_stopping_rounds 参数模型将从训练数据中选择最佳参数


推荐阅读