vlambda博客
学习文章列表

分类预测 | 朴素贝叶斯(Naive Bayesian)

梦  罟

朴素贝叶斯模型


学习了一些朴素贝叶斯的知识,比想象中简单很多。趁着空闲,记录在案,谨防遗忘。


贝叶斯公式

提到贝叶斯,自然想起了《概率论与数理统计》中的贝叶斯公式:

分类预测 | 朴素贝叶斯(Naive Bayesian)

公式中:

P(A)是A的先验概率或边缘概率,之所以称为"先验"是因为它不考虑任何B方面的因素。

P(A|B)是已知B发生后A的条件概率,也由于得自B的取值而被称作A的后验概率。

P(B|A)是已知A发生后B的条件概率,也由于得自A的取值而被称作B的后验概率。

Pr(B)是B的先验概率或边缘概率,也作标准化常量(normalized constant)。


作为对概率分布的主观判断进行修正的标准方法,贝叶斯公式的思想可以表示为:

后验概率 = (似然度 * 先验概率)/标准化常量

即:后验概率与先验概率和似然度的乘积成正比


举一个简单的例子:

分类预测 | 朴素贝叶斯(Naive Bayesian)

那么阴天条件下不出门的概率就可以表示为:

分类预测 | 朴素贝叶斯(Naive Bayesian)


朴素贝叶斯(Naive Bayesian)

作为从贝叶斯原理中提出的具体方法,朴素贝叶斯的家族关系可以表示如图:

分类预测 | 朴素贝叶斯(Naive Bayesian)

事实上,朴素贝叶斯分类器是贝叶斯分类器中,最简单,最常用的一种,其表达形式如下:

分类预测 | 朴素贝叶斯(Naive Bayesian)

值得注意的是,朴素贝叶斯算法之所以朴素(naive),是因为他假设样本特征之间相互独立,这使得算法的逻辑性和稳定性提高,即数据呈现不同特点时,朴素贝叶斯的分类性能不会有太大的差异。但另一方面,样本特征的独立性在大多数情况下是难以满足的,当特征关联性较高时,会导致贝叶斯算法的效果大大降低。

而在实际运用中,依据数据类型的不同,朴素贝叶斯模型又可以细分为:

  • 高斯朴素贝叶斯(连续变量,假设服从正态分布)

  • 伯努利朴素贝叶斯(0-1变量)

  • 多项式朴素贝叶斯(离散变量)

具体应用场景如下表所示:

分类预测 | 朴素贝叶斯(Naive Bayesian)

在下文中将对各类朴素贝叶斯模型进行实际测试。

最后是朴素贝叶斯的优缺点分析:

优点:

  1. 源于古典数学理论,有坚实的数学基础;

  2. 算法逻辑简单,易于实现;

  3. 对小规模的数据表现较好,适合增量学习;

  4. 对缺失数据不敏感,对训练样本的特征和类别只是进行概率计算。

缺点:

  1. 假设样本之间独立,偏离实际;

  2. 针对不同的输入数据,需要使用不同的处理模型。


实例验证

基于python的sklearn包,使用sf-crime数据集和iris数据集分别进行高斯、伯努利朴素贝叶斯模型实例化,流程可表达如下:

  1. 导入数据集,根据数据类型选择模型

  2. 进行数据预处理,提取出样本特征X和样本分类y

  3. 分割训练集与测试集

  4. 创建训练模型,将训练集和测试集放入模型

  5. 训练模型,输入精确度

以鸢尾花数据集为例,通过SepalLengthCm、SepalWidthCm、PetalLengthCm、PetalWidthCm四个特征属性推断鸢尾花的品类,故采用高斯朴素贝叶斯模型:

运行程序,鸢尾花数据集的预测正确度为0.97,即在97%的情况下通过4个特征属性都能正确推导出鸢尾花的品类。

至此,朴素贝叶斯模型实例验证完毕,我将全部文件放在原文链接,提取码为:niyp。


文/微寒