Coleção aprendizado
FIGS · soma de árvores
Ajusta uma soma de árvores pequenas sob um orçamento global de divisões para regressão ou classificação binária.
O que o bloco faz
Ajusta uma soma de árvores pequenas sob um orçamento global de divisões para regressão ou classificação binária.
Antes de continuar
Termos que esta página usa, em poucas palavras. As definições completas estão no glossário.
- População
- O conjunto completo de unidades sobre o qual se quer concluir algo: todas as propriedades de uma região, todos os alunos de uma escola. Em geral não é possível medir todas, e por isso se mede uma amostra.
- 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.
- 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 quando uma explicação aditiva por árvores pequenas atende à pergunta. Para classificação, o suporte é binário. Requer figsr.
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.Na classificação, duas classes: a soma das árvores estima a probabilidade da segunda.
Verificar:Agrupar e resumir
Se falhar: Com três ou mais classes,
ml/cart,ml/forestouml/xgboost.O orçamento de divisões (
max_splits) controla a complexidade de todo o modelo; ele não é escolhido pelo bloco.Verificar:Ajustar hiperparâmetrosAvaliar previsões
Se falhar: Escolha
max_splitsemin_nnoml/tune.A importância (no
models/importance) é a redução de erro somada por preditor em todas as árvores, 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
resposta, preditores e tarefa definem dados e tarefa. max_splits limita o total de divisões da soma; min_n controla o tamanho mínimo dos nós conforme figsr; seed reproduz o ajuste.
Exemplo
d <- trama.ml::tr_ml_example("iris_binaria")
m <- trama.ml::tr_ml_figs(d, resposta = "Species", max_splits = 4)
trama.ml::tr_ml_rules(m)
Como interpretar
As regras mostram contribuições por árvore; some as contribuições para obter a previsão. ml/tree_plot desenha uma árvore selecionada, enquanto a saída final permanece a soma.
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
figsr::figs()versão 0.1.1mode = "regression"ou"classification"(binária), commax_splitsemin_n.
No código O bloco chama trama.ml::tr_ml_figs(), em trama.ml/R/nodes.R:17.
A conta é feita nesta chamada:
figsr::figs(f, treino, max_splits = max_splits, min_n = min_n, mode = if (d$tarefa == "regressao") "regression" else "classification")
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)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.train(params = params, data = xgboost::xgb.DMatrix(X, label = label), nrounds = nrounds, verbose = 0)xgboost::xgb.DMatrix(X, label = label)
Referências
Teoria
- Tan, Y. S.; Singh, C.; Nasseri, K.; Agarwal, A.; Duncan, J.; Ronen, O.; Epland, M.; Kornblith, A.; Yu, B. (2025). Fast Interpretable Greedy-Tree Sums. Proceedings of the National Academy of Sciences, 122(7), e2310151122. doi:10.1073/pnas.2310151122