python - 无法将 XGBRegressor 与 sklearn RFE 一起使用
问题描述
帮助,这个简单的代码会产生一个奇怪的错误。
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'
提前致谢。
解决方案
我在 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
推荐阅读
- c# - 如何避免使用永远不会发生的未分配变量?
- gzip - 使用 tar 排除隐藏的点文件
- css - 下拉列表中的复选框重叠
- android - 约束布局为不同的屏幕支持正确的边距和大小
- java - 如何处理这个特定的弹出窗口..这只发生在 Firefox
- nginx - Nginx-Ingress 有时无法重写路径
- flutter - 当它被聚焦时,颤动会改变 GestureDetector 内 Container 的颜色
- python - 如何使用 NVIDIA “cuda toolkit” 版本而不是官方 conda “cudatoolkit” 版本运行 pytorch?
- java - MongoDB 连接立即关闭 - Java
- javascript - 使用带有变量的括号表示法来访问对象属性返回未定义