Sempre que trabalho com o xgboost, costumo fazer minha própria pesquisa de parâmetros de homebrew, mas você pode fazê-lo com o pacote de interpolação, assim como o KrisP que acabei de mencionar.
- Caret
Veja esta resposta em Validação cruzada para obter uma explicação completa sobre como usar o pacote de acento circunflexo para pesquisa por hiperparâmetro no xgboost.
Como ajustar os hiperparâmetros das árvores xgboost?
- Pesquisa em grade personalizada
Costumo começar com algumas suposições baseadas nos slides de Owen Zhang sobre dicas para ciência de dados P. 14
Aqui você pode ver que você precisará ajustar a amostragem de linha, a coluna e talvez a profundidade máxima da árvore. É assim que faço uma amostragem de linha personalizada e uma pesquisa de coluna para encontrar um problema no qual estou trabalhando no 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 combinado com alguma mágica do ggplot2, usando os resultados dessa função de aplicação, você pode plotar uma representação gráfica da pesquisa.
Neste gráfico, cores mais claras representam um erro menor e cada bloco representa uma combinação única de amostragem de coluna e amostragem de linha. Portanto, se você deseja executar uma pesquisa adicional de say eta (ou profundidade da árvore), você terminará com um desses gráficos para cada eta parâmetros testados.
Vejo que você tem uma métrica de avaliação diferente (RMPSE), basta inseri-la na função de validação cruzada e obterá o resultado desejado. Além disso, eu não me preocuparia muito com o ajuste fino dos outros parâmetros, pois isso não melhoraria muito o desempenho, pelo menos não muito comparado a gastar mais tempo projetando recursos ou limpando os dados.
- Outras
A pesquisa aleatória e a seleção de parâmetros bayesianos também são possíveis, mas ainda não fiz / encontrei uma implementação delas.
Aqui está uma boa cartilha sobre otimização bayesiana de hiperparâmetros pelo criador de caret de Max Kuhn.
http://blog.revolutionanalytics.com/2016/06/bayesian-optimization-of-machine-learning-models.html