phone pattern number naive machine learning guide classifying bayes python machine-learning classification nltk bayesian

pattern - python naive bayes text classification



Guarde el clasificador capacitado de Naive Bayes en NLTK (3)

Estoy un poco confundido con respecto a cómo guardo un clasificador entrenado. Como en, volver a entrenar un clasificador cada vez que quiero usarlo es obviamente muy malo y lento, ¿cómo lo guardo y lo cargo nuevamente cuando lo necesito? El código está abajo, gracias de antemano por su ayuda. Estoy usando Python con 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)


Ahorrar:

import pickle f = open(''my_classifier.pickle'', ''wb'') pickle.dump(classifier, f) f.close()

Para cargar más tarde:

import pickle f = open(''my_classifier.pickle'', ''rb'') classifier = pickle.load(f) f.close()


Para restablecer el clasificador en escabeche:

f = open(''originalnaivebayes5k.pickle'',''rb'') classifier = pickle.load(f) classifier.train(training_set) print(''Accuracy:'',nltk.classify.accuracy(classifier,testing_set)*100) f.close()


Pasé por el mismo problema, y ​​no puede guardar el objeto ya que es una clase ELEFreqDistr NLTK. De todos modos NLTK es infierno lento. La capacitación duró 45 minutos en un conjunto decente y decidí implementar mi propia versión del algoritmo (ejecutarlo con pypy o cambiarle el nombre a .pyx e instalar cython). Lleva aproximadamente 3 minutos con el mismo conjunto y simplemente puede guardar datos como json (implementaré pickle que es más rápido / mejor).

Empecé un proyecto simple de Github, mira el código here