Aula 10 - Scikit-Learn - Persistência do modelo com Pickle
Link do meu Github com o script dessa aula:
Link da documentação oficial do Sklearn:
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:
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:
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:
Obrigado, até a próxima e bons estudos. ;)