Structures de sauvegarde de modèle de Machine Learning : le format pickle
Dans ce deuxième article de la série sur les structures de sauvegarde de modèle de machine learning, nous allons voir ensemble comment sauvegarder et charger des modèles de machine learning à l’aide de la bibliothèque Python Pickle, suivi de quelques exemples illustratifs.
En théorie
Pickle est un module Python qui permet la sérialisation et la désérialisation d’objets Python. En d’autres termes, il vous permet de convertir des objets Python en un format binaire qui peut être enregistré sur le disque et récupéré ultérieurement. Ce qui en fait un outil extrêmement utile pour la sauvegarde et la restauration de modèles de machine learning. Pickle comporte deux fonctions principales :
- pickle.dump(obj, file) : Cette fonction sérialise l’objet obj et l’écrit dans le fichier file en mode binaire.
- pickle.load(file) : Cette fonction lit des données binaires à partir du fichier file et les désérialise pour créer l’objet original.
Mais bien qu’il soit très facile d’utilisation grâce à ses deux principales fonctions , il faut s’assurer de :
- la compatibilité : on doit s’assurer que la version de Python utilisée pour sauvegarder le modèle est compatible avec la version de Python utilisée pour le charger. Les modèles Pickle peuvent ne pas être compatibles entre différentes versions de Python.
- la sécurité : par exemple, on ne doit pas utiliser pickle.load() pour charger des fichiers provenant de sources non fiables, car cela peut potentiellement exécuter un code malveillant.
Un peu de pratique
Sauvegarde d’un Modèle avec Pickle
Commençons par un exemple simple de sauvegarde d’un modèle de machine learning avec Pickle. Nous allons entraîner un modèle de régression linéaire à l’aide de la bibliothèque scikit-learn. Voici comment on peut le sauvegarder :
import pickle import numpy as np from sklearn.linear_model import LinearRegression import matplotlib.pyplot as plt # Générer des données synthétiques pour la régression np.random.seed(0) X = np.random.rand(100, 1) * 10 y = 2 * X + 1 + np.random.randn(100, 1) # Créer un modèle de régression linéaire model = LinearRegression() # Entraîner le modèle sur les données model.fit(X, y) # Faire des prédictions avec le modèle entraîné y_pred = model.predict(X) # Sauvegardez le modèle dans un fichier with open('modele.pickle', 'wb') as fichier: pickle.dump(model, fichier) # Tracer la régression en 2D plt.scatter(X, y, label='Données réelles') plt.plot(X, y_pred, color='red', linewidth=3, label='Régression linéaire') plt.xlabel('Variable indépendante') plt.ylabel('Variable dépendante') plt.legend() plt.title('Régression linéaire') plt.show() # Imprimer les coefficients du modèle entraîné print("Coefficient (pente) du modèle :", model.coef_) print("Terme constant du modèle :", model.intercept_)
Coefficient (pente) du modèle : [[1.9936935]] Terme constant du modèle : [1.22215108]
Chargement d’un Modèle avec Pickle
Pour charger le modèle sauvegardé à partir du fichier, nous pouvons utiliser la méthode pickle.load(). Voici comment cela fonctionne :
import pickle import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression # Charger le modèle depuis le fichier pickle with open('modele.pickle', 'rb') as fichier: loaded_model = pickle.load(fichier) # Générer des données synthétiques pour la régression np.random.seed(0) X = np.random.rand(100, 1) * 10 y = 2 * X + 1 + np.random.randn(100, 1) # Faire des prédictions avec le modèle chargé y_pred = loaded_model.predict(X) # Tracer la régression en 2D plt.scatter(X, y, label='Données réelles') plt.plot(X, y_pred, color='red', linewidth=3, label='Régression linéaire') plt.xlabel('Variable indépendante') plt.ylabel('Variable dépendante') plt.legend() plt.title('Régression linéaire avec modèle chargé') plt.show() # Imprimer les coefficients du modèle chargé print("Coefficient (pente) du modèle :", loaded_model.coef_) print("Terme constant du modèle :", loaded_model.intercept_)
Coefficient (pente) du modèle : [[1.9936935]] Terme constant du modèle : [1.22215108]
On peut voir que le modèle est exactement le même qu’on avait sauvegardé.
Pickle est un outil pratique et probablement le plus utilisé pour la sauvegarde et la restauration de modèles de machine learning en Python. Cependant, on doit s’assurer de prendre en compte certaines précautions telle que la compatibilité des versions pour une utilisation efficace.
Laisser un commentaire