Python NLTK中保存朴素贝叶斯训练分类器

Python NLTK中保存朴素贝叶斯训练分类器,python,machine-learning,classification,nltk,naivebayes,Python,Machine Learning,Classification,Nltk,Naivebayes,对于如何保存经过训练的分类器,我有点困惑。就像在中一样,每次我想使用分类器时,重新训练它显然是非常糟糕和缓慢的,我如何保存它并在需要时再次加载它?代码如下,提前感谢您的帮助。我正在使用Python和NLTK朴素贝叶斯分类器 classifier = nltk.NaiveBayesClassifier.train(training_set) # look inside the classifier train method in the source code of the NLTK librar

对于如何保存经过训练的分类器,我有点困惑。就像在中一样,每次我想使用分类器时,重新训练它显然是非常糟糕和缓慢的,我如何保存它并在需要时再次加载它?代码如下,提前感谢您的帮助。我正在使用Python和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)

我遇到了同样的问题,您无法保存该对象,因为它是EleFreqDistrict NLTK类。无论如何,NLTK的速度非常慢。培训花了45分钟在一个像样的集合上,我决定实现我自己的算法版本(用pypy运行它,或者重命名为.pyx并安装cython)。使用同一个集合大约需要3分钟,它可以简单地将数据保存为json(我将实现pickle,它更快/更好)

我启动了一个简单的github项目,请查看要保存的代码:

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()

要重新培训酸洗分级器,请执行以下操作:

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

你是在要求某种持久性策略吗?在“保存到数据库”中,是否再次文件和加载?您可以对数据进行pickle处理,稍后再加载。谢谢@luke14free,您有如何使用它的文档吗?提前谢谢你。如果我想用已经腌制好的机器重新训练我的模型,我该怎么做呢模型导入pickle f=open('my_classifier.pickle','rb')classifier=pickle.load(f)…然后?我得到
类型错误:无法pickle模块对象