我有3个类[-1,0,1]的多类分类问题。我想在xgboost中使用eval_set。但它失败并出现错误:
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 of predict(Xtest)和ytest都是90.为什么xgboost会产生错误?
看起来像0.80版本中的错误在升级到xgboost 0.82时确实有效