将您的
分类器
对象解封将重新创建与封装时相同状态的对象,这样您就可以继续使用来自数据集的新鲜数据进行更新。在程序运行结束时,再次对
分类器
进行封装并保存到文件中是个好主意。最好不要覆盖同一文件,而是保留备份(甚至更好地,一系列备份),以防万一出了问题。这样,您可以轻松回到已知良好状态的
分类器
。
应该使用一个简单的程序和一个简单的对象进行封装和解封的实验,直到您完全自信掌握了所有原理。
下面是如何更新封装的
分类器
数据的草图。
import pickle
import os
from os.path import exists
picklename = "naivebayes.pickle"
featuresets = [(find_features(rev), category) for (rev, category) in documents]
numtrain = int(len(documents) * 90 / 100)
training_set = featuresets[:numtrain]
testing_set = featuresets[numtrain:]
if exists(picklename):
with open(picklename, "rb") as f:
classifier = pickle.load(f)
classifier.train(training_set)
else:
classifier = nltk.NaiveBayesClassifier.train(training_set)
if exists(picklename):
backupname = picklename + '.bak'
if exists(backupname):
os.remove(backupname)
os.rename(picklename, backupname)
with open(picklename, "wb") as f:
pickle.dump(classifier, f)
第一次运行此程序将创建一个新的
分类器
,使用
training_set
中的数据进行训练,然后将
分类器
储存为“naivebayes.pickle”。每次运行此程序时,它都会加载旧的
分类器
并向其应用更多的训练数据。
另外,如果您正在使用Python 2,则应该使用更快的
cPickle
模块;您可以通过替换...(无法翻译完整内容,请提供完整文本)
import pickle
使用
import cPickle as pickle