朴素贝叶斯算法(Naive Bayesian algorithm) 是应用最为广泛的分类算法之一,在垃圾邮件分类等场景展露出了非常优秀的性能。

朴素贝叶斯公式来历

朴素贝叶斯,名字中的朴素二字就代表着该算法对概率事件做了很大的简化,简化内容就是各个要素之间是相互独立的。
比如今天刮风和气温低,两个要素导致了不下雨的结果。实际上刮风可能导致气温低,而且刮风对于天晴的影响会更大,朴素贝叶斯认为刮风和气温之间相互独立,且对于是否下雨这个结果的影响没有轻重之分。用公式来表示这种独立性就是:

在介绍朴素贝叶斯公式前,先介绍一下条件概率公式。条件概率表示在B已经发生的条件下,A发生概率。

朴素贝叶斯公式就是条件概率的变形。
假设已有数据为

其中x为属性值,y为分类结果,共有n个已有数据。每个x有多种属性,以第一组数据为例,上标表示第几个属性值,x的具体表示如下

假设y的可取值为(c1,c2,…,ck)
则贝叶斯公式表示为

由公式可以看出,贝叶斯公式就是条件概率的公式。贝叶斯公式的解释很简单:在已有数据的基础上,出现了一个新数据,只有X=(a1,a2,…,am),来预测y的取值。贝叶斯公式就是求在目前X发生的情况下,y取不同值的概率大小进行排序,取最大概率的y值。
其中X有多个属性,朴素贝叶斯假设各个属性之间是独立的,因此

因此朴素贝叶斯公式可以写成

此公式的含义就是在目前已知历史数据数据的前提下,出现了一个新的X,求在X已经发生的条件下,y取不同值的概率,然后取使得条件概率最大的y作为预测结果。也就是说寻找y的取值Cn,使得上式最大,用公式表示就是

这里可以看出,不论求y取任何值Ci的概率,分母都不变,为P(x=X),因此该公式可以简化为:(正因为将P(x=X)省略了,所以我就没有将P(x=X)写成全概率公式的样子)

其中P(y=Cn)是指y取Cn的值的数量占所有y值数量的百分比;P(xi=ai|y=Cn)表示在y取值为Cn的条件下,xi=ai的条件概率。公式表示如下:(I()函数表示当括号内的条件成立时,记为1。)


到这里,朴素贝叶斯的基础原理就完了。顺便提一下生成模型和判别模型吧。大家可以看到,朴素贝叶斯算法在进行判断时,每次都要用到历史数据,在求得概率分布的情况下再对新数据预测,这就是生成模型。什么是判别模型呢,简单的说就是像神经网络算法那种,训练完将各种权重保存起来,有了新数据直接使用权重带入进行计算,最后得出判别结果。这只是顺带提了一句,让读着有个大概的认识,语言并不是很严谨,如果读着想了解更多,请寻找相关的专业介绍生成和判别模型的文章。

举例1

这里使用了《统计学习方法-李航》里的例子。
历史数据为

x是二维向量,第一维度可取值(1,2,3),第二维度可取值(S,M,L),y可取值(-1,1)。目前有一个新数据x(2,S),使用朴素贝叶斯算法确定y的取值。
解:
目标是比较在数据x(2,S)下,不同y值的条件概率,也就是求P(y=1|x=(2,S))和P(y=-1|x=(2,S))的大小。

由此公式可知,分母相同,只需要对比分子的大小。

注意:
P(x1=2|y=1)=3/9数错了,不好意思。图片不方便改,望知悉。


所以y的取值是-1

原始朴素贝叶斯公式的问题

大家在解例子的时候有没有发现一个问题,假如


标红框的连乘中有一项为0,也就是说在y取值为Cn的条件下,ai的值没有出现过,所以P(x=X|y=Cn)=0,也就是说y取Cn的可能性为0,与实际不符。很明显这种情况产生了严重的偏差。
为了纠正这种情况产生的偏差,对等式右边的概率计算进行了改进

  1. 先验概率改进计算公式:

    式中λ>=0,K是y可取值的总数。当λ=0时,和原来的公式一样,当λ=1时称为拉普拉斯平滑(这个名词的背后历史就不提了,λ尝取的值就是1)。
    不难看出有如下规律

    说明Pλ也是一种概率分布,既解决了某些值概率可能为0的问题,又基本符合原来的概率分布。
    2. 条件概率改进计算公式

    同样的,λ>=0,Sj表示x第j个维度可取值的总数。同样的对于Pλ(xj=aj|y=Cn)也是一种概率分布,近似代表着改进之前的概率分布。
    有了改进后的先验概率和条件概率的公式,便可以解决了单一条件概率为0时,判断不准确的问题。

举例2

对于例子1,使用拉普拉斯平滑后的概率计算公式来预测。我把题目复制一下,虽然看着累赘,省的回去一直翻着看。
历史数据为

x是二维向量,第一维度可取值(1,2,3),第二维度可取值(S,M,L),y可取值(-1,1)。目前有一个新数据x(2,S),使用朴素贝叶斯算法确定y的取值。
解:


因此可以看出y=-1的概率更大,因此预测结果为-1。这个结果与例子1的结果相同。
本文主要参考了《统计学习方法》这本书,只希望把学习结果能分享给对的人,总结的内容比较浅显简单。

朴素贝叶斯算法(带例题解释)相关推荐

  1. 数据挖掘之朴素贝叶斯算法

    1.贝叶斯公式推理: A和B是两个事件,在B发生的条件下,A发生的条件概率记为 条件概率:  (1) 条件概率:  (2) (2)式得将其代入(1)得到贝叶斯公式: 可以写为 表示没有使用数据来训练分 ...

  2. 朴素贝叶斯算法(1)

    1.1 朴素贝叶斯简述 朴素贝叶斯算法(Naive Bayes, NB) 是应用最为广泛的分类算法之一.既可以用于二分类,也可以用于多分类.当年的垃圾邮件分类都是基于朴素贝叶斯分类器识别的. 朴素贝叶 ...

  3. 使用Sklearn学习朴素贝叶斯算法

    目录 1,sklearn中的贝叶斯分类器 1.1,高斯朴素贝叶斯GaussianNB 1.1.1,认识高斯朴素贝叶斯 1.1.2,参数说明 1.1.3,高斯朴素贝叶斯建模案例 1.1.4,探索高斯朴素 ...

  4. 贝叶斯文本分类python_scikit_learn 中朴素贝叶斯算法做文本分类的 实践总结

    朴素贝叶斯算法对于分类非常高效 想了解的可以参考这篇博文:贝叶斯从浅入深详细解析,详细例子解释 - zwan0518的专栏 - 博客频道 - CSDN.NET贝叶斯从浅入深 先来做个小小总结说明 在这 ...

  5. 【机器学习入门】(2) 朴素贝叶斯算法:原理、实例应用(文档分类预测)附python完整代码及数据集

    各位同学好,今天我向大家介绍python机器学习中的朴素贝叶斯算法.内容有:算法的基本原理:案例实战--新闻文档的分类预测. 案例简介:新闻数据有20个主题,有10万多篇文章,每篇文章对应不同的主题, ...

  6. 朴素贝叶斯算法详解及python代码实现

    朴素贝叶斯算法 算法原理 对数据的要求 算法的优缺点 算法需要注意的点 算法实现(python)(待更.......) 算法原理 P(Ck∣xi)=p(xi∣ck)∗p(ck)p(xi)=p(x1∣c ...

  7. 朴素贝叶斯算法实现分类以及Matlab实现

    开始 其实在学习机器学习的一些算法,最近也一直在看这方面的东西,并且尝试着使用Matlab进行一些算法的实现.这几天一直在看得就是贝叶斯算法实现一个分类问题.大概经过了一下这个过程: 看书→\righ ...

  8. 朴素贝叶斯算法-分类算法

    朴素贝叶斯算法-分类算法 1 概率基础 概率定义为一件事情发生的可能性 联合概率:包含多个条件,且所有条件同时成立的概率,记作P(A,B) 条件概率:事件A在另一个事件B已经发生条件下的发送概率,记作 ...

  9. 机器学习之朴素贝叶斯算法原理

    朴素贝叶斯(naive Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法.它和其他绝大多数的分类算法都不同. 对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方 ...

最新文章

  1. ionic + cordova 配置和开发过程中的一些问题
  2. leetcode-1-两数之和
  3. 常说的手机刷新率60Hz、120Hz有什么不同?
  4. Windows环境下的安装gcc
  5. BugkuCTF-Reverse题游戏过关多解法
  6. 信息学奥赛一本通(1190:上台阶)
  7. [论文阅读] Learning Loss for Active Learning
  8. RabbitMQ(7)-发后即忘模型
  9. 居中百分比宽高的元素
  10. mysql备份的三种方式
  11. 怎么让联想计算机升级,如何刷bios,教您联想电脑如何刷bios
  12. Pascal基础(四)-常用函数和标准库
  13. MD5 Encryption Of String ( UTF-8 ) / UE4 MD5 加密
  14. McAfee卸载工具及卡巴KIS2009注册码
  15. html自动触发双击事件,js主动触发单击事件
  16. linux下phylip软件构建NJ树,MEGA软件——系统发育树构建方法(图文讲解)
  17. 怀孕计算机在线,【孕期天数计算器在线计算_孕期天数计算器在线计算专题】- 天鹅到家...
  18. 【高等数学】无穷数级
  19. Kamailio nats模块编译
  20. linux调试工具ipcs的深入分析

热门文章

  1. 设计模式沉思录读后感2
  2. 智慧渔业——水产养殖新契机
  3. LP、HPM、HPC、HPC等工艺制作博文
  4. 施努卡:机器视觉光源选择方法(机器视觉光源哪里有)
  5. 三只青蛙的故事:一道脑筋急转弯题目引发的思考
  6. stm32开发板能干什么?stm32开发板功能介绍
  7. django框架——sweetalert前端插件、序列化组件、批量数据操作、分页器、Forms组件(上)
  8. MM MIGO BAPI BAPI_GOODSMVT_CREATE 使用汇总
  9. JS 你不知道的冷知识 (身为开发工程师的你 走了多少弯路?)
  10. 退出项目组时,退出所有群,删除所有联系方式