如何让 LightGBM 抑制输出?

数据挖掘 Python 助推 lightgbm
2021-10-10 16:59:58

我已经尝试了一段时间来弄清楚如何“关闭”LightGBM。特别是,我想在训练期间抑制 LightGBM 的输出(即对提升步骤的反馈)。

我的模型:

params = {
            'objective': 'regression',
            'learning_rate' :0.9,
            'max_depth' : 1,
            'metric': 'mean_squared_error',
            'seed': 7,
            'boosting_type' : 'gbdt'
        }

gbm = lgb.train(params,
                lgb_train,
                num_boost_round=100000,
                valid_sets=lgb_eval,
                early_stopping_rounds=100)

我尝试verbose=0按照文档中的建议添加,但这不起作用。 https://github.com/microsoft/LightGBM/blob/master/docs/Parameters.rst

有谁知道如何在训练期间抑制 LightGBM 输出?

4个回答

正如@Peter 所建议的那样,设置会verbose_eval = -1抑制大部分LightGBM输出(链接:此处)。

但是,LightGBM可能仍会返回其他警告 - 例如No further splits with positive gain. 这可以按如下方式抑制(来源:here):

lgb_train = lgb.Dataset(X_train, y_train, params={'verbose': -1}, free_raw_data=False)
lgb_eval = lgb.Dataset(X_test, y_test, params={'verbose': -1},free_raw_data=False)
gbm = lgb.train({'verbose': -1}, lgb_train, valid_sets=lgb_eval, verbose_eval=False)

要抑制 LightGBM 的(大部分)输出,可以设置以下参数。

抑制警告: 'verbose': -1必须在params={}.

抑制训练迭代的输出: verbose_eval=False必须在train{}参数中指定。

最小的例子:

params = {
            'objective': 'regression',
            'learning_rate' : 0.9, 
            'max_depth' : 1, 
            'metric': 'mean_squared_error',
            'seed': 7,
            'verbose': -1,
            'boosting_type' : 'gbdt'
        }

gbm = lgb.train(params,
                lgb_train,
                num_boost_round=100000,
                valid_sets=lgb_eval,
                verbose_eval=False,
                early_stopping_rounds=100)

遵循这些要点。

  1. verbose= Falsefit方法中使用。
  2. verbose= -100调用分类器时使用。
  3. 保留silent = True(默认)。

sklearn API 的解决方案(在 v3.3.0 上检查):

import lightgbm as lgb


param = {'objective': 'binary', "is_unbalance": 'true',
         'metric': 'average_precision'}
model_skl = lgb.sklearn.LGBMClassifier(**param)

# early stopping and verbosity
# it should be 0 or False, not -1/-100/etc
callbacks = [lgb.early_stopping(10, verbose=0), lgb.log_evaluation(period=0)]

# train
model_skl.fit(x_train, y_train,
              eval_set=[(x_train, y_train), (x_val, y_val)],
              eval_names=['train', 'valid'],
              eval_metric='average_precision',
              callbacks=callbacks)