我使用NLTK的朴素贝叶斯方法训练了一个垃圾邮件分类器。训练集中垃圾邮件和非垃圾邮件各有20,000个词实例。
我注意到当遇到未知特征时,classifier
会给出0.5
的垃圾邮件概率:
>>> print classifier.prob_classify({'unkown_words':True}).prob('spam')0.5
我知道这在贝叶斯分类中被称为Laplace Smoothing
。然而,我想将未知特征的垃圾邮件概率设置为0.4
,因为未知特征更可能是来自普通用户。我该如何在NLTK中实现这一点?
回答:
我发现了一个非常简单的方法来解决这个问题。
我选择了12,000个垃圾邮件账户和18,000个普通账户来重新训练朴素贝叶斯分类器。垃圾邮件账户和普通账户的比例为0.4 / 0.6。
因此,当分类器接收到训练集中未知特征时,它会给出0.4的垃圾邮件概率:
In [23]: classifier.prob_classify({'unknown_words': True}).prob('spam')Out[23]: 0.40000333322222587