2012-04-04 31 views
46

Tôi hơi bối rối về cách tôi lưu một trình phân loại được đào tạo. Như trong, đào tạo lại một phân loại mỗi khi tôi muốn sử dụng nó rõ ràng là thực sự xấu và chậm, làm thế nào để tôi lưu nó và tải nó một lần nữa khi tôi cần nó? Mã dưới đây, cảm ơn trước sự giúp đỡ của bạn. Tôi đang sử dụng Python với NLTK Naive Bayes Classifier.Lưu phân loại Naive Bayes được đào tạo trong 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

Có phải y ou yêu cầu một số loại chiến lược kiên trì? Như trong lưu vào DB, tập tin và tải lại? Bạn chỉ có thể chọn dữ liệu và tải lại sau. – EdChum

Trả lời

80

Để tiết kiệm:

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

Để tải sau:

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

làm thế nào tôi có thể đi về nó nếu tôi muốn đào tạo lại mô hình của tôi bằng cách sử dụng một mô hình đã được ngâm? nhập khẩu pickle f = mở ('my_classifier.pickle', 'rb') classifier = pickle.load (f) ..... sau đó? – Mohsin

5

Tôi đã chuyển qua cùng một vấn đề và bạn không thể lưu đối tượng vì đây là lớp ELEFreqDistr NLTK. Nhưng dù sao NLTK lại chậm quá. Đào tạo mất 45 phút trên một bộ phong nha và tôi quyết định thực hiện phiên bản của riêng tôi của thuật toán (chạy nó với pypy hoặc đổi tên nó .pyx và cài đặt cython). Nó mất khoảng 3 phút với cùng một bộ và nó chỉ đơn giản có thể lưu dữ liệu như json (tôi sẽ thực hiện dưa mà là nhanh hơn/tốt hơn).

tôi bắt đầu một dự án github đơn giản, hãy kiểm tra mã here

+0

Cảm ơn @ luke14free, bạn có tài liệu hướng dẫn cách sử dụng không? Cảm ơn bạn trước. – Istvan

+0

Tôi thấy bạn mã nhưng không thực hiện cython chưa –

0

phải đào tạo lại Pickled 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()