新版lightGBM在训练时会显示以下警告信息:
[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)模型训练的回调函数设置。回调函数是在模型训练过程中的不同阶段执行的特定操作,用于监控训练进度和控制训练行为。这里有两个回调函数:
-
lgb.log_evaluation(period=1)
:- 这个回调函数的作用是在每一轮训练结束后记录评估指标的值,并且指定了记录的频率。
period=1
表示每一轮都会记录一次评估指标的值,这有助于实时地了解模型在训练中的性能。
-
lgb.early_stopping(stopping_rounds=10)
:- 这个回调函数的作用是实现早停止(early stopping)策略,用于自动停止训练,以防止模型过拟合。
stopping_rounds=10
表示如果在连续的10轮训练中,模型的性能在验证集上没有明显的改善(例如,损失函数值没有下降),则训练会提前停止。
综合起来,这两个回调函数一起用于监控训练过程中的性能并防止过拟合。每一轮训练结束后,会记录评估指标的值,如果连续的10轮中性能没有提升,训练就会提前结束,以节省时间和资源,并避免过拟合问题。这是一个常见的训练策略,有助于得到更好的模型。
新版本变化:移除了fit方法中的
verbose=False
和 early_stopping_rounds=10
的参数设置,但可以通过verbosity= -1
来屏蔽警告,另外可以在callbacks中设置早停止,以达到之前的效果。