繁体   English   中英

xgboost多项分类错误:“标签和预测大小不匹配”

[英]xgboost multinomial classification error: “label and prediction size not match”

转发我对xgboost和R都很新。

我在R中使用xgboost对我的数据dtrain执行多项式分类。 我使用的标签有六个级别,所以我的代码如下所示:

param1 <- list(objective = "multi:softprob"
          , num_class = 6
          , booster = "gbtree"  
          , eta = 0.5
          , max.depth = 7
          , min_child_weight = 10
          , max_delta_step = 5
          , subsample = 0.8
          , colsample_bytree = 0.8
          , lambda  = 3 # L2
          , alpha = 5 # L1
)
set.seed(2016)    
xgbcv1 <- xgb.cv(params = param1, data = dtrain, nround = 3000, nfold = 3,
             metrics = list("error", "auc"), maximize = T, 
             print_every_n = 10, early_stopping_rounds = 10)

这会引发以下错误:

Error in xgb.iter.update(fd$bst, fd$dtrain, iteration - 1, obj) : 
amalgamation/../src/objective/multiclass_obj.cc:75: Check failed: 
label_error >= 0 && label_error < nclass SoftmaxMultiClassObj: label must be in [0, num_class), num_class=6 but found 6 in label.

所以我尝试设置num_class = 7 ,这会抛出此错误:

Error in xgb.iter.eval(fd$bst, fd$watchlist, iteration - 1, feval) : 
amalgamation/../src/metric/elementwise_metric.cc:28: Check failed: 
(preds.size()) == (info.labels.size()) label and prediction size not match, hint: use merror or mlogloss for multi-class classification

这里发生了什么? num_class是否需要大于label_error或等于它?

XGboost算法要求类标签从0开始并按顺序增加到最大类数。 这有点不方便,因为您需要跟踪哪个类名与哪个标签相关。

将Class目标变量转换为numeric,并用1减去它。

df$class_numeric<-as.numeric(df$class_target)
df<-df%>%mutate(class_numeric=class_numeric-1)

如果因变量中的级别数为6,则给出num_class = 7.含义指定num_class = levels(从属变量)+ 1

尝试:

set metrics = list("mlogloss")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM