在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数,要么是条件分布。但是朴素贝叶斯却是生成方法,也就是直接找出特征输出Y和特征X的联合分布,然后用得出。

朴素贝叶斯很直观,计算量也不大,在很多领域有广泛的应用,这里我们就对朴素贝叶斯算法原理做一个小结。

朴素贝叶斯相关的统计学知识

在了解朴素贝叶斯的算法之前,我们需要对相关必须的统计学知识做一个回顾。

贝叶斯学派很古老,但是从诞生到一百年前一直不是主流。主流是频率学派。频率学派的权威皮尔逊和费歇尔都对贝叶斯学派不屑一顾,但是贝叶斯学派硬是凭借在现代特定领域的出色应用表现为自己赢得了半壁江山。

贝叶斯学派的思想可以概括为先验概率+数据=后验概率。也就是说我们在实际问题中需要得到的后验概率,可以通过先验概率和数据一起综合得到。数据大家好理解,被频率学派攻击的是先验概率,一般来说先验概率就是我们对于数据所在领域的历史经验,但是这个经验常常难以量化或者模型化,于是贝叶斯学派大胆的假设先验分布的模型,比如正态分布,beta分布等。这个假设一般没有特定的依据,因此一直被频率学派认为很荒谬。虽然难以从严密的数学逻辑里推出贝叶斯学派的逻辑,但是在很多实际应用中,贝叶斯理论很好用,比如垃圾邮件分类,文本分类。

我们先看看条件独立公式,如果X和Y相互独立,则有:

我们接着看看条件概率公式:

然后可以得到:

接着看看全概率公式:

其中

从上面的公式很容易得出贝叶斯公式:

朴素贝叶斯的模型

从统计学知识回到我们的数据分析。假如我们的分类模型样本是:

即我们有m个样本,每个样本有n个特征,特征输出有K个类别,定义为

从样本我们可以学习得到朴素贝叶斯的先验分布,接着学习到条件概率分布,然后我们就可以用贝叶斯公式得到X和Y的联合分布P(X,Y)了。联合分布P(X,Y)定义为:

从上面的式子可以看出比较容易通过最大似然法求出,得到的就是类别在训练集里面出现的频数。但是很难求出,这是一个超级复杂的有n个维度的条件分布。朴素贝叶斯模型在这里做了一个大胆的假设,即X的n个维度之间相互独立,这样就可以得出:

从上式可以看出,这个很难的条件分布大大的简化了,但是这也可能带来预测的不准确性。你会说如果我的特征之间非常不独立怎么办?如果真是非常不独立的话,那就尽量不要使用朴素贝叶斯模型了,考虑使用其他的分类方法比较好。但是一般情况下,样本的特征之间独立这个条件的确是弱成立的,尤其是数据量非常大的时候。虽然我们牺牲了准确性,但是得到的好处是模型的条件分布的计算大大简化了,这就是贝叶斯模型的选择。

最后回到我们要解决的问题,我们的问题是给定测试集的一个新样本特征,我们如何判断它属于哪个类型?

既然是贝叶斯模型,当然是后验概率最大化来判断分类了。我们只要计算出所有的K个条件概率,然后找出最大的条件概率对应的类别,这就是朴素贝叶斯的预测了。

朴素贝叶斯的推断过程

上面我们已经对朴素贝叶斯的模型也预测方法做了一个大概的解释,这里我们对朴素贝叶斯的推断过程做一个完整的诠释过程。

我们预测的类别是使最大化的类别,数学表达式为:

由于对于所有的类别计算时,上式的分母是一样的,都是,因此,我们的预测公式可以简化为:

接着我们利用朴素贝叶斯的独立性假设,就可以得到通常意义上的朴素贝叶斯推断公式:

朴素贝叶斯的参数估计

在上一节中,我们知道只要求出,我们通过比较就可以得到朴素贝叶斯的推断结果。这一节我们就讨论怎么通过训练集计算这两个概率

对于,比较简单,通过极大似然估计我们很容易得到为样本类别出现的频率,即样本类别出现的次数除以样本总数

对于,这个取决于我们的先验条件(训练数据):

a) 如果我们的是离散的值,那么我们可以假设符合多项式分布,这样得到是在样本类别出现的频率。即:

其中为样本类别出现的次数,而为类别为的样本中,第维特征出现的次数。某些时候,可能某些类别在样本中没有出现,这样可能导致为0,这样会影响后验的估计,为了解决这种情况,我们引入了拉普拉斯平滑,即此时有:

其中为一个大于0的常数,常常取为1。为第个特征的取值个数。

b) 如果我们的是非常稀疏的离散值,即各个特征出现概率很低,这时我们可以假设符合伯努利分布,即特征出现记为1,不出现记为0。即只要出现即可,我们不关注的次数。这样得到是在样本类别中,出现的频率。此时有:

其中,取值为0和1。

c) 如果我们我们的是连续值,我们通常取的先验概率为正态分布,即在样本类别中,的值符合正态分布。这样的概率分布是:

其中是正态分布的期望和方差,可以通过极大似然估计求得。为在样本类别中,所有的平均值。为在样本类别中,所有的方差。对于一个连续的样本值,带入正态分布的公式,就可以求出概率分布了。

朴素贝叶斯算法过程

我们假设训练集为m个样本n个维度,如下:

共有K个特征输出类别,分别为,每个特征输出类别的样本个数为,在第k个类别中,如果是离散特征,则特征各个类别取值为。其中 取值为为特征不同的取值数。

输出为实例的分类。

算法流程如下:

    1) 如果没有Y的先验概率,则计算Y的K个先验概率:,否则为输入的先验概率。

    2) 分别计算第k个类别的第j维特征的第l个取值条件概率:

      a) 如果是离散值:

      可以取值为1,或者其他大于0的数字。

      b) 如果是稀疏二项离散值:

      此时 只有两种取值。

      c) 如果是连续值不需要计算各个 的取值概率,直接求正态分布的参数:

需要求出。 为在样本类别中,所有的平均值。为在样本类别中,所有的方差。

    3)对于实例,分别计算:

    4)确定实例的分类

     从上面的计算可以看出,没有复杂的求导和矩阵运算,因此效率很高

关于朴素贝叶斯还有一些注意点,移步贝叶斯整理有详解。

参考文章

朴素贝叶斯算法原理小结

【机器学习】朴素贝叶斯(Naive Bayes)相关推荐

  1. 机器学习一:朴素贝叶斯(Naive Bayes)

    朴素贝叶斯 Naive Bayes 1. Introduction 1.1 离散属性 1.2 连续属性 1.2.1 Gaussian Naive Bayes 1.2.2 Multinomial Nai ...

  2. 机器学习:基于朴素贝叶斯(Naive Bayes)的分类预测

    目录 一.简介和环境准备 简介: 环境: 二.实战演练 2.1使用葡萄(Wine)数据集,进行贝叶斯分类 1.数据导入 2.模型训练 3.模型预测 2.2模拟离散数据集–贝叶斯分类 1.数据导入.分析 ...

  3. 朴素贝叶斯(naive bayes)

    朴素贝叶斯(naive bayes) 标签: Python 机器学习 主要參考资料:<机器学习实战><统计学习方法> 1.朴素贝叶斯分类原理 朴素贝叶斯法是基于贝叶斯定理和特征 ...

  4. 【手写算法实现】 之 朴素贝叶斯 Naive Bayes 篇

    [手写算法实现] 之 朴素贝叶斯 Naive Bayes 篇 朴素贝叶斯模型(naive bayes)属于分类模型,也是最为简单的概率图模型,对于之后理解HMM.CRF等模型,大有裨益.这里手写算法介 ...

  5. 机器学习笔记——朴素贝叶斯(Naive Bayes)

    1贝叶斯算法简介 贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法.在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,该算 ...

  6. 西瓜书+实战+吴恩达机器学习(八)监督学习之朴素贝叶斯 Naive Bayes

    文章目录 0. 前言 1. 朴素贝叶斯算法 2. 半朴素贝叶斯算法 2.1. ODE 2.2. SPODE 2.3. TAN 2.4. AODE 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔 ...

  7. 机器学习算法: 朴素贝叶斯(Naive Bayes)

    朴素贝叶斯的介绍 朴素贝叶斯算法(Naive Bayes, NB) 是应用最为广泛的分类算法之一.它是基于贝叶斯定义和特征条件独立假设的分类器方法.由于朴素贝叶斯法基于贝叶斯公式计算得到,有着坚实的数 ...

  8. 机器学习(十)分类算法之朴素贝叶斯(Naive Bayes)算法

    贝叶斯定理 首先我们来了解一下贝叶斯定理: 贝叶斯定理是用来做什么的?简单说,概率预测:某个条件下,一件事发生的概率是多大? 了解一下公式 事件B发生的条件下,事件A发生的概率为: 这里写图片描述 同 ...

  9. 朴素贝叶斯(Naive Bayes),“Naive”在何处?

    加上条件独立假设的贝叶斯方法就是朴素贝叶斯方法(Naive Bayes). Naive的发音是"乃一污",意思是"朴素的"."幼稚的".&q ...

最新文章

  1. 【BLE】TI CC2640R2F片内OAD实验
  2. pandas.DataFrame.iloc的使用
  3. ubuntu16.04 在cuda9.0环境下编译安装opencv2.4.13.7
  4. 发送WM_COPYDATA消息实现进程间的通信
  5. 【计算机系统设计】重点 · 学习笔记(0)(数据通路设计思想)
  6. 每天一道算法题(39)——含有重复字符的全排列
  7. IAR STM32报错Error[Pe147]:declaration is incompatible with“__nounwind __interwork __softfp unsigned
  8. 战双服务器信息保留多久,双线服务器里保留内测时的等级吗
  9. ERROR in ./src/css/1.scss 1:2
  10. HTML5程序开发范例宝典(韩旭著)读书笔记之渐变背景
  11. 如何使用 Siri 拨打电话并使用电话功能?
  12. 常用芯片数据手册—— INA333 低功耗、精密仪表放大器(德仪)
  13. 内网穿透NPS及NPC搭建(使用docker实现)
  14. 使用FFmpeg命令合并音视频
  15. Spring IoC 容器的设计与实现原理
  16. STRAIGHT_JOIN
  17. 0_13_QGIS纠正矢量数据
  18. 电脑用户没有admin权限,如何配置node开发环境
  19. 免费下载有声读物获取您自己!
  20. 期刊论文发表的作者顺序有什么讲究吗

热门文章

  1. 各大门户网站Flash和JS实现的图片幻灯片切换特效代码文件下载:
  2. CSS基础笔记(w3school)
  3. 正则表达式零宽断言详解
  4. HTML引入第三方类库项目需要授权解决方案
  5. 解决Adobe Animate CC 中文版非中文的BUG
  6. Matlab/Eigen矩阵填充问题
  7. 编译VTK的MFC库
  8. java mvc 导入_Java SpringMVC文件导入和导出
  9. 自定义sort函数第三个参数的规则
  10. 教学思路C#之入门一 认识简单的C#结构