Machine Learning · Insper
Gradient Boosting
Abordagem avançada
Outras perdas, as bibliotecas modernas e quando o boosting vence a floresta
O caminho desta parte
- Qualquer perda, o mesmo laçoperdas robustas, log-odds, AdaBoost
- Ajustar os outros botõestamanho da árvore, folhas, L2, com η fixo
- As bibliotecas modernashistogramas, XGBoost, LightGBM, CatBoost
- Floresta ou boosting?uma comparação justa, lado a lado
Cada etapa responde a uma pergunta: o que a próxima árvore escuta? → quais botões importam com a taxa de aprendizado e a parada antecipada fixas? → o que as bibliotecas acrescentam ao algoritmo? → qual ensemble usar?
Etapa 1 · o que a próxima árvore escuta?
A perda decide o que a próxima árvore escuta
| perda | pseudo-resíduo \(-\partial L/\partial F\) | \(F_0\) |
| quadrática | \(y - F\) | média |
| absoluta | \(\operatorname{sinal}(y - F)\) | mediana |
| Huber | \(y - F\), cortado em \(\pm\delta\) | — |
| log loss | \(y - p\) | log-odds da taxa base |
Um outlier, \(y_6 = 40\): pseudo-resíduos quadráticos −9,33 … 28,67; absolutos, todos \(\pm 1\).
Com a perda quadrática, o primeiro toco gasta o corte no outlier; com a absoluta ou a Huber, todo ponto empurra com a mesma força.
Classificação: somar log-odds
- O ensemble soma \(F\) (log-odds) e usa a sigmoide: \(p = 1/(1 + e^{-F})\). Pseudo-resíduo: \(y - p\).
- Seis pontos, 4 positivos: \(F_0 = \ln 2 = 0{,}693\). O toco corta em \(x < 3{,}5\).
- Cada folha recebe um passo de Newton: \(\sum (y_i - p_i) / \sum p_i (1 - p_i) = \pm 1{,}5\).
\[ F_1 = 0{,}693 \pm 0{,}5 \times 1{,}5 \;\Rightarrow\; p = 0{,}486 \text{ e } 0{,}809 \]
Mão e scikit-learn concordam até a terceira casa; um toco baixa a log loss de 0,637 para 0,448. Dividir por \(p(1-p)\), a curvatura, deixa o passo cauteloso onde o modelo está em dúvida.
AdaBoost, o ancestral
- Em vez de resíduos, repondera os pontos: os errados ganham peso, o próximo toco é forçado a olhar para eles.
- Toco que erra 3 de 10: \(\alpha = \tfrac12 \ln\frac{0{,}7}{0{,}3} = 0{,}424\); cada ponto errado vai de 10% para 16,7%; juntos, metade do peso.
| 10 atributos, soma de quadrados (ESL §10.1) | erro de teste |
| um toco | 45,9% |
| uma árvore completa | 24,5% |
| AdaBoost, 400 tocos | 11,6% |
| gradient boosting, 400 tocos | 11,1% |
Etapa 2 · quais botões importam com a taxa de aprendizado e a parada antecipada fixas?
Os outros botões, com \(\eta\) e parada antecipada fixos
| California housing, CV 5-fold | RMSE | árvores |
| padrões (31 folhas) | 45,8 ± 0,6 | 350 |
max_leaf_nodes=8 | 46,3 ± 0,8 | 736 |
max_leaf_nodes=127 | 45,9 ± 0,6 | 179 |
min_samples_leaf=200 | 46,4 ± 0,3 | 452 |
l2_regularization=10 | 45,5 ± 0,4 | 419 |
Depois de \(\eta\) e do número de árvores, os outros botões mudam pouco o erro e muito quantas árvores são precisas. Ordem de ajuste: \(\eta\) moderado + parada antecipada → tamanho da árvore e da folha → subamostragem e L2.
Etapa 3 · o que as bibliotecas acrescentam ao algoritmo?
As bibliotecas modernas
- Histogramas (LightGBM, XGBoost
hist, HistGradientBoosting*): até 255 faixas por atributo; faltantes e categorias nativos.
- XGBoost: penalidade por árvore e derivada segunda; o valor ótimo de cada folha é
\[ w_j^* = -\frac{G_j}{H_j + \lambda} \qquad \lambda = 0:\ -1{,}5 \quad \lambda = 1:\ -0{,}6 \]
- LightGBM: cresce folha a folha (
num_leaves), GOSS e EFB para dados grandes.
- CatBoost: codifica categorias pela média do alvo das linhas anteriores, sem ver o próprio rótulo.
Com \(\lambda = 0\), \(w^*\) é o passo de Newton feito à mão; \(\lambda\) é o Ridge dentro de cada folha.
Etapa 4 · qual ensemble usar?
Floresta ou boosting?
- Padrões, fold a fold: o boosting vence a floresta em todos os folds, +1,6 ± 0,4 mil de RMSE; ajustado, +3,8 ± 0,4.
- 16 configurações aleatórias: floresta de R² 0,762 a 0,826; boosting de 0,650 a 0,844.
A floresta é difícil de estragar; o boosting ajustado vai mais longe, mas uma configuração descasada fica muito pior. A parada antecipada tira da busca o botão mais perigoso.
Lado a lado
| Random forest | Gradient boosting |
| árvores | independentes, profundas | em sequência, rasas |
| reduz | a variância (média) | o viés (soma) |
| mais árvores | nunca atrapalham | acabam sobreajustando |
| sem ajuste | muito boa | boa; ruins podem ser muito piores |
| ajustada | um pouco melhor | em geral a melhor em dados tabulares |
| de graça | OOB, treino paralelo | parada antecipada, faltantes, perdas |
Lab avançado · cerca de 40 min, em duplas
Comparar, ajustar e testar, passos 6 a 11
- Mesmo notebook, mesma sessão: os passos usam
X_dev, cv, cv_eval, summary e results.
- A floresta e o XGBoost e o LightGBM nos mesmos folds; uma busca aleatória; o limiar fora do fold; o teste, uma vez; as colunas que o modelo usa.
- Notebook no Colab, a partir do passo 6.
- Simulações: boosting estocástico (passo 7) e e no ano seguinte? (passo 11).
Ritmo: passos 6 e 7 e a primeira simulação em 15 min; passo 8 em 10 min; passos 9 e 10 em 8 min; passo 11 e a segunda em 7 min.