2012-04-04 20 views
46

Eğitimli bir sınıflandırıcıyı nasıl kaydettiğimle ilgili olarak biraz kafam karıştı. Kullanmak istediğim her defasında bir sınıflandırıcıyı yeniden eğitmek gerçekten çok kötü ve yavaş, onu nasıl kaydederim ve ihtiyacım olduğunda tekrar yükler mi? Kod aşağıda, yardımlarınız için şimdiden teşekkürler. NLTK Naive Bayes Sınıflandırıcı ile Python kullanıyorum.Naif Bayes Eğitimli Sınıflandırıcı NLTK içinde kayıt olun

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 Bir çeşit ısrar stratejisi mi istiyorsun? DB'ye kaydedildiği gibi dosya ve tekrar yükleme yapılıyor mu? Verileri seçip daha sonra tekrar yükleyebilirsiniz. – EdChum

cevap

80

kaydetmek için kod kontrol, basit bir github projesini başlatan

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

Modelimi zaten sadık bir model kullanarak yeniden eğitmek istersem, bunun için nasıl giderim? import turşu f = open ('my_classifier.pickle', 'rb') sınıflandırıcı = pickle.load (f) ..... o zaman? – Mohsin

5

Aynı sorundan gittim ve nesneyi ELEFreqDistr NLTK sınıfından beri kaydedemezsiniz. Her neyse NLTK cehennem yavaş. Eğitim iyi bir sette 45 dakika sürdü ve kendi algoritmamı kendi algoritmamı uygulamaya koymaya karar verdim (pypy ile çalıştır ya da .pyx ile yeniden adlandır ve cython'u kur). Aynı set ile yaklaşık 3 dakika sürer ve verileri json olarak kaydedebilirim (daha hızlı/daha iyi olan turşu uygulayacağım).

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

sonradan yüklemek için::

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

Teşekkürler @ luke14free, nasıl kullanılacağını bir dokümantasyon var mı? Şimdiden teşekkür ederim. – Istvan

+0

Size kod görüyorum ama henüz bir sichon uygulamıyor –

0

yeniden eğit için Salamura classifer:

Ben here