Team I.A. Italia

4 min

Come salvare e caricare modelli di Machine Learning con Python e scikit-learn

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.

Come salvare e caricare modelli di Machine Learning con Python e scikit-learn

Ciò ti consente di salvare il tuo modello su file e caricarlo in un secondo momento per fare previsioni.

Panoramica dell'esercitazione

Questo tutorial è diviso in 3 parti, sono:

  1. Salva il tuo modello con pickle

  2. Salva il tuo modello con joblib

  3. Suggerimenti per salvare il tuo modello

Come salvare il tuo modello con Pickle

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!

Come salvare il tuo modello con joblib

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

Suggerimenti per salvare il tuo modello

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.

Riepilogo

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.