参数 num_class 的 xgboost sklearn 包装器值 0 应大于等于 1
xgboost sklearn wrapper value 0for Parameter num_class should be greater equal to 1
我正在尝试使用 sklearn
提供的 XGBClassifier
包装器解决多类问题。我的类是[0,1,2],我用的objective是multi:softmax
。当我尝试拟合分类器时,我得到
xgboost.core.XGBoostError: value 0for Parameter num_class should be greater equal to 1
如果我尝试设置 num_class 参数,我会收到错误消息
got an unexpected keyword argument 'num_class'
Sklearn 正在自动设置此参数,因此我不应该传递该参数。但是为什么我会得到第一个错误?
您需要手动添加参数num_class
到xgb_param
# 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模型参数的字典。然后我向其附加一个新的字典 extra
以指定 num_class
,将新的字典传递给 cv
函数。这行得通。
就我而言,在常规 fit
调用期间抛出相同的错误。问题的根源是 objective 被手动设置为 multi:softmax
,但只有 2 个 类。将其更改为 binary:logistic
解决了问题。
在 xgboost 版本 1.4.2 中,对我有用的是将 num_class 作为回归量的参数,其值等于 targets/outputs.
的数量
params = { "objective": "multi:softmax", 'num_class': 3}
model = xgb.XGBRegressor(**params)
我正在尝试使用 sklearn
提供的 XGBClassifier
包装器解决多类问题。我的类是[0,1,2],我用的objective是multi:softmax
。当我尝试拟合分类器时,我得到
xgboost.core.XGBoostError: value 0for Parameter num_class should be greater equal to 1
如果我尝试设置 num_class 参数,我会收到错误消息
got an unexpected keyword argument 'num_class'
Sklearn 正在自动设置此参数,因此我不应该传递该参数。但是为什么我会得到第一个错误?
您需要手动添加参数num_class
到xgb_param
# 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模型参数的字典。然后我向其附加一个新的字典 extra
以指定 num_class
,将新的字典传递给 cv
函数。这行得通。
就我而言,在常规 fit
调用期间抛出相同的错误。问题的根源是 objective 被手动设置为 multi:softmax
,但只有 2 个 类。将其更改为 binary:logistic
解决了问题。
在 xgboost 版本 1.4.2 中,对我有用的是将 num_class 作为回归量的参数,其值等于 targets/outputs.
的数量params = { "objective": "multi:softmax", 'num_class': 3}
model = xgb.XGBRegressor(**params)