Ogni volta che lavoro con xgboost faccio spesso la mia ricerca di parametri homebrew, ma puoi farlo con il pacchetto caret e KrisP appena menzionato.
- segno di omissione
Vedi questa risposta su Convalida incrociata per una spiegazione approfondita su come usare il pacchetto caret per la ricerca dell'iperparametro su xgboost.
Come ottimizzare gli iperparametri degli alberi xgboost?
- Ricerca griglia personalizzata
Comincio spesso con alcune ipotesi basate sulle diapositive di Owen Zhang sui suggerimenti per la scienza dei dati P. 14
Qui puoi vedere che dovrai principalmente ottimizzare il campionamento delle righe, il campionamento delle colonne e forse la profondità massima dell'albero. Questo è il modo in cui eseguo un campionamento di righe personalizzato e un campionamento di colonne per cercare un problema a cui sto lavorando in questo momento:
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))
})
E combinato con un po 'di magia ggplot2 usando i risultati di quella funzione di applicazione è possibile tracciare una rappresentazione grafica della ricerca.
In questo grafico i colori più chiari rappresentano un errore inferiore e ogni blocco rappresenta una combinazione unica di campionamento di colonne e campionamento di righe. Quindi, se si desidera eseguire una ricerca aggiuntiva di say eta (o profondità dell'albero), si finirà con uno di questi grafici per ciascun parametro eta testato.
Vedo che hai una diversa metrica di valutazione (RMPSE), basta collegarla nella funzione di convalida incrociata e otterrai il risultato desiderato. Oltre a ciò, non mi preoccuperei troppo di mettere a punto gli altri parametri, perché così facendo non migliorerai troppo le prestazioni, almeno non tanto rispetto a dedicare più tempo a progettare funzionalità o pulire i dati.
- Altri
Sono anche possibili la ricerca casuale e la selezione dei parametri bayesiani, ma non ho ancora effettuato / trovato una loro implementazione.
Ecco un buon primer sull'ottimizzazione bayesiana degli iperparametri di Max Kuhn, creatore di caret.
http://blog.revolutionanalytics.com/2016/06/bayesian-optimization-of-machine-learning-models.html