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.