Início Tecnologia Kaggle Champions jura por XGBoost – e você também pode

Kaggle Champions jura por XGBoost – e você também pode

5
0

 

Se você está se interessando pelo aprendizado de máquina, é provável que você tenha ouvido sussurros de um modelo que domina as competições de kaggle e lida com dados tabulares como um chefe: sim, estamos falando sobre Xgboost.

Mas o que torna o XGBoost tão poderoso? E, mais importante, como você realmente o usa sem se perder na selva de parâmetros e jargão?

Este é o seu guia prático e amigável ao ser humano para XGBoost-da instalação à otimização e tudo mais.


Por que todo mundo ama XGBoost (incluindo Kaggle Grandmasters)

XGBOOST significa Aumentado de gradiente extremo. No seu coração, é uma implementação eficiente e escalável de árvores de decisão impulsionadas por gradientes. O que isso significa em inglês simples: constrói modelos aprendendo com seus erros, iterativamente, como uma criança tentando aperfeiçoar um avião de papel.

Mas, diferentemente dos modelos GBDT tradicionais, o XGBoost é altamente otimizado para velocidade e precisão. Ele suporta paralelização, lida com os dados ausentes de graça e é testado em batalhas em grandes conjuntos de dados.


Introdução: instalação e configuração

Abra o seu terminal (ou Jupyter Notebook) e instale o pacote:

pip install xgboost

Para verificar se instalou corretamente:

import xgboost as xgb
print(xgb.__version__)

Vamos treinar um modelo (na íris, o “Hello World” do ML)

Usaremos o famoso conjunto de dados da IRIS – uma tarefa de classificação clássica com 3 tipos de flores. Veja como preparar os dados:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

Encontrar DMatrix: Arma secreta do XGBOOST

Antes de alimentar os dados do modelo, envolva -os no formato otimizado do XGBOOST:

dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test)

Vamos treinar

params = {
    'objective': 'multi:softmax',
    'num_class': 3,
    'max_depth': 3,
    'eta': 0.2,
    'seed': 42
}

model = xgb.train(params, dtrain, num_boost_round=10)
preds = model.predict(dtest)

Avalie o desempenho:

from sklearn.metrics import accuracy_score
print("Accuracy:", accuracy_score(y_test, preds))

Você deve ver algo em torno de ~ 95%+ precisão pronta para uso. Nada mal.


Ajustando a máquina: GridSearch em ação

Não vamos fingir que as configurações padrão são boas o suficiente para um trabalho real. Veja como pesquisar em grade para um modelo melhor:

from sklearn.model_selection import GridSearchCV
from xgboost import XGBClassifier

param_grid = {
    'max_depth': [3, 5],
    'learning_rate': [0.1, 0.3],
    'n_estimators': [50, 100]
}

grid = GridSearchCV(XGBClassifier(use_label_encoder=False), param_grid, scoring='accuracy', cv=3)
grid.fit(X_train, y_train)

print("Best params:", grid.best_params_)

Importância do recurso: quem mais importa?

Quer espiar dentro da caixa preta?

import matplotlib.pyplot as plt
xgb.plot_importance(model)
plt.show()

Você verá quais recursos o modelo se apoiou na maioria. É simples, mas surpreendentemente perspicaz.


Shap: Explique previsões como um profissional

Instale o Shap se você quiser se tornar nerd sobre a explicação do modelo:

pip install shap

Então:

import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
shap.summary_plot(shap_values, X_test)

Agora você não é apenas modelos de treinamento, você está compreendê -los.


Bônus: XGBoost para regressão e tarefas binárias

Classificação não é tudo o XGBOOST faz. Quer prever os preços das casas?

params = {'objective': 'reg:squarederror', 'eta': 0.1}

Para classificação binária?

params = {'objective': 'binary:logistic', 'eta': 0.3}

O restante do processo é quase idêntico.


Apêndice Avançado: Treinamento Distribuído com XGBoost

Quando seu conjunto de dados começa a atingir milhões de linhas ou você deseja espremer cada grama de desempenho, é hora de se distribuir.

Opção 1: Treinamento Multi-GPU

O XGBOOST possui suporte de GPU integrado. Basta definir tree_method para gpu_hist:

params = {
    'tree_method': 'gpu_hist',
    'predictor': 'gpu_predictor',
    'objective': 'binary:logistic',
    'max_depth': 4,
    'eta': 0.3
}

Você precisará instalar a versão habilitada para GPU do XGBoost e garantir que o CUDA esteja configurado.

Opção 2: CPU/GPU distribuído com DASK

O DASK é uma ótima maneira de escalar XGBoost entre os clusters (local ou nuvem).

from dask.distributed import Client
from dask_cuda import LocalCUDACluster
from xgboost.dask import DaskDMatrix, train

client = Client(LocalCUDACluster())

# Assume X_dask and y_dask are Dask arrays or DataFrames
dtrain = DaskDMatrix(client, X_dask, y_dask)
params = {"objective": "reg:squarederror", "tree_method": "gpu_hist"}
output = train(client, params, dtrain, num_boost_round=100)

Dask lida com o levantamento pesado de dividir dados em pedaços e agendar em várias GPUs ou CPUs.

Opção 3: Use Spark com XGBOOST4J

Para sistemas em escala corporativa em execução do Apache Spark, o XGBoost oferece uma solução compatível com JVM: Xgboost4j. Ele se integra diretamente aos pipelines Spark ML e pode lidar com grandes dados com alta taxa de transferência.

A configuração é um pouco mais complexa, mas vale a pena se você já está executando a infraestrutura do Spark.


Pensamentos finais: você deve usar o XGBoost?

Sim – se você tiver dados estruturados e precisar de algo rápido, poderoso e flexível. O XGBOOST não é uma bala de prata, mas está perto.

Este guia mal arranha a superfície. Você pode enlouquecer com regularização avançada, funções de perda personalizada, parada precoce e até treinamento de GPU distribuído. Mas, para a maioria dos casos de uso, dominar o que abordamos aqui o coloca à frente de 90% dos usuários.

fonte