XGBoost — Extreme Gradient Boosting — Iniciante
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
- https://www.kaggle.com/rozester/xgboost-example-python
- https://www.kdnuggets.com/2017/03/simple-xgboost-tutorial-iris-dataset.html
- https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html
- https://www.datacamp.com/community/tutorials/xgboost-in-python
- http://suruchifialoke.com/2016-10-13-machine-learning-tutorial-iris-classification/