Coleção aprendizado
XGBoost
Ajusta árvores sequencialmente, cada rodada acrescentando correções ao conjunto para regressão ou classificação.
O que o bloco faz
Ajusta árvores sequencialmente, cada rodada acrescentando correções ao conjunto para regressão ou classificação.
Antes de continuar
Termos que esta página usa, em poucas palavras. As definições completas estão no glossário.
- Fator
- Uma variável explicativa categórica cujo efeito se quer estudar, como adubo, cultivar ou dose. Num experimento fatorial, dois ou mais fatores são combinados.
- Treino e teste
- Dividir os dados em uma parte para ajustar o modelo (treino) e outra, guardada, para medir o desempenho (teste). O teste só é honesto se o modelo nunca o viu durante o ajuste.
- Sobreajuste
- Quando o modelo aprende o ruído dos dados de treino junto com o padrão, e por isso acerta muito no treino e pouco em dados novos. Modelos mais flexíveis correm mais esse risco.
- Validação cruzada
- Repetir a divisão treino/teste várias vezes, cada vez deixando uma parte diferente dos dados de fora, e fazer a média do desempenho. Dá uma estimativa mais estável do erro em dados novos do que uma única divisão.
- Hiperparâmetro
- Uma configuração do método escolhida antes do ajuste, como a profundidade de uma árvore ou o número de árvores de uma floresta. Costuma ser escolhida por validação cruzada, nunca olhando o conjunto de teste.
Quando usar
Use para modelos de árvores impulsionadas e compare o resultado no mesmo conjunto de teste. Requer xgboost.
Pressupostos
O bloco recebe só o treino: o teste foi separado antes (no
ml/split) e não entra em nenhuma escolha — nem de preditores, nem de hiperparâmetros, nem de tratamento de faltantes. A saída teste doml/splitvem marcada e é recusada aqui (tr_ml_error_test_leak); a marca sobrevive ao cache e a filtros, mas não a uma divisão feita por fora nem a juntar treino e teste — nesses casos o bloco não tem como saber o que recebeu.Se falhar: Refaça o fluxo com o
ml/splitno início; a saída teste só vai aomodels/predict. Hiperparâmetros se escolhem noml/tune, com validação cruzada dentro do treino.Nenhum preditor revela a resposta (identificador, código que a embute, medida tomada depois do desfecho).
Verificar:Resumo
Se falhar: Tire essas colunas de
preditores(ou com odata/selectantes doml/split).As linhas são independentes e vêm da mesma população em que o modelo vai ser usado: sem ordem no tempo, sem várias linhas do mesmo indivíduo, lote ou área repartidas entre treino e teste.
Se falhar: Com tempo, use
estrategia = "temporal"noml/splite noml/tune(teste sempre posterior ao treino); com indivíduos, lotes ou áreas repetidos,estrategia = "grupo"(nenhum grupo dos dois lados).Os preditores são numéricos, finitos e sem faltantes — o bloco recusa o resto. Fatores entram só depois de codificados em números.
Verificar:Resumo
Se falhar: Trate faltantes com o
data/drop_naou odata/replace_nae codifique fatores com odata/mutate. Uma imputação que usa estatísticas (média, mediana) deve sair só do treino.O número de rodadas (
nrounds), a profundidade e a taxa de aprendizado (eta) controlam o sobreajuste. O bloco não faz parada antecipada: usa exatamentenrounds.Verificar:Ajustar hiperparâmetrosAvaliar previsões
Se falhar: Escolha os três juntos no
ml/tune(eta menor pede mais rodadas); nunca pare pelo desempenho no teste.A importância (no
models/importance) é o Gain relativo: a fração do ganho total das divisões que usam cada preditor (soma 1), medida no treino: descreve o ajuste, não o efeito. Tende a favorecer preditores contínuos ou com muitos valores distintos, e preditores correlacionados repartem entre si a importância.Verificar:Resumo
Se falhar: Leia a importância como resumo do modelo, não como ranking de causas. Na
ml/forest,importancia = "impureza_corrigida"ou"permutacao"tiram o viés para preditores com muitos valores.
Configuração
nrounds define rodadas; max_depth limita profundidade por árvore; eta controla taxa de aprendizado. Recebe também resposta, preditores, tarefa e seed.
Exemplo
d <- trama.ml::tr_ml_example("mtcars")
m <- trama.ml::tr_ml_xgboost(d, resposta = "mpg", preditores = "wt, hp", nrounds = 50)
trama.models::tr_models_predict(m, d[1:3, ])
Como interpretar
A importância por ganho resume o ajuste e não indica causalidade. O pacote não seleciona rodadas automaticamente; escolha configurações usando treino/validação.
Teste recusado
A saída teste do ml/split é recusada aqui (tr_ml_error_test_leak): ajustar nela treinaria no teste. Ligue a saída treino; o teste vai só ao ml/predict.
Implementação
xgboost::xgb.train()versão 3.2.1.1objective=reg:squarederror,binary:logisticoumulti:softprob;max_depth,eta,nrounds,nthread = 1; sem subamostragem de linhas nem de colunas (determinístico).
No código O bloco chama trama.ml::tr_ml_xgboost(), em trama.ml/R/nodes.R:49.
A conta é feita nesta chamada:
xgboost::xgb.train(params = params, data = xgboost::xgb.DMatrix(X, label = label), nrounds = nrounds, verbose = 0)
Outras funções de pacotes que o bloco usa (11)
stats::reformulate(d$internos, response = ".y")stats::lm(f, treino)stats::glm(f, treino, family = stats::binomial())stats::binomial()rpart::rpart(f, treino, method = if (d$tarefa == "regressao") "anova" else "class", control = rpart::rpart.control(maxdepth = max_depth, minbucket = min_n, m...rpart::rpart.control(maxdepth = max_depth, minbucket = min_n, minsplit = minsplit, cp = cp, xval = if (poda == "nenhuma") 0L else min(10L, nrow(treino)))rpart::prune(arvore, cp = extras$poda$cp)figsr::figs(f, treino, max_splits = max_splits, min_n = min_n, mode = if (d$tarefa == "regressao") "regression" else "classification")ranger::ranger(f, treino, num.trees = trees, mtry = mm, min.node.size = min_n, max.depth = max_depth, probability = d$tarefa == "classificacao", seed = seed,...e1071::svm(x = d$x, y = d$y, type = if (d$tarefa == "regressao") "eps-regression" else "C-classification", kernel = kernel, cost = cost, gamma = gamma, proba...xgboost::xgb.DMatrix(X, label = label)
Referências
Teoria
- Chen, T.; Guestrin, C. (2016). XGBoost: A Scalable Tree Boosting System. Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, 785-794. doi:10.1145/2939672.2939785
Livro-texto
- Hastie, T.; Tibshirani, R.; Friedman, J. (2009). The Elements of Statistical Learning: Data Mining, Inference, and Prediction. 2. ed. New York: Springer. doi:10.1007/978-0-387-84858-7
- James, G.; Witten, D.; Hastie, T.; Tibshirani, R. (2021). An Introduction to Statistical Learning: with Applications in R. 2. ed. New York: Springer. doi:10.1007/978-1-0716-1418-1