Você passou incontáveis horas pesquisando, ajustando e treinando o modelo XGBoost perfeito.

Seu modelo está performando excepcionalmente bem e você está pronto para comemorar.

Mas espere, agora você precisa implementá-lo, e de repente, você se depara com um problema.

Como salvar seu modelo para uso futuro?

Neste artigo, vou ensiná-lo a salvar e carregar seus modelos XGBoost.

Isso significa que você pode treinar seu modelo uma vez, salvá-lo e depois recarregá-lo sempre que precisar fazer previsões.

Chega de treinar do zero toda vez!

Modelo XGBoost Simples para Demonstração

Antes de nos aprofundarmos em salvar e carregar modelos, vamos construir um modelo XGBoost simples que podemos usar para demonstração.

Usaremos o conjunto de dados de Qualidade do Vinho do Repositório de Machine Learning da UCI.

Este conjunto de dados contém informações sobre vinhos tintos, incluindo características como acidez e teor alcoólico, bem como uma variável alvo ‘quality’ que representa a qualidade do vinho em uma escala de 3 a 8.

Primeiro, precisamos importar as bibliotecas necessárias e carregar o conjunto de dados.

import pandas as pd
from sklearn.model_selection import train_test_split
from xgboost import XGBClassifier

# Carregar conjunto de dados
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"
data = pd.read_csv(url, delimiter=";")

Agora que temos nossos dados, vamos dividi-los em conjuntos de treinamento e teste. Usaremos a coluna ‘quality’ como nossa variável alvo.

# Dividir dados em X e y
X = data.drop('quality', axis=1)
y = data['quality']

# Dividir dados em conjuntos de treinamento e teste
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=7)

Com nossos dados preparados, podemos construir nosso modelo XGBoost.

Usaremos o XGBClassifier e faremos o treinamento do modelo com nossos dados de treinamento.

# Definir o modelo
model = XGBClassifier()

# Treinar o modelo
model.fit(X_train, y_train)

Ótimo! Agora temos um XGBoost simples treinado no conjunto de dados.

Usaremos este modelo nas próximas seções para demonstrar como salvar e carregar modelos.

Salvando Modelos XGBoost

Agora que temos nosso modelo XGBoost treinado, vamos salvá-lo para uso futuro.

O XGBoost fornece uma função chamada save_model que nos permite fazer isso.

model.save_model('xgb_model.json')

No código acima, estamos salvando nosso modelo em um arquivo chamado ‘xgb_model.json’.

A função save_model suporta diferentes formatos de arquivo, incluindo JSON e formato binário.

É importante notar que há uma diferença entre a API do sklearn e o método booster (API nativa) quando se trata de salvar modelos.

Ao usar a API do sklearn, você usa a função model.save_model() como mostrado acima.

No entanto, ao usar a API Nativa, você precisa usar booster.save_model().

# Salvar modelo usando booster
booster = model.get_booster()
booster.save_model('booster_model.json')

No código acima, primeiro obtemos o objeto booster do modelo usando model.get_booster(), e então salvamos o booster usando booster.save_model().

Se tivéssemos treinado nosso modelo usando a API Nativa, teríamos que usar booster.save_model() para salvar o modelo.

Lembre-se: se você usar a API do Scikit-learn para salvar o modelo, você deve carregá-lo usando a API do Scikit-learn, o mesmo vale para a API Nativa.

Carregando Modelos XGBoost Salvos

Agora que salvamos nosso modelo, vamos carregá-lo de volta para a memória.

Podemos fazer isso usando a função load_model fornecida pelo XGBoost.

# Carregar modelo do arquivo
loaded_model = XGBClassifier()
loaded_model.load_model('xgb_model.json')

No código acima, primeiro criamos uma nova instância de XGBClassifier, para que a biblioteca saiba qual tipo de modelo estamos carregando.

Então, carregamos o modelo do arquivo ‘xgb_model.json’ nesta nova instância.

Assim como com o salvamento de modelos, há uma diferença entre a API do sklearn e a API Nativa quando se trata de carregar modelos.

Ao usar a API do sklearn, você usa a função model.load_model() como mostrado acima.

No entanto, ao usar o método booster, você precisa usar booster.load_model().

# Carregar modelo usando booster
import xgboost

booster = xgboost.Booster()
booster.load_model('booster_model.json')

No código acima, primeiro criamos uma nova instância de um objeto Booster, e então carregamos o modelo nele usando booster.load_model().

Fazendo Previsões Com O Modelo Carregado

Agora que carregamos nosso modelo, podemos fazer previsões com ele assim como faria com qualquer outro modelo.

# Fazer previsões nos dados de teste
y_pred = loaded_model.predict(X_test)

Se você estiver usando a API Nativa, lembre-se de converter seus dados de entrada para DMatrix antes de fazer previsões.

Salvando e Carregando Modelos XGBoost Com Pickle

Pickle é um módulo Python usado para serializar (pickle) e desserializar (unpickle) estruturas de objetos Python.

É outra forma de salvar e carregar seus modelos XGBoost, e pode ser mais rápido para modelos grandes.

Vamos começar salvando nosso modelo XGBoost com Pickle.

import pickle

# Salvar o modelo em um arquivo
pickle.dump(model, open("xgb.pkl", "wb"))

No código acima, estamos usando a função dump do módulo pickle para salvar nosso modelo em um arquivo chamado ‘xgb.pkl’.

O argumento ‘wb’ indica que o arquivo é aberto para escrita em modo binário.

Agora, vamos carregar o modelo de volta para a memória usando Pickle.

# Carregar modelo do arquivo
loaded_model = pickle.load(open("xgb.pkl", "rb"))

Aqui, estamos usando a função load do módulo pickle para carregar nosso modelo do arquivo ‘xgb.pkl’.

O argumento ‘rb’ indica que o arquivo é aberto para leitura em modo binário.

Uma das vantagens de usar Pickle é que pode ser mais rápido para modelos grandes, e ele salva o objeto do modelo em um formato binário, então você não precisa criar uma nova instância dele antes de carregar.

No entanto, é importante notar que Pickle não é seguro contra dados com erro ou código malicioso.

Nunca faça unpickle de dados recebidos de uma fonte não confiável ou não autenticada.

Salvando e Carregando Modelos XGBoost Com Joblib

Joblib é outra biblioteca Python usada para serializar objetos Python, similar ao Pickle.

Este é o meu método preferido.

Vamos começar salvando nosso modelo XGBoost com Joblib.

from joblib import dump

# Salvar o modelo em um arquivo
dump(model, "xgb.pkl")

No código acima, estamos usando a função dump do módulo joblib para salvar nosso modelo em um arquivo chamado “xgb.pkl”.

Agora, vamos carregar o modelo de volta para a memória usando Joblib.

from joblib import load

# Carregar modelo do arquivo
loaded_model = load("xgb.pkl")

Aqui, estamos usando a função load do módulo joblib para carregar nosso modelo do arquivo “xgb.pkl”.

Uma das vantagens de usar Joblib sobre Pickle é que pode ser mais rápido e mais eficiente para modelos grandes, especialmente aqueles com grandes arrays numpy.

E tem a mesma vantagem de que você não precisa criar uma nova instância do modelo antes de carregá-lo.

No entanto, similar ao Pickle, Joblib não é seguro contra erros de dados ou código malicioso.

Nunca carregue um arquivo serializado joblib recebido de uma fonte não confiável ou não autenticada.

Seja o primeiro a saber das novidades em Machine Learning. Me siga no LinkedIn.