Comment enregistrer un classificateur Naive Bayes entraîné sur le disque et l'utiliser pour prédire les données?
J'ai l'exemple de programme suivant du site Web scikit-learn:
from sklearn import datasets
iris = datasets.load_iris()
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)
print "Number of mislabeled points : %d" % (iris.target != y_pred).sum()
Vous pouvez également utiliser joblib.dump et joblib.load qui est beaucoup plus efficace pour gérer les tableaux numériques que le sélecteur python par défaut.
Joblib est inclus dans scikit-learn:
Edit: dans Python 3.8+, il est maintenant possible d'utiliser pickle pour un décapage efficace des objets avec de grands tableaux numériques comme attributs si vous utilisez le protocole pickle 5 (qui n'est pas la valeur par défaut).
la source
fit
méthode si c'est ce que vous recherchez. Cela étant dit,joblib.load
ne devrait pasjoblib.dump
déclencher d' exception après un succès si vous l'appelez à partir d'un Python avec la même version de la bibliothèque scikit-learn.--pylab
indicateur de ligne de commande ou la%pylab
magie car la surcharge de l'espace de noms implicite est connue pour interrompre le processus de décapage. Utilisez%matplotlib inline
plutôt les importations explicites et la magie.Ce que vous recherchez s'appelle Persistance du modèle dans les mots sklearn et est documenté dans l' introduction et dans les sections de persistance du modèle .
Vous avez donc initialisé votre classificateur et l'avez formé pendant longtemps avec
Après cela, vous avez deux options:
1) Utilisation de cornichon
2) Utilisation de Joblib
Une fois de plus, il est utile de lire les liens mentionnés ci-dessus
la source
Dans de nombreux cas, en particulier avec la classification de texte, il ne suffit pas de stocker le classificateur, mais vous devrez également stocker le vectoriseur afin de pouvoir vectoriser votre entrée à l'avenir.
cas d'utilisation futur:
Avant de vider le vectorizer, on peut supprimer la propriété stop_words_ du vectorizer en:
pour rendre le dumping plus efficace. De plus, si les paramètres de votre classificateur sont clairsemés (comme dans la plupart des exemples de classification de texte), vous pouvez convertir les paramètres de denses en paramètres clairsemés, ce qui fera une énorme différence en termes de consommation de mémoire, de chargement et de vidage. Sparsify le modèle en:
Ce qui fonctionnera automatiquement pour SGDClassifier, mais si vous savez que votre modèle est clairsemé (beaucoup de zéros dans clf.coef_), vous pouvez convertir manuellement clf.coef_ en une matrice csr scipy sparse en:
et vous pouvez ensuite le stocker plus efficacement.
la source
sklearn
Les estimateurs mettent en œuvre des méthodes pour vous permettre d'enregistrer facilement les propriétés entraînées pertinentes d'un estimateur. Certains estimateurs implémentent les__getstate__
méthodes eux-mêmes, mais d'autres, comme leGMM
utilisent simplement l' implémentation de base qui enregistre simplement le dictionnaire interne des objets:La méthode recommandée pour enregistrer votre modèle sur disque consiste à utiliser le
pickle
module:Cependant, vous devez enregistrer des données supplémentaires afin de pouvoir recycler votre modèle à l'avenir, ou subir des conséquences désastreuses (comme être verrouillé dans une ancienne version de sklearn) .
De la documentation :
Ceci est particulièrement vrai pour les estimateurs Ensemble qui s'appuient sur le
tree.pyx
module écrit en Cython (tel queIsolationForest
), car il crée un couplage à l'implémentation, qui n'est pas garanti pour être stable entre les versions de sklearn. Il a vu des changements rétrocompatibles dans le passé.Si vos modèles deviennent très volumineux et que le chargement devient une nuisance, vous pouvez également utiliser les plus efficaces
joblib
. De la documentation:la source
but can only pickle to the disk and not to a string
Mais vous pouvez le ramasser dans StringIO à partir de joblib. C'est ce que je fais tout le temps.The training data, e.g. a reference to a immutable snapshot
ici? TIA!sklearn.externals.joblib
est obsolète depuis0.21
et sera supprimé dansv0.23
:Par conséquent, vous devez installer
joblib
:et enfin écrivez le modèle sur le disque:
Maintenant, pour lire le fichier sauvegardé, il vous suffit d'exécuter:
la source