如何用简单易懂的语言描述朴素贝叶斯分类器?



作者:ICMLL实验室

在此,我借垃圾邮件分类来解释朴素贝叶斯分类器。首先,我们先来看一下贝叶斯公式

1) 数学书眼中的贝叶斯公式:

2) 机器学习眼中的贝叶斯公式:

3)垃圾邮件分类眼中的贝叶斯公式:

下面简单说明一下朴素贝叶斯分类器的“朴素”从何而来?

我们在训练模型的时候,由于训练集有限而垃圾邮件文本内容无限,不可能找到覆盖所有可能情况的训练集。所以将对文本的分析转换为对词或词的组合进行分析,也就是说不用句子作特征,而用句子中的词作特征。

分词之后,垃圾邮件分类眼中的贝叶斯公式变成了:

其中,p(“垃圾邮件”)依据先验知识可轻松得到。

问题在于p(“恭喜”,“你”,“中奖”,“了”│“垃圾邮件”) 依旧不好求。因此我们就引入了简单粗暴可以说很“朴素”的条件独立假设来简化问题,即认为项与项之间独立,其对最终结果的贡献互不影响。(注意这里指的是项与项之间互相独立,每一项可能代表一个词,即一元语言模型;也可能代表多个词,即n元语言模型)此时概率就简化为:

接下来,就是简单的统计工作,即计算垃圾邮件中各个词语出现的概率,便可以得到此句话在垃圾邮件中出现的概率了。进而也容易通过贝叶斯公式推导出某一封邮件是垃圾邮件的概率了,同样的方法能求出同一封邮件是正常邮件的概率,相比较就可以进行垃圾邮件分类了。

但是在实际工程中,还有很多小trick,比如可人工设置停用词表和关键词表,对概率乘积进行取对数的操作等。而且目前有很多已经封装好的库可直接调用,比如著名的机器学习库Sklearn中对朴素贝叶斯分类器就提供了三种不同的模型,感兴趣的可以看起内部的具体实现代码加强理解。

http://scikit-learn.org/stable/modules/classes.html#module-sklearn.naive_bayes


0