第7.2节 贝叶斯估计
各位朋友大家好,欢迎来到月来客栈,我是掌柜空字符。
本期推送内容目录如下,如果本期内容对你有所帮助,欢迎点赞、转发支持掌柜!
7.2 贝叶斯估计 7.2.1 平滑处理 7.2.2 计算示例 7.2.3 基于贝叶斯的垃圾邮件分类 7.2.4 小结
7.2 贝叶斯估计
在介绍完第7.1节中的内容后对朴素贝叶斯算法的原理应该有了清楚的认识,但还有一个不能忽略的问题就是,当训练集不充分的情况下,某个维度的条件概率缺失时该怎么处理。例如在7.1.3节的示例中,如果条件概率,即训练集中不存在这一情况,而在测试的数据样本中却存在这种情况。如果此时仍旧将这种情况下的条件概率看作0,则在预测的时候将会产生很大的错差。面对这样的情况该怎么办呢?
7.2.1 平滑处理
通常,解决这类问题的一个有效办法就是在各个估计中加入一个平滑项(Smoothing Parameter),则此时先验概率和条件概率的计算方法为
其中表示数据集分类的类别数;表示第j维特征的取值情况数;,并且当时称为拉普拉斯平滑(Laplace Smoothing),这也是常用的做法。
同时,当时分别称式(7.15)和式(7.16)为先验概率和条件概率的贝叶斯估计,并且可以发现,当时,就是极大似然估计。
7.2.2 计算示例
接下来,将7.1.3节中的数据用拉普拉斯平滑()再来计算一次。在计算之前我们知道,此时类别数。
根据表7-1和式(7.15)易知,各类别的先验概率分别为
条件概率为
计算出属于各个类别的后验概率为
于是我们同样可以得出,样本属于的可能性最大。
至此,对于朴素贝叶斯算法的原理及计算过程就介绍完了。对于这部分的sklearn示例代码也将在第7章中进行介绍。由于在不同的书中对于一些算法原理有着不同的称谓,这也导致读者在初学及翻阅各种资料时发现一会儿又多了这个概念,一会儿又多了那个概念并为此极为苦恼。不过名称并不太重要,重要的是要知道具体指代的概念。如图7-1所示是笔者对遇到的各种“叫法”进行的总结,仅供参考。
7.2.3 基于贝叶斯的垃圾邮件分类
由于sklearn中并没有内置用于类别型变量分类的数据集,且sklean中也没有实现不考虑词频的词袋模型,所以这里需要我们自己实现一个类方法来完成整个向量化过程。因为这部分核心代码笔者在第6.1.4节中已经介绍过,下面只需要将其整理封装成一个类即可。为了方便后续其它地方调用,将这部分代码放在utils
下的text_feature_extraction
模块中,见Book/utils/text_feature_extraction.py
文件。
1. 实现VectWithoutFrequency