2017-08-24 3 views
1

avant que je suis assez nouveau à la fois xgboost et R.xgboost erreur de classification multinomiale: « étiquette et la taille prédiction ne correspond aux »

J'utilise xgboost dans R pour effectuer une classification multinomiale sur mes données dtrain. L'étiquette J'utilise a six niveaux, de sorte que mon code ressemble à ceci:

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) 

Cela me jette l'erreur suivante:

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. 

J'ai essayé de mettre num_class = 7, qui jette cette erreur:

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 

Que se passe-t-il ici? Est-ce que num_class doit être supérieur à label_error ou égal à celui-ci?

+0

pls utilisent 'dput()' partager vos données, ... – BigDataScientist

+0

L'avez-vous surmonté à la fin? J'ai trouvé une solution qui a fonctionné pour moi. Spécifiquement pour ma variable y, 'set y <- y - 1' (je ne vois pas de variable cible dans votre appel à xgb) https://stackoverflow.com/questions/36086529/understanding-num-classes-for- xgboost-in-r –

Répondre

-1

si le nombre de niveaux dans la variable dépendante est alors 6 = 7. donner num_class Signification = spécifier num_class niveaux (Variable dépendante) + 1