Je suis un peu confus quant à la façon dont je sauve un classificateur formé. Comme dans, réentraîner un classificateur à chaque fois que je veux l'utiliser est évidemment très lent et lent, comment puis-je l'enregistrer et le charger à nouveau lorsque j'en ai besoin? Le code est ci-dessous, merci d'avance pour votre aide. J'utilise Python avec NLTK Naive Bayes Classifier.
classifier = nltk.NaiveBayesClassifier.train(training_set)
# look inside the classifier train method in the source code of the NLTK library
def train(labeled_featuresets, estimator=nltk.probability.ELEProbDist):
# Create the P(label) distribution
label_probdist = estimator(label_freqdist)
# Create the P(fval|label, fname) distribution
feature_probdist = {}
return NaiveBayesClassifier(label_probdist, feature_probdist)
Sauver:
import pickle
f = open('my_classifier.pickle', 'wb')
pickle.dump(classifier, f)
f.close()
Pour charger plus tard:
import pickle
f = open('my_classifier.pickle', 'rb')
classifier = pickle.load(f)
f.close()
Je suis passé par le même problème, et vous ne pouvez pas enregistrer l'objet car est une classe ELEFreqDistr NLTK. Quoi qu'il en soit, NLTK est un enfer lent. La formation a pris 45 minutes sur un set décent et j'ai décidé de mettre en œuvre ma propre version de l'algorithme (l'exécuter avec pypy ou le renommer en .pyx et installer cython). Cela prend environ 3 minutes avec le même ensemble et il peut simplement sauvegarder des données au format json (je vais implémenter pickle qui est plus rapide/meilleur).
J'ai commencé un projet simple github, consultez le code ici
Pour recycler le classificateur de cornichons:
f = open('originalnaivebayes5k.pickle','rb')
classifier = pickle.load(f)
classifier.train(training_set)
print('Accuracy:',nltk.classify.accuracy(classifier,testing_set)*100)
f.close()