Aula 11 – Scikit-Learn – Persistência do modelo com Joblib
Aula 11 – Scikit-Learn – Persistência do modelo com Joblib
Voltar para página principal do blog
Todas as aulas desse curso
Aula 10 Aula 12
Link do meu Github com o script dessa aula:
Download do script da aula
Link da documentação oficial do Sklearn:
https://scikit-learn.org/stable/
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
Link do código fluente no Pinterest
Meus links de afiliados:
Hostinger
Digital Ocean
One.com
Finalize seu modelo com joblib
O Joblib faz parte do ecossistema SciPy e fornece utilitários para o pipeline de trabalhos com dados em Python.
Ele fornece utilitários para salvar e carregar objetos Python que fazem uso eficiente das estruturas de dados do NumPy.
Isso pode ser útil para alguns algoritmos de aprendizado de máquina que exigem muitos parâmetros ou armazenam todo o conjunto de dados (como o K-Nearest Neighbors).
Usaremos o mesmo modelo K-Nearest Neighbors criado na aula 06.
Recriaremos o modelo rapidamente e depois usaremos o joblib para salvar o modelo e depois recuperá-lo.
#Importa os datasets que vem com o scikit learn
from sklearn import datasets
#Importa o pandas como pd
import pandas as pd
#Carrega a base na forma como ela tá no Scikit-Learn,
#ou seja, ela tá como dicionário
iris = datasets.load_iris()
#Transforma o iris dicionário em dataframe pandas
#e atribui a variável irs
irs = pd.DataFrame(iris.data, columns = iris.feature_names)
#Cria o campo class de classificação, nosso campo alvo.
irs['class'] = iris.target
#Separa os atributos, sepal length (cm), sepal width (cm),
#petal length (cm) e petal width (cm) na variável x.
x = irs.iloc[:, :-1].values
#Separa o campo com as classificações: 0(setosa), 1(versicolor) e 2(virgínica) na variável y
y = irs.iloc[:, 4].values
#Importa o train_test_split do sklearn.model_selection
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.20)
#importa o StandardScaler do sklearn.preprocessing
#para normalizar a distribuição, com média próxima de zero e um desvio padrão próximo a um.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(x_train)
x_train = scaler.transform(x_train)
x_test = scaler.transform(x_test)
#Importa o KNeighborsClassifier do sklearn.neighbors
from sklearn.neighbors import KNeighborsClassifier
#A classe é KNeighborsClassifier inicializada com um parâmetro:
#n_neigbours igual a 5.
knn_classifier = KNeighborsClassifier(n_neighbors = 5)
#Faz as previsões
knn_classifier.fit(x_train, y_train)
#Faz as previsões sobre os dados de teste
y_pred = knn_classifier.predict(x_test)
#Importa confusion_matrix e classification_report do sklearn.metrics
from sklearn.metrics import classification_report, confusion_matrix
#Imprime a confusion matrix
print(confusion_matrix(y_test, y_pred))
#Imprime o relatório de classificação
print(classification_report(y_test, y_pred))
#######Vamos salvar o modelo usando o joblib#############
#Importa o joblib do sklearn.externals
from sklearn.externals import joblib
#Salva o modelo em disco
filename = 'kNeighborsClassifier_iris_model.sav'
joblib.dump(knn_classifier, filename)
#Algumas horas ou talvez dias dias depois...
#Carrega o modelo do disco
loaded_model = joblib.load(filename)
result = loaded_model.score(x_test, y_test)
print(result)
A execução do exemplo salva o modelo no arquivo kNeighborsClassifier_iris_model.sav.
Após o carregamento do modelo, é relatada uma estimativa da precisão do modelo em dados não vistos.
Resumo das duas últimas aulas
- A API pickle é usada para serializar objetos Python padrão.
- A API joblib para serializar objetos Python com matrizes NumPy.