Ich befolge derzeit die Folien von der folgenden link. Ich bin auf Folie 121/128 und würde gerne wissen, wie man die AUC repliziert. Der Autor hat nicht erklärt, wie man das macht (das gleiche auch auf Folie 124). Zweitens wird auf Folie 125 der folgende Code erzeugt;Plotten der AUC von einem xgboost Modell in R
bestRound = which.max(as.matrix(cv.res)[,3]-as.matrix(cv.res)[,4])
bestRound
Ich erhalte den folgenden Fehler;
Fehler in as.matrix (cv.res) [2]: Index
außerhalb der Grenzen
Die Daten für den folgenden Code aus here und ich habe den Code erzeugt heruntergeladen werden für deine Referenz
Frage: Wie kann ich die AUC als Autor erstellen und warum ist der Index außerhalb der Grenzen?
----- -------Code
# Kaggle Winning Solutions
train <- read.csv('train.csv', header = TRUE)
test <- read.csv('test.csv', header = TRUE)
y <- train[, 1]
train <- as.matrix(train[, -1])
test <- as.matrix(test)
train[1, ]
#We want to determin who is more influencial than the other
new.train <- cbind(train[, 12:22], train[, 1:11])
train = rbind(train, new.train)
y <- c(y, 1 - y)
x <- rbind(train, test)
(dat[,i]+lambda)/(dat[,j]+lambda)
A.follow.ratio = calcRatio(x,1,2)
A.mention.ratio = calcRatio(x,4,6)
A.retweet.ratio = calcRatio(x,5,7)
A.follow.post = calcRatio(x,1,8)
A.mention.post = calcRatio(x,4,8)
A.retweet.post = calcRatio(x,5,8)
B.follow.ratio = calcRatio(x,12,13)
B.mention.ratio = calcRatio(x,15,17)
B.retweet.ratio = calcRatio(x,16,18)
B.follow.post = calcRatio(x,12,19)
B.mention.post = calcRatio(x,15,19)
B.retweet.post = calcRatio(x,16,19)
x = cbind(x[,1:11],
A.follow.ratio,A.mention.ratio,A.retweet.ratio,
A.follow.post,A.mention.post,A.retweet.post,
x[,12:22],
B.follow.ratio,B.mention.ratio,B.retweet.ratio,
B.follow.post,B.mention.post,B.retweet.post)
AB.diff = x[,1:17]-x[,18:34]
x = cbind(x,AB.diff)
train = x[1:nrow(train),]
test = x[-(1:nrow(train)),]
set.seed(1024)
cv.res <- xgb.cv(data = train, nfold = 3, label = y, nrounds = 100, verbose = FALSE,
objective = 'binary:logistic', eval_metric = 'auc')
Plot die AUC Graph hier
set.seed(1024)
cv.res = xgb.cv(data = train, nfold = 3, label = y, nrounds = 3000,
objective='binary:logistic', eval_metric = 'auc',
eta = 0.005, gamma = 1,lambda = 3, nthread = 8,
max_depth = 4, min_child_weight = 1, verbose = F,
subsample = 0.8,colsample_bytree = 0.8)
Hier ist der Bruch in dem Code, den ich über kommen
#bestRound: - subscript out of bounds
bestRound <- which.max(as.matrix(cv.res)[,3]-as.matrix(cv.res)[,4])
bestRound
cv.res
cv.res[bestRound,]
set.seed(1024) bst <- xgboost(data = train, label = y, nrounds = 3000,
objective='binary:logistic', eval_metric = 'auc',
eta = 0.005, gamma = 1,lambda = 3, nthread = 8,
max_depth = 4, min_child_weight = 1,
subsample = 0.8,colsample_bytree = 0.8)
preds <- predict(bst,test,ntreelimit = bestRound)
result <- data.frame(Id = 1:nrow(test), Choice = preds)
write.csv(result,'submission.csv',quote=FALSE,row.names=FALSE)
Vielen Dank die AUC-Plot funktioniert. "Um Kreuzvalidierungsvorhersagen zu erhalten, muss beim Aufruf von xgb.cv die Vorhersage = T angegeben werden", wo ich falsch lag. – user113156
Ein weiterer Punkt, den ich gerne wiederholen möchte, war auf Folie 121/128: "Wir können den AUC-Trend bei Trainings- und Testsets sehen." Wie kann ich das auf dem Testgerät replizieren? und was ist der Zweck, dies auf dem Test-Set zu replizieren? – user113156
@ user113156 Es gibt viel mehr zum Training xgboost Modelle als dies. Und Menschen haben Präferenzen in der Art, wie sie Dinge tun. Im Allgemeinen werden Hyperparameter, Datentransformationen, Aufwärts-/Abwärtsabtastung, Variablenauswahl, Wahrscheinlichkeitsschwellenoptimierung, Kostenfunktionsauswahl während der Kreuzvalidierung durchgeführt. Normalerweise nicht nur eine Wiederholung von CV, sondern zum Beispiel 5 Wiederholungen von 3-4 facher CV. Und wenn Sie das Beste aus all diesen Dingen herausholen, trainieren Sie ein Modell mit allen Zugdaten und validieren auf dem Testset. Dies alles wird getan, um eine Überanpassung zu vermeiden. – missuse