【lgb去除警告,设置早停】[LightGBM] [Warning] No further splits with positive gain, best gain: -inf

新版lightGBM在训练时会显示以下警告信息:
【lgb去除警告,设置早停】[LightGBM] [Warning] No further splits with positive gain, best gain: -inf_第1张图片
[LightGBM] [Warning] No further splits with positive gain, best gain: -inf
中文解释:
表示LightGBM在尝试进一步划分决策树时,没有找到可以带来正增益的划分,也就是说,现有的划分已经是最优的。

这个警告信息是LightGBM的日志输出的一部分,对模型的训练没有实际影响。如果你想隐藏这些警告信息,可以调整LightGBM的日志级别(verbosity)。

在LightGBM中有一个参数叫做verbosity,你可以设置这个参数来控制日志信息的输出。verbosity参数的值可以是-1(静默)、0(致命)、1(警告)、2(信息)、3(调试)。默认值是1,这意味着会打印警告和错误信息。你可以设置为-1或0,以隐藏警告信息。

解决方法:
在参数里面加入verbosity= -1

import lightgbm as lgb

# 创建数据集
train_data = lgb.Dataset(X, label=y)

# 设置参数
params = {
    'boosting_type': 'gbdt',
    'objective': 'regression',
    'metric': 'rmse',
    'verbosity': -1,  # 设置verbosity为-1,以隐藏警告信息
}

# 训练模型
gbm = lgb.train(params, train_data)

另外,新版本的 LightGBM(版本’4.0.0’及更高版本)引入了 callbacks 功能,用于在训练过程中执行自定义操作,例如监控指标、提前停止训练等。通过使用 callbacks,您可以更灵活地控制 LightGBM 训练过程的行为。

def lgb_train(X_train, y_train, X_valid, y_valid):
    model_lgb = lgb.LGBMClassifier(
        max_depth=10,
        n_estimators=5000,
        min_child_weight=100,
        colsample_bytree=0.7,
        subsample=0.9,
        learning_rate=0.1,
        verbosity= -1)
    
    # 设置回调函数
    callbacks = [lgb.log_evaluation(period=1), lgb.early_stopping(stopping_rounds=10)]
    
    model_lgb.fit(
        X_train,
        y_train,
        eval_metric='auc',
        eval_set=[(X_train, y_train), (X_valid, y_valid)],
        callbacks=callbacks)
    
    print(model_lgb.best_score_['valid_1']['auc'])
    return model_lgb

回调函数说明:
callbacks = [lgb.log_evaluation(period=1), lgb.early_stopping(stopping_rounds=10)]
这段代码是用于LightGBM(Light Gradient Boosting Machine)模型训练的回调函数设置。回调函数是在模型训练过程中的不同阶段执行的特定操作,用于监控训练进度和控制训练行为。这里有两个回调函数:

  1. lgb.log_evaluation(period=1)

    • 这个回调函数的作用是在每一轮训练结束后记录评估指标的值,并且指定了记录的频率。
    • period=1 表示每一轮都会记录一次评估指标的值,这有助于实时地了解模型在训练中的性能。
  2. lgb.early_stopping(stopping_rounds=10)

    • 这个回调函数的作用是实现早停止(early stopping)策略,用于自动停止训练,以防止模型过拟合。
    • stopping_rounds=10 表示如果在连续的10轮训练中,模型的性能在验证集上没有明显的改善(例如,损失函数值没有下降),则训练会提前停止。

综合起来,这两个回调函数一起用于监控训练过程中的性能并防止过拟合。每一轮训练结束后,会记录评估指标的值,如果连续的10轮中性能没有提升,训练就会提前结束,以节省时间和资源,并避免过拟合问题。这是一个常见的训练策略,有助于得到更好的模型。

新版本变化:移除了fit方法中的
verbose=Falseearly_stopping_rounds=10的参数设置,但可以通过verbosity= -1来屏蔽警告,另外可以在callbacks中设置早停止,以达到之前的效果。

你可能感兴趣的:(深度学习,机器学习,人工智能)