2012-04-04 11 views
46

Sono leggermente confuso riguardo al modo in cui salvi un classificatore esperto. Come in questo, rieducare un classificatore ogni volta che voglio usarlo è ovviamente molto brutto e lento, come posso salvarlo e caricarlo di nuovo quando ne ho bisogno? Il codice è sotto, grazie in anticipo per il vostro aiuto. Sto usando Python con NLTK Naive Bayes Classifier.Salva classificatore addestrato Naive Bayes in NLTK

+2

Are y stai chiedendo un qualche tipo di strategia di persistenza? Come in save to DB, file e caricare di nuovo? Potresti semplicemente raccogliere i dati e caricarli di nuovo in seguito. – EdChum

risposta

80

Per salvare:

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

Per caricare successivamente:

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

come farei se volessi riqualificare il mio modello usando un modello già decapato? importazione salamoia f = open ('my_classifier.pickle', 'rb') classificatore = pickle.load (f) ..... poi? – Mohsin

5

Sono andato attraverso lo stesso problema, e non è possibile salvare l'oggetto poiché è una classe NLTK ELEFreqDistr. Comunque, NLTK è un inferno lento. La formazione ha richiesto 45 minuti su un set decente e ho deciso di implementare la mia versione dell'algoritmo (eseguirlo con pypy o rinominarlo .pyx e installare cython). Ci vogliono circa 3 minuti con lo stesso set e può semplicemente salvare i dati come json (implementerò pickle che è più veloce/migliore).

ho iniziato un semplice progetto github, controlla il codice here

+0

Grazie @ luke14free, hai una documentazione su come usarlo? Grazie in anticipo. – Istvan

+0

Vedo il tuo codice ma non implemento cython ancora –

0

per riqualificare la sott'aceto 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()