Escolar Documentos
Profissional Documentos
Cultura Documentos
Extreme Gradient
Boosting
Odemir Depieri Jr
Ronisson Lucas C. da Conceição
Yan Vianna Sym
SOBRE ESSE EBOOK
Nesse e-book vamos realizar uma introdução ao
algoritmo Extreme Gradient Boosting (aprendizado
de máquina).
Esse algoritmo é um dos melhores em questão de
precisão e mais utilizado em competições da Kaggle
pelos competidores de dados.
CONTEÚDO
Vamos introduzir ao tema do que seria
o Extreme Gradient Boosting em seguida vamos
realizar um case usando dados sintéticos para
demonstrar a aplicação do algoritmo.
xbboost: https://xgboost.readthedocs.io/en/stable/index.html
AUTORES
Odemir Depieri Jr
Ronisson Lucas Calmon da Conceição
Yan Vianna Sym
APOIO
Data Viking
INDICE
XGBOOST
o O QUE É EXTREME GRADIENT BOOSTING - 4
TUTORIAL
o IMPORTAR FRAMEWORKS - 5
o DADOS SINTÉTICOS - 6
o TABULAR OS DADOS - 7
o ANÁLISE DA CLASSE - 8
o ANÁLISE DAS CARACTERÍSTICAS - 9
o DIVISÃO DOS DADOS - 10
o CRIAÇÃO DO MODELO - 11
o MATRIZ DE CONFUSÃO - 12
o MATRIZ DE CONFUSÃO - 13
o REPORT DE CLASSIFICAÇÃO - 14
o REPORT DE CLASSIFICAÇÃO - 15
o CURVA ROC - 16
o CROSS VALIDADOR - 17
o MATRIZ DE CONFUSÃO - 18
o CÓDIGO - 19
o REFERÊNCIAS - 20
O que é extreme gradient boosting?
Extreme Gradient Boosting é um algoritmo baseado em
árvore, que fica sob a ramificação supervisionada do Machine
Learning. Embora possa ser usado para problemas de
classificação e regressão, todas as fórmulas e exemplos desta
história se referem ao uso do algoritmo para classificação .
Fonte: https://towardsdatascience.com/xgboost-extreme-gradient-boosting-
how-to-improve-on-regular-gradient-boosting-5c6acf66c70a
O que é extreme gradient boosting - 4
# Libs para manipular dados
import pandas as pd
import numpy as np
# Lib Gráfica
import matplotlib.pyplot as plt
import seaborn as sns
# Biblioteca do XGbossting
import xgboost
Importar os frameworks
Primeiramente vamos importar os frameworks que iremos
utilizar.
Mais para frente vamos importar diversas funções de alguns
frameworks como Yellowbrick, Sklearn. Então caso não tenha
esses frameworks instalados sugiro instalar logo no início.
Caso não tenha algum framework instalado, basta abrir o ‘CMD’
e instalar com o comando ‘pip install bibliotecaquequeira’.
Para Linux, Mac ou outro sistema consulte a documentação do
python.
Link: https://packaging.python.org/en/latest/tutorials/installing-packages/
Importar Frameworks - 5
# Função para criar dataset
from sklearn.datasets import make_classification
# Vetores
Eixo_x, Eixo_y = make_classification(
# Numero de amostras
n_samples=2000,
# Features redudantes
n_redundant=5,
# Dimensão
print( Eixo_x.shape, Eixo_y.shape)
Dados Sintéticos - 6
# Criando uma tabela para melhor visualização
# Criando a Tabela
Base_Dados = pd.DataFrame( Eixo_x, columns=Nom
e_Colunas )
Base_Dados['Target'] = Eixo_y
# Verificar
Base_Dados.head()
Tabula os dados
Na geração dos dados criamos 10 colunas (Features) e uma
variável ‘target’ que será nossa classe previsora.
A própria função do sklearn já fez essa criação.
Inclui as colunas com letra alfabéticas para melhor visualização.
O que é uma Feature?
No aprendizado de máquina e no reconhecimento de padrões,
um recurso (feature) é uma propriedade individual mensurável
ou característica de um fenômeno. A escolha de recursos
informativos, discriminantes e independentes é um elemento
crucial de algoritmos eficazes no reconhecimento, classificação
e regressão de padrões.
Tabular os dados - 7
# Analisar nossa classe previsora [ Target ]
# Tamanho do gráfico
plt.figure( figsize=(10, 5) )
# Instanciando o gráfico
Visualizador = ClassBalance( labels=[0,1] )
Visualizador.fit( Eixo_y )
# titulo
plt.title('Análise da Classe [Target]');
Análise da Classe
Utilizamos o Yellowbrick para gerar um gráfico com a
quantidade de cada classe (Previsor).
Com o intuito de avaliar se há um desbalanceamento na sua
variável previsora, como estamos usando dados sintéticos
poderia ter forçado essa curva, porém vamos manter o
balanceamento para efeito de estudo.
Análise da Classe - 8
# Analisar os dados de características
# Tamanho do gráfico
plt.figure( figsize=(10, 5) )
# Instanciando o gráfico
Visualizador_02 = ParallelCoordinates( classes=Class
es, features=Features, sample=0.05, shuffle=True)
Visualizador_02.fit_transform( Eixo_x, Eixo_y )
# Titulo
plt.title('Coordenadas paralelas -[Características]');
# Vetores
x_Treino, x_Teste, y_Treino, y_Teste = train_test
_split(
# características
Eixo_x,
# previsor
Eixo_y,
# tamanho da amostra
test_size=0.25,
# flag do aleatório
random_state=10 )
# Dimensão
print( f'Treinar o modelo com { x_Treino.shape[0] }
registros' )
print( f'Testar com { x_Teste.shape[0] } registros'
)
# Atribuindo o modelo
Modelo_XGB = XGBClassifier(
# Fitar o modelo
Modelo_XGB.fit( x_Treino, y_Treino )
XGBClassifier(colsample_bytree=0.8,
max_depth=5, n_estimators=500, subsample=0.8)
Criação do Modelo
Deixei comentado cada parâmetros no modelo.
Fonte: https://xgboost.readthedocs.io/en/stable/python/python_api.html Criação do Modelo - 11
# Avaliar o modelo - Matriz de Confusão
# Criar as previsões
Previsoes = Modelo_XGB.predict( x_Teste )
# Matriz de confusão
from sklearn.metrics import confusion_matrix
print('Matriz de Confusão: \n', confusion_matrix( y_Test
e, Previsoes ), '\n' )
Matriz de Confusão:
[[230 22]
[ 15 233]]
# Tamanho do gráfico
plt.figure( figsize=(10, 5) )
# Atribuir a Matrix
Matriz_Confusao = ConfusionMatrix(Modelo_XGB, classes
=[0, 1])
# Fitar o modelo
Matriz_Confusao.fit(x_Treino, y_Treino)
# Calcular o score
Matriz_Confusao.score(x_Teste, y_Teste)
# Plot do gráfico
Matriz_Confusao.show()
Matriz de Confusão - 12
Matriz de Confusão
Nos exemplos utilizei 2 formas para gerar a matriz de confusão,
a forma mais clássica usando apenas o sklearn e utilizando
o Yellowbrick que nos fornece uma forma mais visual da matriz.
Caso não conheça nada sobre Matriz de confusão, temos um
slide bem legal mostrando os parâmetros.
Matriz de Confusão - 13
# Relatorio de Classificação
from sklearn.metrics import classification_report
print('Relatório de Classificação: \n', classification_repor
t( y_Teste, Previsoes ) )
# Tamanho do gráfico
plt.figure( figsize=(10, 5) )
# Atribuir o Report
Class_Report = ClassificationReport(Modelo_XGB, classes
=[0, 1], support=True)
# Fitar o modelo
Class_Report.fit(x_Treino, y_Treino)
# Calcular o score
Class_Report.score(x_Teste, y_Teste)
# Plot do gráfico
Class_Report.show();
Report de Classificação - 14
Report de Classificação
Nos exemplos utilizei 2 formas para gerar o report de
classificação, a forma mais clássica usando apenas o sklearn e
utilizando o Yellowbrick que nos fornece uma forma mais visual
da matriz.
Caso não conheça nada sobre o report de classificação, temos
um slide bem legal mostrando os parâmetros.
Report de Classificação - 15
# Gráfico do Yellow brick - Curva ROC
from yellowbrick.classifier import ROCAUC
# Tamanho do gráfico
plt.figure( figsize=(10, 5) )
# Atribuir o Report
Curva_ROC = ROCAUC(Modelo_XGB, classes=[0, 1])
# Fitar o modelo
Curva_ROC.fit(x_Treino, y_Treino)
# Calcular o score
Curva_ROC.score(x_Teste, y_Teste)
# Plot do gráfico
Curva_ROC.show();
Curva ROC
Utilizamos o Yellowbrick para plotar uma curva ROC.
Esse gráfico é baseado em algumas estatísticas, caso queira
aprofundar mais acesse o link da documentação.
Fonte: https://www.scikit-yb.org/en/latest/api/classifier/rocauc.html
Curva ROC - 16
# Funções
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedK
Fold
# Atribuindo o modelo
Modelo_XGB_v2 = XGBClassifier()
# Quantidade de repetições
n_repeats=3,
# Flag do aleatorio
random_state=10 )
# Fitando o modelo
Resultado_Scores = cross_val_score(
# Modelo
Modelo_XGB_v2,
# Caracteristicas
Eixo_x,
# Previsor
Eixo_y,
# Metrica de avaliação
scoring='accuracy',
# Validação cruzado
cv=Validacao_Cruzada,
Cross Validador - 17
Cross Validador
Cross Validation é uma técnica muito utilizada para avaliação de
desempenho de modelos de aprendizado de máquina. O CV
consiste em particionar os dados em conjuntos(partes), onde
um conjunto é utilizado para treino e outro conjunto é utilizado
para teste e avaliação do desempenho do modelo.
Matriz de Confusão - 18
Código (script)
Para acessar esse script acesse o qrcode abaixo.
Código - 19
Referências
https://packaging.python.org/en/latest/tutorials/in
stalling-packages/
https://en.wikipedia.org/wiki/Feature_(machine_lea
rning)
https://www.scikit-
yb.org/en/latest/api/target/class_balance.html
https://www.scikit-
yb.org/en/latest/api/features/pcoords.html
https://scikit-
learn.org/stable/modules/generated/sklearn.model_
selection.train_test_split.html
https://xgboost.readthedocs.io/en/stable/python/p
ython_api.html
https://www.scikit-
yb.org/en/latest/api/classifier/confusion_matrix.ht
ml
https://scikit-
learn.org/stable/modules/generated/sklearn.metrics
.confusion_matrix.html
https://scikit-
learn.org/stable/modules/generated/sklearn.metrics
.classification_report.html
https://www.scikit-
yb.org/en/latest/api/classifier/rocauc.html
http://scikit-
learn.org/stable/modules/generated/sklearn.model_
selection.cross_val_score.html
http://scikit-
learn.org/stable/modules/generated/sklearn.model_
selection.RepeatedStratifiedKFold.html
Referências - 20