Python xgboost sklearn参数num_类的包装值0应大于等于1

Python xgboost sklearn参数num_类的包装值0应大于等于1,python,scikit-learn,xgboost,Python,Scikit Learn,Xgboost,我试图使用sklearn提供的XGBClassifier包装器解决多类问题。我的类是[0,1,2],我使用的目标是multi:softmax。当我试图适应分类器时,我得到 xgboost.core.XGBoosError:参数num_类的值0应大于等于1 如果我试图设置num_类参数,我会得到错误 获取了意外的关键字参数“num\u class” Sklearn正在自动设置此参数,因此我不应该传递该参数。但是为什么会出现第一个错误?您需要手动将参数num\u class添加到xgb\u参数中

我试图使用
sklearn
提供的
XGBClassifier
包装器解决多类问题。我的类是[0,1,2],我使用的目标是
multi:softmax
。当我试图适应分类器时,我得到

xgboost.core.XGBoosError:参数num_类的值0应大于等于1

如果我试图设置num_类参数,我会得到错误

获取了意外的关键字参数“num\u class”


Sklearn正在自动设置此参数,因此我不应该传递该参数。但是为什么会出现第一个错误?

您需要手动将参数
num\u class
添加到xgb\u参数中

    # Model is an XGBClassifier
    xgb_param = model.get_xgb_params()
    xgb_param['num_class'] = 3
    cvresult = xgb.cv(xgb_param, ...)

如果您使用其
fit
方法,则XGBClassifier会自动设置此值,但在
cv
方法中不会设置此值

是否使用
xgboost.cv
功能?我遇到了同样的问题,但找到了解决办法。这是我的密码:

    xgb_param = model.get_xgb_params()
    extra = {'num_class': 3}
    xgb_param.update(extra)
    cvresult = xgb.cv(xgb_param, xgtrain, ...)

xgb_param
是XGBoost模型参数的字典。然后我向它附加一个新的dict
extra
,以指定
num_类
,将新的dict传递给
cv
函数。这是可行的。

在我的例子中,在常规的
fit
调用中抛出了相同的错误。问题的根源在于目标被手动设置为
multi:softmax
,但只有两个类。将其更改为
二进制:logistic
解决了问题