L’entraînement des modèles de Machine est souvent une tâche lourde et surtout extrêmement chronophage. Il s’agit donc d’un travail qui doit pouvoir être sérialisé quelque part afin que les programmes l’utilisant n’ait plus à ré-effectuer cette longue opération. C’est ce que l’on appelle la persistance, et les frameworks tels que Scikit-Learn, XGBoost ainsi que les autres prévoient bien sur ce type d’opération.
Index
Avec Scikit-Learn
Si vous utilisez Scikit-Learn, rien n’est plus simple. il vous faudra utiliser les méthodes dump et load et le tour sera joué. Suivez le guide…
Tout d’abord nous allons entraîner un modèle simple (une bonne vieille régression linéaire) :
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import linear_model
data = pd.read_csv("./data/univariate_linear_regression_dataset.csv")
plt.scatter (data.col2, data.col1)
X = data.col2.values.reshape(-1, 1)
y = data.col1.values.reshape(-1, 1)
regr = linear_model.LinearRegression()
regr.fit(X, y)
Ensuite nous allons tester notre modèle ainsi entraîné avec la méthode fit()
regr.predict([[30]])
On obtient une prévision de 22.37707681
Faisons maintenant un dump de notre modèle. Nous allons ainsi le sauvegarder dans un fichier (ici monpremiermodele.modele) :
from joblib import dump, load
dump(regr, 'monpremiermodele.modele')
Le modèle entrainé est ainsi sauvegardé dans un fichier binaire. On peut maintenant imaginer éteindre notre ordinateur, et le rallumer par exemple. Nous allons réactiver notre modèle via la méthode load() combinée avec le fichier précédemment sauvegardé sur disque :
regr2 = load('monpremiermodele.modele')
regr2.predict([[30]])
Si on re-teste la prédiction avec la même valeur que juste après l’entraînement on obtient – non pas par magie – exactement le même résultat.
Comme d’habitude vous trouverez le code intégral sur Github.
Avec XGBoost
Nous l’avons déjà vu dans l’article traitant XGBoost, mais voici un petit récapitulatif. La librairie XBoost (en mode standalone) inclu bien sur la possibilité de sauvegarder et recharger un modèle:
boost._Booster.save_model('titanic.modele')
Chargement d’un modèle sauvegardé :
boost = xgb.Booster({'nthread': 4}) boost.load_model('titanic.modele')
Vous remarquerez que si les principes de sauvegarde et chargement sont les mêmes, les noms des méthodes diffèrent, attention donc !
Avec CatBoost
Nous n’avons pas évoqué cet aspect là dans l’article qui présentait l’algorithme CatBoost. Nous allons remédiez à cette lacune d’autant qu’évidemment nous procéderons encore d’une manière différente (enfin sur quelques détails …).
Pour sauvegarder un modèle Catboost:
cb.CatBoost.save_model(clf,
"catboost.modele",
format="cbm",
export_parameters=None,
pool=None)
vous remarquez que nous avons beaucoup plus de paramètres et donc de possibilités pour sauvegarder le modèle (format, export des paramètres, données d’entrainement, etc.). N’hésitez pas à consulter la documentation pour voir le descriptif de ces paramètres.
Et pour recharger un modèle existant (à partir du fichier) :
from catboost import CatBoostClassifier
clf2 = CatBoostClassifier()
clf2.load_model(fname="catboost.modele", format="cbm")
La nuance ici c’est que c’est l’objet modèle (clf2) qui appelle la méthode load_model() et non l’objet CatBoost.
Et voilà maintenant vous allez pouvoir préparer vos modèles pour pouvoir les réutiliser directement (c’est à dire sans entraînement) à partir de vos programmes ou API.
Ingénieur en informatique avec plus de 20 ans d’expérience dans la gestion et l’utilisation de données, Benoit CAYLA a mis son expertise au profit de projets très variés tels que l’intégration, la gouvernance, l’analyse, l’IA, la mise en place de MDM ou de solution PIM pour le compte de diverses entreprises spécialisées dans la donnée (dont IBM, Informatica et Tableau). Ces riches expériences l’ont naturellement conduit à intervenir dans des projets de plus grande envergure autour de la gestion et de la valorisation des données, et ce principalement dans des secteurs d’activités tels que l’industrie, la grande distribution, l’assurance et la finance. Également, passionné d’IA (Machine Learning, NLP et Deep Learning), l’auteur a rejoint Blue Prism en 2019 et travaille aujourd’hui en tant qu’expert data/IA et processus. Son sens pédagogique ainsi que son expertise l’ont aussi amené à animer un blog en français (datacorner.fr) ayant pour but de montrer comment comprendre, analyser et utiliser ses données le plus simplement possible.
One Reply to “La persistance des modèles de Machine Learning”