LightGBM基础错误:检查失败:(best_split_info.left_count)>(0)

4

有几个类似的问题,但我找不到一个适合的解决方案。我正在使用Scikit-Optimize BayesSearchCV和LightGBM。

full_pipeline = skl.Pipeline(steps=[('preprocessor', pre_processor), 
                                        ('estimator',    lgbm.sklearn.LGBMClassifier())])
scorer=make_scorer(fl.lgb_focal_f1_score)
lgb_tuner = sko.BayesSearchCV(full_pipeline, hyper_space, cv=5, refit=True, n_iter=num_calls,scoring=scorer)
lgb_tuner.fit(balanced_xtrain, balanced_ytrain)

训练进行了一段时间后,出现了以下错误:

Traceback (most recent call last):
  File "/var/training.py", line 134, in <module>
    lgb_tuner.fit(balanced_xtrain, balanced_ytrain)
  File "/usr/local/lib/python3.6/site-packages/skopt/searchcv.py", line 694, in fit
    groups=groups, n_points=n_points_adjusted
  File "/usr/local/lib/python3.6/site-packages/skopt/searchcv.py", line 579, in _step
    self._fit(X, y, groups, params_dict)
  File "/usr/local/lib/python3.6/site-packages/skopt/searchcv.py", line 423, in _fit
    for parameters in parameter_iterable
  File "/usr/local/lib/python3.6/site-packages/joblib/parallel.py", line 1041, in __call__
    if self.dispatch_one_batch(iterator):
  File "/usr/local/lib/python3.6/site-packages/joblib/parallel.py", line 859, in dispatch_one_batch
    self._dispatch(tasks)
  File "/usr/local/lib/python3.6/site-packages/joblib/parallel.py", line 777, in _dispatch
    job = self._backend.apply_async(batch, callback=cb)
  File "/usr/local/lib/python3.6/site-packages/joblib/_parallel_backends.py", line 208, in apply_async
    result = ImmediateResult(func)
  File "/usr/local/lib/python3.6/site-packages/joblib/_parallel_backends.py", line 572, in __init__
    self.results = batch()
  File "/usr/local/lib/python3.6/site-packages/joblib/parallel.py", line 263, in __call__
    for func, args, kwargs in self.items]
  File "/usr/local/lib/python3.6/site-packages/joblib/parallel.py", line 263, in <listcomp>
    for func, args, kwargs in self.items]
  File "/usr/local/lib/python3.6/site-packages/sklearn/model_selection/_validation.py", line 531, in _fit_and_score
    estimator.fit(X_train, y_train, **fit_params)
  File "/usr/local/lib/python3.6/site-packages/sklearn/pipeline.py", line 335, in fit
    self._final_estimator.fit(Xt, y, **fit_params_last_step)
  File "/usr/local/lib/python3.6/site-packages/lightgbm/sklearn.py", line 857, in fit
    callbacks=callbacks, init_model=init_model)
  File "/usr/local/lib/python3.6/site-packages/lightgbm/sklearn.py", line 617, in fit
    callbacks=callbacks, init_model=init_model)
  File "/usr/local/lib/python3.6/site-packages/lightgbm/engine.py", line 252, in train
    booster.update(fobj=fobj)
  File "/usr/local/lib/python3.6/site-packages/lightgbm/basic.py", line 2467, in update
    return self.__boost(grad, hess)
  File "/usr/local/lib/python3.6/site-packages/lightgbm/basic.py", line 2503, in __boost
    ctypes.byref(is_finished)))
  File "/usr/local/lib/python3.6/site-packages/lightgbm/basic.py", line 55, in _safe_call
    raise LightGBMError(decode_string(_LIB.LGBM_GetLastError()))
lightgbm.basic.LightGBMError: Check failed: (best_split_info.left_count) > (0) at /__w/1/s/python-package/compile/src/treelearner/serial_tree_learner.cpp, line 651 .

一些类似问题的答案暗示可能是使用GPU导致的,但我没有可用的GPU。我不知道还有什么原因导致这个问题或如何尝试修复它。有人能提供建议吗?

2个回答

1

我认为这是由于我的超参数限制错误导致的,其中一个超参数被设置为零,而不应该是这样,尽管我不确定是哪一个。


0
我也遇到了类似的错误信息。有些人说这可能与GPU或分类特征有关,但在我的情况下并不是这样。我的所有特征都是数值型的,而且我没有使用GPU。我的lgb版本是3.1.1。
我猜问题可能是由一些特征引起的,这些特征大部分都是缺失值。在我的情况下,有两个特征,在超过一半的行中的值都是NaN。虽然这并不能解释具体原因,但它确实会导致采样或分箱时出现问题。
你可以移除这些特征。或者如果这些特征需要使用,将zero_as_missing参数设置为True。或者按照你自己的方式处理缺失值。这样就能解决你的问题。

这并不真正回答问题。如果你有其他问题,可以点击提问来提出。如果你想在该问题有新的回答时收到通知,你可以关注该问题。一旦你获得足够的声望,你也可以设置悬赏来吸引更多注意力。-来自审查 - Thomas Schillaci
如果zero_as_missing是解决此错误的一种可能方法,请将其移到答案的顶部,并提供有关此配置设置的更多详细信息。我认为在答案的其余部分提供的上下文可能会有所帮助。 - Banjer
@ThomasSchillaci 这解决了问题,也是一个答案。而且这是一个在lightbhm上的公开问题。我的回答也可能对此有所帮助。你还试图向我解释如何使用stackoverflow? - Atacan
这并没有真正回答问题。如果你有其他问题,可以点击提问来提出。如果你想在这个问题有新的回答时收到通知,你可以关注此问题。一旦你拥有足够的声望,你还可以添加悬赏以吸引更多关注。- 来自评论 - Alez
@Atacan,我的评论是由SO的管理系统自动生成的,因为你的回答被标记为长度和内容问题。Banjer很好地解释了如何改进它。 - Thomas Schillaci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接