Ilekroć pracuję z xgboost, często dokonuję własnego wyszukiwania parametrów homebrew, ale możesz to zrobić za pomocą pakietu caret, takiego jak wspomniany wcześniej KrisP.
- Wstawka korektorska
Zobacz tę odpowiedź na Cross Validated, aby uzyskać dokładne wyjaśnienie, jak korzystać z pakietu Caret do wyszukiwania hiperparametrów na xgboost.
Jak dostroić hiperparametry drzew xgboost?
- Niestandardowe wyszukiwanie w siatce
Często zaczynam od kilku założeń opartych na slajdach Owena Zhanga na temat wskazówek dotyczących analizy danych P. 14
Tutaj możesz zobaczyć, że przede wszystkim musisz dostroić próbkowanie wierszy, próbkowanie kolumn i być może maksymalną głębokość drzewa. Oto jak wykonuję niestandardowe próbkowanie wierszy i próbkowanie kolumn w poszukiwaniu problemu, nad którym obecnie pracuję:
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))
})
W połączeniu z pewną magią ggplot2, korzystając z wyników tej funkcji zastosuj, możesz wykreślić graficzną reprezentację wyszukiwania.
Na tym wykresie jaśniejsze kolory oznaczają mniejszy błąd, a każdy blok reprezentuje unikalną kombinację próbkowania kolumn i próbkowania wierszy. Więc jeśli chcesz przeprowadzić dodatkowe wyszukiwanie powiedzmy eta (lub głębokość drzewa), skończysz z jednym z tych wykresów dla każdego testowanego parametru eta.
Widzę, że masz inną metrykę oceny (RMPSE), wystarczy podłączyć ją do funkcji weryfikacji krzyżowej, a uzyskasz pożądany wynik. Poza tym nie martwiłbym się zbytnio o dostrajanie innych parametrów, ponieważ nie poprawi to zbytnio wydajności, a przynajmniej nie tak bardzo w porównaniu do poświęcania więcej czasu na projektowanie funkcji lub czyszczenie danych.
- Inne
Możliwe jest również wyszukiwanie losowe i wybór parametrów bayesowskich, ale jeszcze ich nie znalazłem / nie znalazłem.
Oto dobry podkład do bayesowskiej optymalizacji hiperparametrów autorstwa Maxa Kuhna, twórcy Caret.
http://blog.revolutionanalytics.com/2016/06/bayesian-optimization-of-machine-learning-models.html