Eu tenho dados de desequilíbrio de classe e quero ajustar os hiperparâmetros da trança impulsionada usando xgboost.
Questões
- Existe um equivalente de gridsearchcv ou randomsearchcv para xgboost?
- Caso contrário, qual é a abordagem recomendada para ajustar os parâmetros do xgboost?
machine-learning
cross-validation
xgboost
boosting
GeorgeOfTheRF
fonte
fonte
xgboost(max.depth)
ouxgb.train(max_depth)
? O xgboost usa inconsistentemente ponto vs sublinhado para o parâmetro em lugares diferentes? Ou eles são convertidos?Respostas:
Como a interface para
xgboost
incaret
foi alterada recentemente, eis um script que fornece uma explicação totalmente comentada do usocaret
para ajustarxgboost
hiperparâmetros.Para isso, usarei os dados de treinamento da competição Kaggle "Give Me Some Credit" .
1. Ajustando um
xgboost
modeloNesta seção, nós:
xgboost
modelo com hiperparâmetros arbitráriosxgb.cv
)Aqui está um código para fazer isso.
Aqui está a aparência da AUC de teste versus treinamento:
2. Pesquisa por hiperparâmetro usando
train
Para a pesquisa de hiperparâmetros, executamos as seguintes etapas:
data.frame
combinação única de parâmetros para a qual queremos modelos treinados.Aqui está um código que mostra como fazer isso.
Por fim, você pode criar um gráfico de bolhas para a AUC sobre as variações
eta
emax_depth
:fonte
xgboost
já existe suporte para a maioria dos parâmetros, em particular o suporte paragamma
é novo. Aqui está uma lista completa dos parâmetros suportados.scale_pose_weight
para classificação desequilibrada. Você pode fornecer detalhes sobre como? Obrigado!scale_pos_weight
agora está documentado na documentação dos parâmetros .scale_pos_weight
não é um parâmetro de ajuste de cursor, mas você pode comparar manualmente. No meu caso, usando o peso passou a ter pouco efeito (classificação binária,> 20% de positivos)O pacote Caret incorporou o xgboost.
Saída de amostra
Uma desvantagem que vejo é que outros parâmetros do xgboost, como a subamostra, etc, não são suportados pelo sinal de intercalação atualmente.
Editar
Agora, gama, colsample_bytree, min_child_weight e subamostra etc (junho de 2017) podem ser ajustados diretamente usando Caret. Basta adicioná-los na parte da grade do código acima para fazê-lo funcionar. Obrigado usεr11852 por destacá-lo no comentário.
fonte
caret
agora (Fev-2017) suporta parâmetros adicionais paragamma
,colsample_bytree
,min_child_weight
esubsample
. (De maneira eficaz, você pode ajustar quase tudo - dado tempo)Sei que essa é uma pergunta antiga, mas uso um método diferente dos acima. Eu uso a função BayesianOptimization do pacote Bayesian Optimization para encontrar parâmetros ideais. Para fazer isso, primeiro crie dobras de validação cruzada e, em seguida, crie uma função
xgb.cv.bayes
que tenha como parâmetros os hiper parâmetros de aumento que você deseja alterar. Neste exemplo, estou afinandomax.depth, min_child_weight, subsample, colsample_bytree, gamma
. Você então chamaxgb.cv
essa função com os hiper parâmetros configurados nos parâmetros de entrada dexgb.cv.bayes
. Então você chamaBayesianOptimization
com osxgb.cv.bayes
intervalos desejados e os hiper parâmetros de aumento.init_points
é o número de modelos iniciais com hiper parâmetros obtidos aleatoriamente nos intervalos especificados en_iter
é o número de rodadas de modelos após os pontos iniciais. A função gera todos os parâmetros de reforço e a AUC de teste.fonte
Esta é uma pergunta mais antiga, mas pensei em compartilhar como ajustar os parâmetros do xgboost. Originalmente, pensei em usar o sinal de intercalação para isso, mas recentemente encontrei um problema ao lidar com todos os parâmetros e valores ausentes. Eu também estava pensando em escrever um loop iterativo através de diferentes combinações de parâmetros, mas queria que ele fosse executado em paralelo e exigiria muito tempo. O uso do gridSearch do pacote NMOF forneceu o melhor dos dois mundos (todos os parâmetros e também o processamento paralelo). Aqui está um código de exemplo para classificação binária (funciona no Windows e Linux):
fonte