2016-10-18 7 views
6

Я пытаюсь использовать обертку XGBClassifier, предоставленную sklearn для проблемы многоклассов. Мои классы [0, 1, 2], цель, которую я использую, - multi:softmax. Когда я пытаюсь соответствовать классификатору я получаюxgboost Значение обертки sklearn 0 для параметра num_class должно быть больше равным 1

xgboost.core.XGBoostError: value 0for Parameter num_class should be greater equal to 1

Если я пытаюсь установить параметр num_class я получаю ошибку

got an unexpected keyword argument 'num_class'

Sklearn автоматически устанавливая этот параметр, так что я не должен пройти этот аргумент. Но почему я получаю первую ошибку?

ответ

3

Вам нужно вручную добавить параметр 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

Вы используете функцию 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_class, передать новый dict функции cv. Это работает.