我有很多文本数据,我想进行分类。我通过块(例如500个示例)递增地获得这些数据。 我想用NLTK在这些块中训练NaiveBayesClassifier,但是要进行零碎的训练。
我可以用一个夹头进行训练NaiveBayesClassifier,然后用它来训练下一个块等吗?
我在文档中找不到这个问题的答案。
答案 0 :(得分:1)
您应该使用NLTK包装器进行scikit-learn并使用scikit-learn提供的Naive Bayes实现。这个支持部分拟合,它完全符合您的要求:一次只训练部分数据。
参考文献:http://www.nltk.org/_modules/nltk/classify/scikitlearn.html和http://scikit-learn.org/stable/modules/naive_bayes.html
答案 1 :(得分:0)
我可以想到两个选项:
定期在新数据上重新训练分类器。你 在语料库中累积新的训练数据(已包含 原始训练数据),然后每当你得到你的下一个块, 重新培训重新加载分类器。这可能是最简单的 溶液
外部化内部模型,然后手动更新。该
可以通过给它一个直接创建NaiveBayesClassifier
label_prodist
和feature_probdist
。你可以创建这些
单独将它们传递给NaiveBayesClassifier
,然后更新
每当有新数据进入时它们就会出现。分类器会使用这个新数据
数据立即。您需要查看火车方法以获取详细信息
关于如何更新特定的概率分布
情况/要求。
如果您使用选项2 和,您不介意为了水平可伸缩性而牺牲小速度,您可以在Redis中保留模型创建一个使用Redis Hash进行存储/查找的ProbDistI
子类。然后你不必对语料库进行任何酸洗,分类器总是“开启”。
答案 2 :(得分:-1)
Weka有一个可更新的Naive Bayes实现。