【问题标题】:Save Naive Bayes Trained Classifier in NLTK在 NLTK 中保存朴素贝叶斯训练分类器
【发布时间】:2012-04-18 12:19:06
【问题描述】:

对于如何保存经过训练的分类器,我有些困惑。例如,每次我想使用它时重新训练一个分类器显然真的很糟糕而且很慢,我如何保存它并在需要时再次加载它?代码如下,提前感谢您的帮助。我正在使用带有 NLTK 朴素贝叶斯分类器的 Python。

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)

【问题讨论】:

  • 您是否要求某种持久性策略?与保存到数据库、文件并再次加载一样?您可以只腌制数据并稍后再次加载。

标签: python machine-learning classification nltk naivebayes


【解决方案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()

【讨论】:

  • 如果我想使用已经腌制的模型重新训练我的模型,我该怎么做? import pickle f = open('my_classifier.pickle', 'rb') 分类器 = pickle.load(f) .....那么?
  • 我收到TypeError: can't pickle module objects
【解决方案2】:

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

我开始了一个简单的github项目,查看代码here

【讨论】:

  • 谢谢@luke14free,你有如何使用它的文档吗?提前谢谢你。
【解决方案3】:

重新训练腌制分类器:

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

【讨论】:

    猜你喜欢
    • 2017-08-30
    • 2012-12-05
    • 2015-06-25
    • 2020-09-13
    • 2023-03-23
    • 2017-06-21
    • 2016-09-28
    • 2013-04-11
    相关资源
    最近更新 更多