Team I.A. Italia
4 min
Trovare un modello di machine learning accurato non è la fine del progetto.
In questo post scoprirai come salvare e caricare il tuo modello di machine learning in Python usando scikit-learn.
Ciò ti consente di salvare il tuo modello su file e caricarlo in un secondo momento per fare previsioni.
Questo tutorial è diviso in 3 parti, sono:
Salva il tuo modello con pickle
Salva il tuo modello con joblib
Suggerimenti per salvare il tuo modello
Pickle è il modo standard per serializzare oggetti in Python.
È possibile utilizzare l' operazione pickle per serializzare gli algoritmi di machine learning e salvare il formato serializzato in un file. Successivamente puoi caricare questo file per deserializzare il tuo modello e usarlo per fare nuove previsioni.
L'esempio seguente mostra come addestrare un modello di regressione logistica sul set di dati sull'insorgenza del diabete , salvare il modello in un file e caricarlo per fare previsioni sul set di test.
# Importiamo le librerie e scarichiamo il dataset
import pandas
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
import pickle
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
test_size = 0.33
seed = 7
X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, Y, test_size=test_size, random_state=seed)
# Alleniamo il moello sui dati di Train
model = LogisticRegression()
model.fit(X_train, Y_train)
# Salviamo il modello nella memoria locale del nostro PC
filename = 'finalized_model.sav'
pickle.dump(model, open(filename, 'wb'))
# qualche settimana dopo...
# Carichiamo il modello dalla memoria locale del nostro PC
loaded_model = pickle.load(open(filename, 'rb'))
result = loaded_model.score(X_test, Y_test)
print(result)
L'esecuzione dell'esempio salva il modello in finalized_model.sav nella directory di lavoro locale.
Nota : i risultati possono variare a causa della natura stocastica dell'algoritmo o della procedura di valutazione, o delle differenze nella precisione numerica. Considera di eseguire l'esempio alcune volte e confrontare il risultato medio.
Caricare il modello salvato e valutarlo fornisce una stima dell'accuratezza del modello su dati di test.
0.755905511811
Hai bisogno di aiuto con Machine Learning in Python?
Partecipa al nostro corso gratuito da oltre 120 lezioni e scopri la preparazione dei dati, gli algoritmi e altro (con il codice).
Fai clic per iscriverti ora e ottenere anche un ebook PDF gratuitis sul machine learning.
Inizia ora il tuo mini-corso GRATUITO!
Joblib fa parte dell'ecosistema SciPy e fornisce utilità per la pipeline di lavori Python.
Fornisce utilità per il salvataggio e il caricamento di oggetti Python che utilizzano le strutture di dati NumPy, in modo efficiente.
Questo può essere utile per alcuni algoritmi di apprendimento automatico che richiedono molti parametri o archiviano l'intero set di dati (come K-Nearest Neighbors).
L'esempio seguente mostra come addestrare un modello di regressione logistica sul set di dati dell'insorgenza del diabete, salvare il modello in un file utilizzando joblib e caricarlo per fare previsioni sul set di test.
# Importiamo le librerie e scarichiamo il dataset
import pandas
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
import joblib
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
test_size = 0.33
seed = 7
X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, Y, test_size=test_size, random_state=seed)
# Alleniamo il modello sui dati di Training
model = LogisticRegression()
model.fit(X_train, Y_train)
# Salviamo il modello nella memoria locale del nostro PC
filename = 'finalized_model.sav'
joblib.dump(model, filename)
# Qualche giorno o settimana dopo ..
# Carichiamo il modello dalla memoria locale del nostro PC
loaded_model = joblib.load(filename)
result = loaded_model.score(X_test, Y_test)
print(result)
L'esecuzione dell'esempio salva il modello in un file come finalized_model.sav e crea anche un file per ogni matrice NumPy nel modello (quattro file aggiuntivi).
Nota : i risultati possono variare a causa della natura stocastica dell'algoritmo o della procedura di valutazione, o delle differenze nella precisione numerica. Considera di eseguire l'esempio alcune volte e confrontare il risultato medio.
Dopo che il modello è stato caricato, viene riportata una stima dell'accuratezza del modello su dati di test.
0.755905511811
Questa sezione elenca alcune considerazioni importanti durante la finalizzazione dei modelli di machine learning.
Versione Python . Prendi nota della versione Python. Quasi sicuramente hai bisogno della stessa versione principale (e forse minore) di Python usata per serializzare il modello quando in seguito lo carichi e lo deserializzi.
Versioni della libreria . La versione di tutte le principali librerie utilizzate nel tuo progetto di machine learning deve quasi certamente essere la stessa durante la deserializzazione di un modello salvato. Questo non è limitato alla versione di NumPy e alla versione di scikit-learn.
Serializzazione manuale . Potresti voler emettere manualmente i parametri del tuo modello appreso in modo da poterli utilizzare direttamente in scikit-learn o in un'altra piattaforma in futuro. Spesso gli algoritmi utilizzati dagli algoritmi di apprendimento automatico per fare previsioni sono molto più semplici di quelli utilizzati per apprendere i parametri possono essere facili da implementare nel codice personalizzato su cui hai il controllo.
Prendere nota della versione in modo da poter ricreare l'ambiente se per qualche motivo non è possibile ricaricare il modello su un'altra macchina o su un'altra piattaforma in un secondo momento.
In questo post hai scoperto come rendere persistenti i tuoi algoritmi di machine learning in Python con scikit-learn.
Hai imparato due tecniche che puoi usare:
L'API pickle per la serializzazione di oggetti Python standard.
L'API joblib per serializzare in modo efficiente oggetti Python con array NumPy.
Hai domande sul salvataggio e sul caricamento del tuo modello?
Poni le tue domande nei commenti e faremo del nostro meglio per risponderti.