【问题标题】:xgboost sklearn wrapper value 0for Parameter num_class should be greater equal to 1xgboost sklearn 包装器值 0 用于参数 num_class 应大于等于 1
【发布时间】:2017-02-28 04:45:04
【问题描述】:

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

xgboost.core.XGBoostError: value 0for Parameter num_class 应该大于等于 1

如果我尝试设置 num_class 参数,则会出现错误

得到了一个意外的关键字参数“num_class”

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

【问题讨论】:

    标签: python scikit-learn xgboost


    【解决方案1】:

    在 xgboost 版本 1.4.2 中,对我有用的是包含 num_class 作为回归器的参数,其值等于目标/输出的数量。

    params = { "objective": "multi:softmax", 'num_class': 3}
    model = xgb.XGBRegressor(**params)
    

    【讨论】:

      【解决方案2】:

      在我的情况下,在常规的fit 调用期间引发了相同的错误。问题的根源是目标被手动设置为multi:softmax,但只有2个类。将其更改为binary:logistic 即可解决问题。

      【讨论】:

        【解决方案3】:

        你在使用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 函数。这行得通。

        【讨论】:

          【解决方案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, ...)
          

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-04-13
            • 1970-01-01
            • 2019-12-23
            • 2013-08-17
            • 1970-01-01
            • 2019-10-09
            • 2018-08-18
            • 2018-01-26
            相关资源
            最近更新 更多