🎯 Extreme Gradient Boosting
Em poucas palavras
O XGBoost é uma implementação regularizada e altamente otimizada de Gradient Boosting com árvores de decisão: cada nova árvore é treinada para corrigir os errors residuais do conjunto anterior. Proposto por Tianqi Chen e Carlos Guestrin (2016), tornou-se referência para problemas de regressão e classificação em dados tabulares.
📝 Notas e Desenvolvimento
- Ideia central (boosting): em vez de treinar árvores independentes e tirar a média — como no Random Forest (bagging) —, o boosting treina árvores em sequência. A predição final é a soma das contribuições de todas as árvores, cada uma “empurrando” o modelo na direção que mais reduz a função de perda.
- O que o XGBoost acrescenta ao gradient boosting clássico:
- Função objetivo regularizada: penaliza o número de folhas () e o tamanho dos pesos das folhas (L2 com , L1 com ), combatendo o Overfitting.
- Aproximação de segunda ordem: usa o gradiente e a hessiana da perda (expansão de Taylor), o que dá um critério de divisão mais preciso e permite qualquer perda duas vezes diferenciável.
- Shrinkage e subamostragem: a taxa de aprendizado () reduz o peso de cada árvore; a amostragem de linhas e de colunas acrescenta aleatoriedade e reduz variância.
- Tratamento nativo de valores ausentes: cada divisão aprende uma “direção padrão” para onde enviar os dados faltantes (sparsity-aware split finding).
- Engenharia de sistemas: busca de divisões paralelizada, estruturas amigáveis ao cache e processamento fora da memória — daí o “Extreme” do nome.
- Hiperparâmetros que mais importam:
| Hiperparâmetro | Papel |
|---|---|
n_estimators | Número de árvores |
learning_rate () | Peso de cada árvore; menor exige mais árvores |
max_depth | Profundidade máxima (complexidade de cada árvore) |
subsample / colsample_bytree | Fração de linhas / colunas usada por árvore |
reg_lambda, reg_alpha, gamma | Regularização |
min_child_weight | Peso mínimo em uma folha; limita divisões espúrias |
- Exemplo mínimo em Python:
from xgboost import XGBRegressor
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
modelo = XGBRegressor(n_estimators=500, learning_rate=0.05, max_depth=6,
subsample=0.8, colsample_bytree=0.8)
modelo.fit(X_train, y_train)
y_pred = modelo.predict(X_test)- Uso como modelo substituto (surrogate): por set rápido para prever e preciso em dados tabulares, o XGBoost é frequentemente usado para imitar um simulador caro. No artigo revisado sobre fazendas verticais, ele substituiu um modelo analítico baseado em física para prever produção, demanda de CO₂ e energia, acelerando em cerca de 19,6 vezes a avaliação de candidatos pelos algoritmos de otimização.
Quando usar
Dados tabulares, com relações não lineares e interações entre variáveis. Para imagens, texto ou áudio, redes neurais costumam set mais adequadas.
📚 Referências e Fontes
🔗 Conexões do Cofre
🌐 Referências Externas
- Chen, T.; Guestrin, C. XGBoost: A Scalable Tree Boosting System. KDD, 2016. arXiv:1603.02754
- Documentação oficial do XGBoost