python - 多类分类 xgboost python 中 eval_set 的正确设置,错误是“检查失败:preds.size() == info.labels_.size()”
问题描述
我有 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.])
从调试器输出可以看出,预测(Xtest)和ytest的len都是90。为什么xgboost会产生错误?
解决方案
升级到 xgboost 0.82 时,看起来 0.80 版本中的错误确实有效
推荐阅读
- python - 如何知道会话是否已结束并使用 pcap 数据开始新会话
- mysql - 如何在 IF 语句中使用 INSERT INTO SELECT ON DUPLICATE KEY UPDATE
- laravel - Laravel websocket - 使用 laravel 作为后端开发移动聊天应用程序
- python-3.x - PyCharm Django docker-compose 未解析的参考模型
- javascript - 在javascript中编辑innerhtml后如何更新页面
- angular - 如何触发页面刷新以更新 UI 中同级组件中的值更改
- android - 从 firebase 数据库中检索多个纬度经度
- json - 为什么我无法从 JSON.stringify POST 数据中获取 $this->post() 值
- python - 为什么在 python 中使用 LSTM 没有显示预测值
- api - 为大于 25 MB 的文件直接生成下载链接(没有病毒扫描弹出窗口)