XGBoost — Extreme Gradient Boosting — Iniciante

Francke Peixoto
2 min readJul 19, 2020

--

O XGBoost é uma implementação de árvores de decisão, projetadas para ganho de perfomance no aprendizado de máquina.

Esse pacote foi desenvolvido inicialmente pela Tianq Chen como parte da DMLC (Distributed Machine Learning Community), e tem como objetivo ser extremamente rápido, escalável e portátil.

Setup

In [1]:

import sklearn
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import precision_score
from sklearn.datasets import load_iris
import xgboost

In [2]:

random_state = 69
dataset = load_iris()
x = dataset.data
y = dataset.target
x_train, x_test, y_train, y_test = train_test_split(x,y, test_size=0.35, random_state=random_state)

Criando DMatrix, ela trabalha diretamente com matrizes do numpy

In [3]:

dmatrix_train = xgboost.DMatrix(x_train, label=y_train)
dmatrix_test = xgboost.DMatrix(x_test, label=y_test)

Para o XGBoost funcionar como você realmente deseja, é preciso definar alguns parâmetros.

  • max_depth Profundidade máxima de cada árvore.
  • eta Etapa de treinamento para cada iteração.
  • silent Modo silencioso.
  • objective Avaliação de erro para treinamento multiclasse e etc.
  • num_class Número de classes que existem neste conjunto de dados. (‘setosa’, ‘versicolor’, ‘virginica’)
  • num_round Número de iterações de treinamento.

In [4]:

param = { 'max_depth': 3, 'eta': 0.8, 'silent': 1, 'objective': 'multi:softprob', 'num_class': 3} 
num_round = 20

Train e predict…

In [5]:

xgb_train = xgboost.train(param,dmatrix_train,num_round)
predictions = xgb_train.predict(dmatrix_test)

Aqui temos as três classes 0,1,2. Para cada linha, você precisar escolher as com o maior nível de probabilidade.

In [6]:

best_predictions = np.asarray( [ np.argmax(linha) for linha in predictions])
best_predictions

Out[6]:

array([0, 1, 0, 2, 0, 0, 1, 2, 2, 0, 1, 2, 0, 1, 2, 1, 1, 2, 1, 2, 2, 1,
0, 0, 2, 0, 2, 2, 1, 0, 0, 0, 0, 2, 2, 2, 0, 1, 1, 2, 0, 2, 1, 0,
1, 1, 2, 1, 1, 1, 2, 0, 2])

Verificando a precisão das previsões feitas:

In [7]:

precision_score(y_test, best_predictions, average='macro')

Out[7]:

0.9628482972136223

Referências

Notebook

--

--

Francke Peixoto
Francke Peixoto

Written by Francke Peixoto

Software Engineer | Data Engineer | Data & Analytics Enthusiastic | Machine Learning | Azure | Fullstack Developer | Systems Analist | .Net — Acta, non verba

No responses yet