2012-04-04 33 views
46

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.Guardar clasificador capacitado de Naive Bayes en NLTK

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) 
+2

Are y ¿Estás pidiendo algún tipo de estrategia de persistencia? Como en salvar a DB, ¿archivar y cargar de nuevo? Podrías resumir los datos y volver a cargarlos más tarde. – EdChum

Respuesta

80

Para guardar:

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() 
+0

¿cómo lo haré si quiero volver a entrenar mi modelo usando un modelo ya encurtido? import pickle f = open ('mi_clasificador.pickle', 'rb') clasificador = pickle.load (f) ..... ¿entonces? – Mohsin

5

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 github sencilla, echa un vistazo al código here

+0

Gracias @ luke14free, ¿tiene una documentación sobre cómo usarlo? Gracias de antemano. – Istvan

+0

Veo tu código pero aún no implemento cython –

0

volver a entrenar el escabeche Classifer:

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