Understanding num_classes für xgboost in R

Ich habe große Probleme herauszufinden, wie ich die num_classes für xgboost richtig einstellen kann.

Ich habe ein Beispiel mit den Irisdaten

df <- iris

y <- df$Species
num.class = length(levels(y))
levels(y) = 1:num.class
head(y)

df <- df[,1:4]

y <- as.matrix(y)
df <- as.matrix(df)

param <- list("objective" = "multi:softprob",    
          "num_class" = 3,    
          "eval_metric" = "mlogloss",    
          "nthread" = 8,   
          "max_depth" = 16,   
          "eta" = 0.3,    
          "gamma" = 0,    
          "subsample" = 1,   
          "colsample_bytree" = 1,  
          "min_child_weight" = 12)

model <- xgboost(param=param, data=df, label=y, nrounds=20)

Dies gibt einen Fehler zurück

Error in xgb.iter.update(bst$handle, dtrain, i - 1, obj) : 
SoftmaxMultiClassObj: label must be in [0, num_class), num_class=3 but found 3 in label

Wenn ich die num_class auf 2 ändere, erhalte ich den gleichen Fehler. Wenn ich die num_class auf 4 erhöhe, wird das Modell ausgeführt, aber ich erhalte 600 vorhergesagte Wahrscheinlichkeiten zurück, was für 4 Klassen sinnvoll ist.

Ich bin mir nicht sicher, ob ich einen Fehler mache oder nicht verstehe, wie xgboost funktioniert. Jede Hilfe wäre dankbar.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage