правильная настройка eval_set в мультиклассовой классификации xgboost python, ошибка » Ошибка проверки: preds.size() == info.labels_.size()»

#python #scikit-learn #classification #xgboost

#python #scikit-learn #классификация #xgboost

Вопрос:

у меня проблема с мультиклассовой классификацией с 3 классами [-1,0,1] . я бы хотел использовать eval_set в xgboost. но она завершается ошибкой:

 rank_metric.cc:88: Check failed: preds.size() == info.labels_.size() (270 
vs. 90) label size predict size not match'
  

когда я запускаю

   modelfit=model.fit(Xtrain,ytrain) 
  

он работает нормально

 modelfit=model.fit(Xtrain,ytrain,eval_set = [(Xtest, ytest)]) 
  

генерирует указанную выше ошибку

я перепробовал все eval_metric, доступные для мультикласса, и все они выдают одну и ту же ошибку.

модель следующая:

 xgb.XGBClassifier(n_jobs = -1,objective = 'multi:softmax',
                num_class=3, eval_metric = 'mlogloss',           
tree_method='approx', scale_pos_weight=1,
            **{'subsample':0.5,'colsample_bylevel':1, 'colsample_bytree': 
1, 'gamma':0, 'learning_rate':0.3,'max_delta_step': 0, 'max_depth': 10, 
'min_child_weight': 1, 'n_estimators': 10, 'reg_alpha': 0, 'reg_lambda': 
0})

ipdb> modelfit.predict(Xtest)
array([-1., -1., -1., -1., -1., -1., -1.,  1., -1., -1., -1.,  1.,  1.,
    1., -1.,  1.,  0., -1.,  1.,  1.,  1., -1., -1.,  1.,  1.,  1.,
    1.,  1.,  1.,  0.,  0., -1., -1., -1., -1., -1., -1., -1., -1.,
   -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
   -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,
   -1., -1., -1., -1., -1., -1., -1.,  1., -1., -1., -1., -1., -1.,
    0.,  1.,  1.,  1.,  1.,  1.,  1., -1., -1., -1., -1., -1.])
ipdb> len(modelfit.predict(Xtest))
90
ipdb> len(ytest)
90
ipdb> ytest
array([-1., -1., -1., -1., -1., -1., -1.,  0., -1.,  1.,  0.,  1.,  0.,
    1.,  0.,  1.,  0.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,
    1.,  1., -1., -1., -1., -1., -1., -1., -1., -1.,  0.,  0.,  1.,
    1.,  0.,  0.,  0.,  0.,  1.,  1.,  1.,  1.,  0.,  0.,  1.,  0.,
    0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., -1.,
   -1., -1., -1.,  0.,  0.,  0.,  1.,  1.,  1.,  1.,  0.,  0.,  0.,
    0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
  

как видно из вывода отладчика, значения len для predict(Xtest) и ytest равны 90.
почему xgboost генерирует ошибку?

Ответ №1:

похоже, ошибка в версии 0.80 работает при обновлении до xgboost 0.82