Aula 10 - Scikit-Learn - Persistência do modelo com Pickle

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

Persistência do modelo com Pickle

Depois de construir um modelo de aprendizado de máquina preciso e eficiente como o que construímos na aula passada, você precisa salvar ele em disco para poder rodar novamente quando quiser. É possível salvar um modelo em scikit-learn usando o recurso de persistência integrado do Python, o pickle. O módulo pickle implementa um algoritmo para serializar e desserializar uma estrutura de objeto Python. O "Pickling" é o processo pelo qual uma hierarquia de objetos Python é convertida em um fluxo de bytes, e “unpickling” é a operação inversa, onde um fluxo de byte é convertido de volta em uma hierarquia de objetos. Nessa aula, vamos trabalhar novamente com o digits dataset. Iremos construir o mesmo modelo da aula passada, mas, com algumas coisas diferentes. Primeiro transformaremos o digits dataset em dois pandas dataframe. Um com as representações matriciais dos dígitos(data_x) e suas classificações(target_y). E ao invés de utilizar toda a base de dados menos o último elemento para o treino do modelo e usar esse último elemento que ficou de fora para a avaliação do modelo, como fizemos na aula passada, vamos fazer o seguinte: Dividiremos a base em 33% dos registros para teste do modelo e 67% para treinar o modelo. Depois veremos como o modelo vai se sair, vamos ver qual sua eficiência, qual o seu score, qual seu nível de assertividade, e também vamos submeter um registro qualquer dos 33% da base, referente aos dados de teste, para vê se o modelo acerta a previsão ou não. A execução do exemplo abaixo salva o modelo em disco, ou seja, salva o estado do nosso modelo em predict_digits_model.sav. Depois restaura seu estado na memória a partir do arquivo salvo em disco e submete o modelo recém carregado a uma avaliação e dá um print no resultado.

Então, vamos lá!


# importa os dataset que vem com o sklearn
from sklearn import datasets
# importa o pandas como pd
import pandas as pd
# Carrega o digits dataset na variável digits
digits = datasets.load_digits()
# Transforma os dados em pandas dataframe
data_x = pd.DataFrame(digits.data)
target_y = pd.DataFrame(digits.target)
#Importa o svm(support vector machine) do sklearn
from sklearn import svm
# Instancia um objeto svm em clf
clf = svm.SVC(gamma=0.001, C=100.)
#---------- Dividinda a base (Treino e Teste)
test_size = 0.33
seed = 7
# Importa do sklearn o train_test_split
from sklearn.model_selection import train_test_split
#Divisão do digits dataset em treino e teste
X_train, X_test, Y_train, Y_test = train_test_split(data_x, target_y, test_size = test_size, random_state = seed)
#-------- Treinando o modelo -------------
# Treina o modelo clf
clf.fit(X_train, Y_train)
# Prevê o valor do registro 472 do dígito do dataset, que é um 7.
clf.predict(data_x[:][472:473])
# Vamos conferir se o modelo acertou com
target_y[:][472:473]
# Mostra o quanto o modelo é acertivo.
clf.score(X_test, Y_test)
#------   Salvando o modelo -----------------
# importa o pickle
import pickle
# Define o nome do arquivo em disco que irá 
# guardar o nosso modelo
filename = 'predict_digits_model.sav'
# salva o modelo no disco
pickle.dump(clf, open(filename, 'wb'))
# Carregando o modelo do disco
loaded_model = pickle.load(open(filename, 'rb'))
# Atribui a variável result o score do modelo
result = loaded_model.score(X_test, Y_test)
#Imprime o resultado
print(result)

Valeu, ficamos por aqui e nos vemos na próxima aula.

Link do meu Github com o script dessa aula:

Download do script da aula

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

Novamente deixo meus link de afiliados:

Hostinger

Digital Ocean

One.com

Obrigado, até a próxima e bons estudos. ;)