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
rBayesianOptimization
pacote torna a implementação do BO bastante diretaVocê pode usar o pacote de intercalação para fazer a pesquisa de espaço com hiperparâmetros, por meio de uma pesquisa em grade ou por meio de pesquisa aleatória .
fonte
Grade, Aleatório, Bayesiano e PSO ... etc.
Quando você trabalha com o XGBoost, tudo isso não importa, porque o XGB é realmente rápido, então você pode usar o Grid com muitos hiperparâmetros até encontrar a solução.
Uma coisa que pode ajudá-lo: use o método approx, ele sempre me dá o menor erro mse.
fonte