Frage

Xgboost hat einen großartigen Job gemacht, wenn es darum geht, sowohl kategoriale als auch kontinuierliche abhängige Variablen zu behandeln. Aber wie wähle ich die optimierten Parameter für ein Xgboost -Problem aus?

Auf diese Weise habe ich die Parameter für ein kürzliches Kaggle -Problem angewendet:

param <- list(  objective           = "reg:linear", 
                booster = "gbtree",
                eta                 = 0.02, # 0.06, #0.01,
                max_depth           = 10, #changed from default of 8
                subsample           = 0.5, # 0.7
                colsample_bytree    = 0.7, # 0.7
                num_parallel_tree   = 5
                # alpha = 0.0001, 
                # lambda = 1
)


clf <- xgb.train(   params              = param, 
                    data                = dtrain, 
                    nrounds             = 3000, #300, #280, #125, #250, # changed from 300
                    verbose             = 0,
                    early.stop.round    = 100,
                    watchlist           = watchlist,
                    maximize            = FALSE,
                    feval=RMPSE
)

Alles, was ich tue, um zu experimentieren, ist zufällig auszuwählen (mit Intuition) ein weiterer Satz von Parametern, um das Ergebnis zu verbessern.

Gibt es sowieso die Auswahl der optimierten (besten) Parametermenge?

(Antworten können in jeder Sprache sein. Ich suche nur nach der Technik)

War es hilfreich?

Lösung

Immer wenn ich mit Xgboost arbeite, mache ich oft meine eigene Homebrew -Parameter -Suche, aber Sie können dies auch mit dem Care Package machen, wie Krisp, der gerade erwähnt wird.

  1. Pflege

In dieser Antwort finden Sie eine gründliche Erklärung für die Verwendung des CARET -Pakets für die Hyperparameter -Suche auf XGBOOST.Wie kann man Hyperparameter von Xgboost -Bäumen einstellen?

  1. Benutzerdefinierte Rastersuche

Ich beginne oft mit ein paar Annahmen, die darauf beruhen Owen ZhangEs gleitet weiter Tipps für die Datenwissenschaft S. 14

enter image description here

Hier können Sie sehen, dass Sie meistens Zeilenabtastung, Säulenabtast und möglicherweise maximale Baumtiefe einstellen müssen. So mache ich eine benutzerdefinierte Stichprobe- und Spalten -Stichproben -Suche nach einem Problem, an dem ich gerade arbeite:

searchGridSubCol <- expand.grid(subsample = c(0.5, 0.75, 1), 
                                colsample_bytree = c(0.6, 0.8, 1))
ntrees <- 100

#Build a xgb.DMatrix object
DMMatrixTrain <- xgb.DMatrix(data = yourMatrix, label = yourTarget)

rmseErrorsHyperparameters <- apply(searchGridSubCol, 1, function(parameterList){

    #Extract Parameters to test
    currentSubsampleRate <- parameterList[["subsample"]]
    currentColsampleRate <- parameterList[["colsample_bytree"]]

    xgboostModelCV <- xgb.cv(data =  DMMatrixTrain, nrounds = ntrees, nfold = 5, showsd = TRUE, 
                           metrics = "rmse", verbose = TRUE, "eval_metric" = "rmse",
                           "objective" = "reg:linear", "max.depth" = 15, "eta" = 2/ntrees,                               
                           "subsample" = currentSubsampleRate, "colsample_bytree" = currentColsampleRate)

    xvalidationScores <- as.data.frame(xgboostModelCV)
    #Save rmse of the last iteration
    rmse <- tail(xvalidationScores$test.rmse.mean, 1)

    return(c(rmse, currentSubsampleRate, currentColsampleRate))

})

Und kombiniert mit einigen GGPLOT2 -Magie mit den Ergebnissen dieser Anwendungsfunktion können Sie eine grafische Darstellung der Suche zeichnen.My xgboost hyperparameter search

In diesem Diagramm stellen leichtere Farben einen geringeren Fehler dar und jeder Block stellt eine eindeutige Kombination aus Säulenabtastung und Zeilenabtastung dar. Wenn Sie also eine zusätzliche Suche nach Say ETA (oder Baumtiefe) durchführen möchten, erhalten Sie eine dieser Diagramme für jede getestete ETA -Parameter.

Ich sehe, Sie haben eine andere Bewertungsmetrik (RMPSE), schließen Sie diese in die Quervalidierungsfunktion an und Sie erhalten das gewünschte Ergebnis. Außerdem würde ich mir keine Sorgen um die Feinabstimmung der anderen Parameter machen, da dies die Leistung nicht zu stark verbessert, zumindest nicht so sehr im Vergleich zu mehr Zeit für technische Funktionen oder die Reinigung der Daten.

  1. Andere

Eine zufällige Such- und Bayes'sche Parameterauswahl sind ebenfalls möglich, aber ich habe eine Implementierung von ihnen noch nicht vorgenommen/gefunden.

Hier ist eine gute Grundierung für die Bayes'sche Optimierung von Hyperparametern durch Max Kuhn -Schöpfer von Caret.

http://blog.revolutionanalytics.com/2016/06/bayesian-optimization-of-machine-learning-models.html

Andere Tipps

Sie können das Hauspaket verwenden, um eine Hyperparameter -Raumsuche durchzuführen, entweder über a Gittersuche oder durch Zufällige Suche.

Gitter, zufällig, Bayesian und PSO ... etc.

Wenn Sie mit XGBOOST arbeiten, spielt dies keine Rolle, da XGB sehr schnell ist, sodass Sie das Netz mit vielen Hyperparametrs verwenden können, bis Sie Ihre Lösung finden.

Eine Sache, die Ihnen helfen kann: Verwenden Sie die ungefähre Methode, sie gibt mir immer den niedrigsten MSE -Fehler.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit datascience.stackexchange
scroll top