保存朴素贝叶斯训练分类器在NLTK
对于我如何保存一个训练有素的分类器,我有点困惑。 就像在我每次想使用它时重新训练一个分类器显然是非常糟糕和缓慢的,我如何保存它并在我需要的时候再次加载呢? 代码如下,预先感谢您的帮助。 我正在使用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)
保存:
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分钟的一个体面的设置,我决定实现我自己的algorithm版本(运行与pypy或重命名.pyx和安装cython)。 它需要大约3分钟的相同的设置,它可以简单地保存数据为JSON(我会实施酸橙更快/更好)。
我开始了一个简单的github项目,在这里查看代码