我比较两个朴素贝叶斯分类器:一个from NLTK和一个from scikit-learn。我正在处理多类分类问题(3类:正(1),负(-1)和中立(0))。如果不执行任何特征选择(即使用所有可用特征),并且使用70,000个实例(嘈杂标记的,实例分布为17%阳性,4%阴性和78%中性)的训练数据集,我训练两个分类器,第一个是nltk.NaiveBayesClassifier,第二个是sklearn.naive_bayes.MultinomialNB(与fit_prior=True
)。scikits学习和nltk:朴素贝叶斯分类器性能高度不同
训练结束后,我评估了我的测试集30000个实例的分类,我得到下面的结果:
**NLTK's NaiveBayes**
accuracy: 0.568740
class: 1
precision: 0.331229
recall: 0.331565
F-Measure: 0.331355
class: -1
precision: 0.079253
recall: 0.446331
F-Measure: 0.134596
class: 0
precision: 0.849842
recall: 0.628126
F-Measure: 0.722347
**Scikit's MultinomialNB (with fit_prior=True)**
accuracy: 0.834670
class: 1
precision: 0.400247
recall: 0.125359
F-Measure: 0.190917
class: -1
precision: 0.330836
recall: 0.012441
F-Measure: 0.023939
class: 0
precision: 0.852997
recall: 0.973406
F-Measure: 0.909191
**Scikit's MultinomialNB (with fit_prior=False)**
accuracy: 0.834680
class: 1
precision: 0.400380
recall: 0.125361
F-Measure: 0.190934
class: -1
precision: 0.330836
recall: 0.012441
F-Measure: 0.023939
class: 0
precision: 0.852998
recall: 0.973418
F-Measure: 0.909197
我注意到,虽然Scikit的分类器具有更好的整体准确度和精密度,其召回是很与NLTK相比较低,至少在我的数据。考虑到它们可能(几乎)是相同的分类器,这不奇怪吗?
有什么特点?你也尝试过'BernoulliNB'吗?这应该更接近NLTK朴素贝叶斯。 –
感谢您的回复。如果文档中存在特征(布尔值),则这些特征是值为1的词。对于scikits BernoulliNB结果非常接近MultinomialNB:'精度:0.834680 类:1 \t精度:0.400380 \t回忆:0.125361 \t F-措施:0.190934 类:-1 \t精度:0.330836 \t回忆: 0.012441 \t F-措施:0.023939 类:0 \t精度:0.852998 \t回忆:0.973418 \t F-措施:0.909197' –
我可以在documentat看到的唯一的事离子是NLTK的NB分类器显然不会平滑。我不希望这会导致很大的区别,尽管... –