Ответ 1
Чтобы сохранить:
import pickle
f = open('my_classifier.pickle', 'wb')
pickle.dump(classifier, f)
f.close()
Чтобы загрузить позже:
import pickle
f = open('my_classifier.pickle', 'rb')
classifier = pickle.load(f)
f.close()
Я немного смущен в отношении того, как я могу сохранить обученный классификатор. Как и в случае переучивания классификатора каждый раз, когда я хочу его использовать, очевидно, очень плохо и медленно, как я могу его сохранить и загрузить его снова, когда мне это нужно? Код ниже, заблаговременно за помощь. Я использую Python с 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)
Чтобы сохранить:
import pickle
f = open('my_classifier.pickle', 'wb')
pickle.dump(classifier, f)
f.close()
Чтобы загрузить позже:
import pickle
f = open('my_classifier.pickle', 'rb')
classifier = pickle.load(f)
f.close()
Я пошел по той же проблеме, и вы не можете сохранить объект, так как это класс ELEFreqDistr NLTK. Во всяком случае, NLTK - это ад медленный. Обучение заняло 45 минут на достойном наборе, и я решил реализовать свою собственную версию алгоритма (запустить его с помощью pypy или переименовать его .pyx и установить cython). Это займет около 3 минут с тем же набором, и он может просто сохранить данные как json (я буду использовать pickle, который быстрее/лучше).
Я начал простой проект github, проверил код здесь