xgboost in R: wie funktioniert xgb.cv pass die optimalen Parameter in xgb.Zug
Ich habe die Erkundung der xgboost
- Paket in R und ging durch mehrere demos sowie tutorials sind aber noch verwirrt mich: nach über xgb.cv
zu tun, Kreuzvalidierung, wie sieht der optimale Parameter übergeben bekommen, um xgb.train
? Oder sollte ich die Berechnung der optimalen Parameter (wie nround
max.depth
) basierend auf der Ausgabe von xgb.cv
?
param <- list("objective" = "multi:softprob",
"eval_metric" = "mlogloss",
"num_class" = 12)
cv.nround <- 11
cv.nfold <- 5
mdcv <-xgb.cv(data=dtrain,params = param,nthread=6,nfold = cv.nfold,nrounds = cv.nround,verbose = T)
md <-xgb.train(data=dtrain,params = param,nround = 80,watchlist = list(train=dtrain,test=dtest),nthread=6)
InformationsquelleAutor der Frage snowneji | 2016-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht aus wie Sie falsch verstanden
xgb.cv
ist es kein parameter der Suche-Funktion. Es tut k-folds cross-validation, nichts mehr.In Ihrem code, es ändert nicht den Wert der
param
.Zu finden, die besten Parameter in R XGBoost, gibt es einige Methoden. Dies sind die 2 Methoden,
(1) Verwenden Sie
mlr
- Paket, http://mlr-org.github.io/mlr-tutorial/release/html/Es ist ein XGBoost + mlr Beispielcode in der Kaggle - Prudential Herausforderung,
Aber, dass code für die regression, nicht-Klassifizierung. Soweit ich weiß, gibt es keine
mlogloss
Metrik noch inmlr
- Paket, so müssen Sie den code, der mlogloss Messung von Grund auf selbst. CMIIW.(2) eine Zweite Methode, durch die manuelle Einstellung der Parameter wiederholen Sie die Schritte, Beispiel,
Dann finden Sie Sie die besten (minimum) mlogloss,
min_logloss
ist der minimale Wert von mlogloss, währendmin_logloss_index
ist der index (Runde).Müssen Sie wiederholen Sie den obigen Vorgang mehrere Male, jedes mal ändern Sie die Parameter manuell (
mlr
funktioniert das wiederholen für Sie). Bis schließlich Sie bekommen die besten globalen minimummin_logloss
.Hinweis: Sie es tun können, in einer Schleife von 100 oder 200 Iterationen, in denen für jede iteration legen Sie den Parameter-Wert zufällig. Dieser Weg, müssen Sie speichern Sie die besten
[parameters_list, min_logloss, min_logloss_index]
in Variablen oder in einer Datei.Hinweis: besser, zufällige Streuung von
set.seed()
für reproduzierbare Ergebnis. Verschiedene zufällige Streuung ergibt anderes Ergebnis. So speichern Sie[parameters_list, min_logloss, min_logloss_index, seednumber]
in der Variablen oder Datei.Sagen, dass schließlich Sie bekommen 3 Ergebnisse in 3 Iterationen/Wiederholungen:
Dann müssen Sie den Dritten Parameter (es hat Globale minimum
min_logloss
von1.9745
). Ihre beste index (nrounds)780
.Einmal erzielen Sie die besten Parameter, verwenden Sie es in der Ausbildung,
Ich glaube nicht, dass Sie brauchen
watchlist
im training, weil Sie getan haben, die cross-Validierung. Aber wenn Sie weiterhin verwenden möchtenwatchlist
ist es nur okay.Sogar noch besser, Sie verwenden können, frühzeitig zu stoppen in
xgb.cv
.Mit diesem code, wenn
mlogloss
Wert nicht gesunken ist in 8 Schritte, diexgb.cv
zu stoppen. Sie können Zeit sparen. Sie müssenmaximize
zuFALSE
weil Sie erwarten, dass mindestens mlogloss.Hier ist ein Beispiel code, mit 100 Iterationen der Schleife, und zufällig gewählte Parameter.
Mit diesem code, den Sie ausführen Kreuzvalidierung 100 mal, jedes mal mit zufälligen Parametern. Dann bekommen Sie den besten Parametersatz, der in der iteration mit mindestens
min_logloss
.Erhöhen Sie den Wert von
early.stop.round
im Falle Sie feststellen, dass es zu klein (zu früh beendet). Sie müssen auch die zufälligen Werte der parameter' limit auf der Grundlage der Daten Merkmale.Und für 100 oder 200 Iterationen, ich denke Sie ändern möchten
verbose
auf FALSE.Seite Hinweis:das Beispiel von random-Methode, können Sie es z.B. durch Bayes-Optimierung für die bessere Methode. Wenn Sie Python-version XGBoost, es ist eine gute hyperparameter Skript für XGBoost, https://github.com/mpearmain/BayesBoostum die Suche für die besten Parameter einer Bayes ' schen Optimierung.
Edit: ich möchte hinzufügen 3. die manuelle Methode, geschrieben von "Davut Polat" Kaggle master, in der Kaggle forum.
Edit: Wenn du weißt, Python und sklearn, können Sie auch GridSearchCV zusammen mit xgboost.XGBClassifier oder xgboost.XGBRegressor
InformationsquelleAutor der Antwort silo
Dies ist eine gute Frage und tolle Antworten von silo mit vielen details! Ich fand es sehr hilfreich für jemanden, der neu
xgboost
wie mich. Danke. Die Methode randomize und im Vergleich zu boundary ist sehr inspirierend. Gut zu bedienen und gut zu wissen. Jetzt im Jahr 2018 eine leichte überarbeitung benötigt werden, zum Beispielearly.stop.round
sollteearly_stopping_rounds
. Die Ausgabemdcv
organisiert ist etwas anders:Und hängt von der Anwendung ab (linear, Logistik,etc...), die
objective
eval_metric
und Parameter entsprechend angepasst.Für den Komfort von Personen ausgeführt wird, die eine regression, hier ist die leicht angepasste version des Codes (die meisten sind die gleichen wie oben).
InformationsquelleAutor der Antwort Yang Liu