我的问题与这个人的问题基本相同。NLTK书中关于朴素贝叶斯分类器的示例仅考虑单词在文档中是否出现作为特征,而没有考虑单词的频率作为“词袋”模型的特征。
一个回答似乎表明这不能用NLTK内置的分类器来实现。事实是这样吗?我如何用NLTK实现基于频率/词袋的朴素贝叶斯分类?
回答:
scikit-learn有多项式朴素贝叶斯的实现,这是这种情况下正确的朴素贝叶斯变体。不过,支持向量机(SVM)可能会表现得更好。
正如Ken在评论中指出的,NLTK有scikit-learn分类器的一个不错的封装。从文档中修改而来,这里有一个稍微复杂的例子,它进行TF-IDF加权,根据卡方统计选择1000个最佳特征,然后将其传递给多项式朴素贝叶斯分类器。(我猜这有点笨拙,因为我对NLTK和scikit-learn都不太熟悉。)
对我来说打印结果是:
Confusion matrix:524 376202 698
虽然不是完美的,但考虑到这不是一个超级简单的问题,并且只在100/100的样本上训练,效果还算不错。