【问题标题】:Cannot use XGBRegressor with sklearn RFE无法将 XGBRegressor 与 sklearn RFE 一起使用
【发布时间】:2020-07-14 12:42:03
【问题描述】:

求助,这个简单的代码会产生一个奇怪的错误。

from sklearn.feature_selection import RFECV
from xgboost.sklearn import XGBRegressor
import sklearn.metrics
from sklearn.metrics import mean_absolute_error

estimator = XGBRegressor()
selector = RFECV(estimator, step=1, min_features_to_select=1, cv=10, scoring='neg_mean_absolute_error')
selector = selector.fit(x, y.values.flatten())

我的回归器已经运行顺利,但 selector.fit 没有。 对于 RFE 或 RFECV,我得到相同的结果:

~/miniconda2/envs/py3/lib/python3.6/site-packages/xgboost/sklearn.py in coef_(self)
    714                                  .format(self.booster))
    715         b = self.get_booster()
--> 716         coef = np.array(json.loads(b.get_dump(dump_format='json')[0])['weight'])
    717         # Logic for multiclass classification
    718         n_classes = getattr(self, 'n_classes_', None)

KeyError: 'weight'

提前致谢。

【问题讨论】:

  • 您能否将您的代码重新格式化为 20 个字符的行宽?我无法在超暗模式下阅读它。

标签: python scikit-learn xgboost feature-selection


【解决方案1】:

我在 xgboost 版本:1.0.2 中遇到了同样的问题。如下降级到版本 0.90 解决了该问题。

pip show xgboost
pip uninstall xgboost
pip install --upgrade xgboost==0.90
pip show xgboost

在 0.90 版中,我收到以下警告,该错误可能与使用(默认)reg:linear 作为指标有关。如果您降级到 v 0.90,则无需执行任何操作并使用现有代码(如果在升级之前它曾经可以工作)。

警告:C:/Jenkins/workspace/xgboost-win64_release_0.90/src/objective/regression_obj.cu:152: reg:linear 现在已弃用,取而代之的是 reg:squarederror

【讨论】:

    【解决方案2】:

    您可以尝试在 XGBRegressor 中设置 booster 选项:

    estimator = XGBRegressor(booster='gbtree')
    

    XGBoost 中基本上有两种类型的助推器:线性和树形 (https://xgboost.readthedocs.io/en/latest/parameter.html)。有一些属性是它们各自独有的。例如,导致错误的 coef_ 属性仅针对线性学习器 (https://xgboost.readthedocs.io/en/latest/python/python_api.html) 定义,而 feature_importances_ 仅针对基于树的学习器定义。

    【讨论】:

      猜你喜欢
      • 2019-01-11
      • 1970-01-01
      • 2021-11-04
      • 2019-05-02
      • 2013-12-11
      • 2013-02-17
      • 2015-09-27
      • 2021-12-26
      • 2022-08-08
      相关资源
      最近更新 更多