2017-10-31 12 views
0

Ich erhalte Fehler in [.default (cm, 2, 2): Index außerhalb der Grenzen Umsetzung Kreuzvalidierung für xgboost. Meine Datensatzstruktur ist wie folgt:Index außerhalb der Grenzen bei der Umsetzung Kreuzvalidierung in r

'data.frame': 889 obs. of 7 variables: 
$ Survived: Factor w/ 2 levels "0","1": 1 2 2 2 1 1 1 1 2 2 ... 
$ Pclass : int 3 1 3 1 3 3 1 3 3 2 ... 
$ Sex  : num 1 2 2 2 1 1 1 1 2 2 ... 
$ SibSp : int 1 1 0 1 0 0 0 3 0 1 ... 
$ Parch : int 0 0 0 0 0 0 0 1 2 0 ... 
$ Fare : num 7.25 71.28 7.92 53.1 8.05 ... 
$ Embarked: num 3 1 3 3 3 2 3 3 3 1 ... 
- attr(*, "na.action")=Class 'omit' Named int [1:2] 62 830 
    .. ..- attr(*, "names")= chr [1:2] "62" "830" 

Zusammenfassung meiner Daten-Set ist als unten:

Survived  Pclass   Sex   SibSp   Parch  
0:549 Min. :1.000 Min. :1.000 Min. :0.0000 Min. :0.0000 
1:340 1st Qu.:2.000 1st Qu.:1.000 1st Qu.:0.0000 1st Qu.:0.0000 
      Median :3.000 Median :1.000 Median :0.0000 Median :0.0000 
      Mean :2.312 Mean :1.351 Mean :0.5242 Mean :0.3825 
      3rd Qu.:3.000 3rd Qu.:2.000 3rd Qu.:1.0000 3rd Qu.:0.0000 
      Max. :3.000 Max. :2.000 Max. :8.0000 Max. :6.0000 
     Fare   Embarked  
Min. : 0.000 Min. :1.000 
1st Qu.: 7.896 1st Qu.:2.000 
Median : 14.454 Median :3.000 
Mean : 32.097 Mean :2.535 
3rd Qu.: 31.000 3rd Qu.:3.000 
Max. :512.329 Max. :3.000 

Fehler ausgelöst wird, wenn die folgenden Code Implementierung:

library(caret) 
folds = createFolds(traindataset$Survived, k = 10) 
cv = lapply(folds, function(x) { 
    training_fold = traindataset[-x, ] 
    test_fold = traindataset[x, ] 
    classifier = xgboost(data = as.matrix(traindataset[-1]), label = traindataset$Survived, nrounds = 10) 
    y_pred = predict(classifier, newdata = as.matrix(test_fold[-1])) 
    y_pred = (y_pred >= 0.5) 
    cm = table(test_fold[, 1], y_pred) 
    accuracy = (cm[1,1] + cm[2,2])/(cm[1,1] + cm[2,2] + cm[1,2] + cm[2,1]) 
    return(accuracy) 
}) 

Bitte beachten Sie, dass ich konvertiert Überlebt von einer ganzen Zahl von 0 und 1 zu einem Faktor für Klassifizierungszwecke. Zu meiner Überraschung, als Survived eine ganze Zahl war, funktionierte der Code, aber wenn es ein Faktor ist, bekomme ich diesen Fehler.

Schätzen Sie jede Hilfe. Vielen Dank.

Antwort

0

Ich dachte eine Lösung für die Frage. Entschuldigung für die Unannehmlichkeiten.

Hier wird das Problem durch die Umwandlung der Zielvariablen in den Faktor verursacht. Ich gehe davon aus, dass xgboost numerische Eingaben und keine Faktoren benötigt, wodurch das Problem entsteht.

Verwandte Themen