2016-04-09 15 views
-1

Fast alle maschinellen Lernpakete/-funktionen in R ermöglichen es Ihnen, während des Trainings eines Modells Vergleichs-Leistungsmetriken zu erhalten.Ist es möglich, das kreuzvalidierte Modell mit xgboost (xgb.cv) in R zu validieren und zu speichern?

Von dem, was ich sagen kann, die einzige Möglichkeit, Kreuzvalidierung mit xgboost zu tun ist, um ein Setup xgb.cv Anweisung wie folgt:

clf <- xgb.cv(  params    = param, 
        data    = dtrain, 
        nrounds    = 1000, 
        verbose    = 1, 
        watchlist   = watchlist, 
        maximize   = FALSE, 
        nfold    = 2, 
        nthread    = 2, 
        prediction   = T 
) 

aber auch mit dieser Option von prediction = T sind Sie lediglich die Vorhersage immer ergibt sich aus Ihren Trainingsdaten. Ich sehe keine Möglichkeit, das resultierende Objekt (clf in diesem Beispiel) in einer predict Anweisung mit neuen Daten zu verwenden.

Ist mein Verständnis genau und gibt es irgendwelche Probleme?

+0

Ein Kommentar auf der Downvote würde geschätzt werden, so dass ich die Post besser machen kann. –

+0

Nicht der Downvoter, aber die Antwort wäre nicht einfach 'xgb.save (bst," xgboost.model ")' wo ist bst das Ergebnis von 'xgb.train()' und dann mit einem neuen Dataset geladen und vorhergesagt? Das Speichern der Ergebnisse der Kreuzvalidierung scheint für mein Verständnis Ihrer Ziele nicht sinnvoll zu sein. –

Antwort

1

Ich glaube, Ihr Verständnis ist korrekt, und es gibt keine Einstellung zum Speichern der Modelle aus Kreuzvalidierung.

Für mehr Kontrolle über die Kreuzvalidierung können Sie xgboost Modelle mit caret (siehe weitere Einzelheiten über die trainControl Funktion hier http://topepo.github.io/caret/training.html)

Doch trainieren, wenn ich nicht irre, caret eine Option fehlt auch jedes CV-Modell zu speichern um sie später zu prognostizieren (Sie können jedoch auch manuell Metriken angeben, an denen Sie sie auswerten möchten). Je nachdem, aus welchem ​​Grund Sie die CV-Modelle verwenden, um neue Daten vorherzusagen, können Sie entweder 1) die Indizes der CV-Modelle aus dem endgültigen Modell abrufen, um dieses bestimmte Modell (ohne Gegenvalidierung, aber mit demselben Ausgangswert) erneut zu trainieren nur, dass Teil der Daten (von der $control$index Liste innerhalb des Objekts durch caret ‚erzeugte s train Funktion:

> library(MASS) # For the Boston dataset 
> library(caret) 
> ctrl <- trainControl(method = "cv", number = 3, savePred=T) 
> mod <- train(medv~., data = Boston, method = "xgbLinear", trControl = ctrl) 
> str(mod$control$index) 

List of 3 
$ Fold1: int [1:336] 2 3 4 6 8 9 13 14 17 19 ... 
$ Fold2: int [1:338] 1 2 4 5 6 7 9 10 11 12 ... 
$ Fold3: int [1:338] 1 3 5 7 8 10 11 12 14 15 ... 

oder 2) manuell Kreuzvalidierung mit lapply oder for Schleife alle Modelle speichern erstellen. Die createFolds Familie von Funktionen in caret ist ein nützliches Werkzeug für die Auswahl der Kreuzvalidierung Falten.

+0

Danke für Ihre Antwort. Ich versuche nur, ein * Modell zu bekommen, das ich für die Vorhersage verwenden kann, nicht für eine bestimmte CV-Faltung. Ich möchte einfach nicht die Zeit verdoppeln, die ich Trainingsmodelle verbringe. Eigentlich mit "Caret" bieten fast alle Modelltypen diese Funktionalität. Der Grund, warum ich Caret nicht für eine Lösung hielt, war, dass das letzte Mal, als ich xgb überprüfte, nur mit extrem eingeschränkter Funktionalität implementiert worden war. Es scheint, dass sie die Tuning-Fähigkeiten im vergangenen Jahr stark verbessert haben. Lassen Sie mich das überprüfen, und ich kann dies als die Antwort markieren, je nachdem, was ich finde. –

Verwandte Themen