Python 如何改变NLTK和xFF1F中朴素贝叶斯分类器的平滑方法;

Python 如何改变NLTK和xFF1F中朴素贝叶斯分类器的平滑方法;,python,machine-learning,nltk,bayesian,smoothing,Python,Machine Learning,Nltk,Bayesian,Smoothing,我用NLTK朴素贝叶斯方法训练了一个垃圾邮件分类器。垃圾邮件集和非垃圾邮件集在训练中都有20000个单词实例 我注意到,当遇到未知特征时,分类器会给出0.5的垃圾邮件概率: >>> print classifier.prob_classify({'unkown_words':True}).prob('spam') 0.5 In [23]: classifier.prob_classify({'unknown_words': True}).prob('spam') Out[23

我用NLTK朴素贝叶斯方法训练了一个垃圾邮件分类器。垃圾邮件集和非垃圾邮件集在训练中都有20000个单词实例

我注意到,当遇到未知特征时,
分类器
会给出
0.5
的垃圾邮件概率:

>>> print classifier.prob_classify({'unkown_words':True}).prob('spam')
0.5
In [23]: classifier.prob_classify({'unknown_words': True}).prob('spam')
Out[23]: 0.40000333322222587

我知道这叫做贝叶斯分类。但是,我想将垃圾邮件概率设置为
0.4
,因为未知功能更可能来自普通用户。如何用NLTK实现它?

我找到了一个非常简单的方法来解决这个问题

我选择了12000个垃圾邮件帐户和18000个普通帐户来重新训练朴素贝叶斯分类器。垃圾邮件账户与普通账户的比例为0.4/0.6

因此,当分类器接收到训练集的未知特征时,它给出0.4的垃圾邮件概率:

>>> print classifier.prob_classify({'unkown_words':True}).prob('spam')
0.5
In [23]: classifier.prob_classify({'unknown_words': True}).prob('spam')
Out[23]: 0.40000333322222587

你有没有找到一种方法来找出NLTK中的naive Bayes进行计算?你能回答吗?这实际上不是拉普拉斯平滑;NLTK书本身()以及NLTK.naivebayes源代码()中解释了获得0.5概率背后的数学原理。具体地说,源代码的评论说,“如果分类器遇到一个输入,而该输入具有任何标签都从未见过的特性,那么它将忽略该特性,而不是为所有标签指定0的概率。”