我正在尝试使用XGBClassifier
提供的sklearn
包装器来解决多类问题。我的课程是[0,1,2],我使用的目标是multi:softmax
。当我试图适应分类器时,我得到了
xgboost.core.XGBoostError:参数num_class的值0应大于等于1
如果我尝试设置num_class参数,我会收到错误
有一个意外的关键字参数'num_class'
Sklearn正在自动设置此参数,因此我不应该传递该参数。但为什么我会收到第一个错误?
答案 0 :(得分:4)
您需要手动添加参数num_class
到xgb_param
# Model is an XGBClassifier
xgb_param = model.get_xgb_params()
xgb_param['num_class'] = 3
cvresult = xgb.cv(xgb_param, ...)
XGBClassifier 会在您使用fit
方法时自动设置此值,但在cv
方法
答案 1 :(得分:2)
就我而言,在常规fit
调用期间抛出了相同的错误。问题的根源是将目标手动设置为multi:softmax
,但是只有2个类。将其更改为binary:logistic
可解决问题。
答案 2 :(得分:0)
在 xgboost 1.4.2 版中,对我有用的是将 num_class 作为回归器的参数,其值等于目标/输出的数量。
params = { "objective": "multi:softmax", 'num_class': 3}
model = xgb.XGBRegressor(**params)
答案 3 :(得分:-1)
您使用的是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模型参数的字典。然后我向它添加一个新的字典extra
以指定num_class
,将新的字典传递给cv
函数。这很有效。