如何解决xgboost与multi:softprob有关的问题-标签大小预测大小不匹配
我正在尝试构建模型,并且响应变量具有三个选项:[0,1,2] 这是代码:
def model_jobs(X_train,X_val,y_train,y_val):
param = {'eta': 0.3,'n_estimators': 600,'gamma': 2.0,'max_depth': 3,'min_child_weight': 1.0,'subsample': 0.8,'max_delta_step': 0.0,'colsample_bytree': 1.0,'lambda': 1.0,'alpha': 1.0,'num_class': 3,'eval_metric': "aucpr",'objective': "multi:softprob",'num_boost_round': 20,'early_stopping_rounds': 50,}
model_fitting(X_train = X_train,y_train = y_train,X_val = X_val,y_val = y_val,tag="first",param=param)
def model_fitting(X_train,y_val,tag,param):
dtrain = xgb.DMatrix(X_train,label=y_train)
dval = xgb.DMatrix(X_val,label=y_val)
watchlist = [(dtrain,"train"),(dval,"eval")]
bst = xgb.train(
dtrain=dtrain,evals=watchlist,params=param
)
并返回此错误:
Check failed: preds.Size() == info.labels_.Size() (11122134 vs. 3707378) : label size predict size not match
我检查了所有尺寸,它们完全可以。该表的实际大小为3707378,通过简单的数学运算,我们看到11122134 == 3707378 * 3 令我感到困惑的是,如果我将参数中的num_class从3更改为4,我将收到此错误:
Check failed: preds.Size() == info.labels_.Size() (14829512 vs. 3707378) : label size predict size not match
和14829512 == 3707378 * 4 我究竟做错了什么? num_class和此错误之间是什么关系?我的xgboost版本是1.1.1
解决方法
问题是eval_metric
。显然multi:softprob
对aucpr
不满意,我们需要将其更改为mlogloss
。我不确定为什么会这样。
param = {'eta': 0.3,'n_estimators': 600,'gamma': 2.0,'max_depth': 3,'min_child_weight': 1.0,'subsample': 0.8,'max_delta_step': 0.0,'colsample_bytree': 1.0,'lambda': 1.0,'alpha': 1.0,'num_class': 3,'eval_metric': "mlogloss",'objective': "multi:softprob",'num_boost_round': 20,'early_stopping_rounds': 50,}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。