如何更改 NLTK 中朴素贝叶斯分类器的平滑方法?
Posted
技术标签:
【中文标题】如何更改 NLTK 中朴素贝叶斯分类器的平滑方法?【英文标题】:How to change smoothing method of Naive Bayes classifier in NLTK? 【发布时间】:2013-05-22 04:36:56 【问题描述】:我已经使用 NLTK 朴素贝叶斯方法训练了一个垃圾邮件分类器。垃圾邮件集和非垃圾邮件集都有 20,000 个单词在训练中的实例。
我注意到当遇到未知功能时,classifier
给它0.5
垃圾邮件的概率:
>>> print classifier.prob_classify('unkown_words':True).prob('spam')
0.5
我知道这在贝叶斯分类中称为Laplace Smoothing
。但是,我想将unknown features 的垃圾邮件概率设置为0.4
,因为未知功能更可能来自普通用户。如何使用 NLTK 实现它?
【问题讨论】:
这其实不是拉普拉斯平滑; NLTK 书本身 (nltk.org/book/ch06.html) 以及 NLTK.naivebayes 源代码 (nltk.org/_modules/nltk/classify/naivebayes.html) 中解释了您获得 0.5 概率背后的数学原理。具体来说,源代码的注释说“如果分类器遇到一个输入具有从未见过的任何标签的特征,那么它不会为所有标签分配 0 的概率,而是忽略该特征。” 【参考方案1】:我找到了一个非常简单的方法来解决这个问题。
我选择了 12,000 个垃圾邮件帐户和 18,000 个正常帐户来重新训练朴素贝叶斯分类器。垃圾账号与普通账号的比例为0.4 / 0.6。
所以当分类器接收到训练集的未知特征时,它给出 0.4 的垃圾邮件概率:
In [23]: classifier.prob_classify('unknown_words': True).prob('spam')
Out[23]: 0.40000333322222587
【讨论】:
你有没有找到一种方法来找出 NLTK 朴素贝叶斯的计算方法?你能回答this question吗?以上是关于如何更改 NLTK 中朴素贝叶斯分类器的平滑方法?的主要内容,如果未能解决你的问题,请参考以下文章