一、理论基础
(一)朴素贝叶斯定理

简单的说:一个样本属于某个类别的概率是:这个类别出现的概率 * 已知这个类别出现的情况下各个属性出现的概率的乘积

根据贝叶斯定理,事件X发生时,类别Ci发生的后验概率为:

而P(X)对于所有的CI都是相等的,且假设X的各个属性之间是独立的(朴素假设),则可得:
即符合X特征变量的类别Ci的后验概率可由上述公式计算出来,然后比较各个Ci的大小,最大的那个类别即最有可能发生的。
(二)示例 1、训练数据
2、需要预测的数据为
X={age=youth,income=medium,student=yes,credit_rating}
计算此用户购买computer的可能性。
3、计算为YES的概念
(1)购买用户的总概率。从表中可见14人中有9个购买了电脑,因此概率为:
(2)在购买用户的9人中符合X特征中的age=youth的有2人,比例为:
(3)在购买用户的9人中符合X特征中的income=medium的有4人,比例为:
(4)在购买用户的9人中符合X特征中的student=yes的有6人,比例为
(5)在购买用户的9人中符合X特征中的credit_rating的有6人,比例为
根据朴素贝叶斯定理,
其中:
P(X)对所有分类都相等
符合X={age=youth,income=medium,student=yes,credit_rating}的情况下,Ci={buys_computer=yes}的后验熬概率为:
3、使用同样的方法,可以计算出符 合X的情况下,Cj=(buys_computer=no)的后验概率为:
4、结论:由上面的计算结果可知,朴素贝叶斯分类预测元组X的类为buy_computer=yes。
(三)三种常见的模型

1、伯努利模型

与多项式模型一样,伯努利模型适用于离散特征的情况,所不同的是,伯努利模型中每个特征的取值只能是1和0(以文本分类为例,某个单词在文档中出现过,则其特征值为1,否则为0).
伯努利模型中,条件概率P(xi|yk)的计算方式是:
当特征值xi为1时,P(xi|yk)=P(xi=1|yk);
当特征值xi为0时,P(xi|yk)=1−P(xi=1|yk);

2、多项式模型

当特征是离散的时候,使用多项式模型。多项式模型在计算先验概率P(yk)和条件概率P(xi|yk)时,会做一些平滑处理,具体公式为:
P(yk)=Nyk+αN+kα
N是总的样本个数,k是总的类别个数,Nyk是类别为yk的样本个数,α是平滑值。
P(xi|yk)=Nyk,xi+αNyk+nα
Nyk是类别为yk的样本个数,n是特征的维数,Nyk,xi是类别为yk的样本中,第i维特征的值是xi的样本个数,α是平滑值。
当α=1时,称作Laplace平滑,当0<α<1时,称作Lidstone平滑,α=0时不做平滑。
如果不做平滑,当某一维特征的值xi没在训练样本中出现过时,会导致P(xi|yk)=0,从而导致后验概率为0。加上平滑就可以克服这个问题。

3、高斯模型

当特征是连续变量的时候,运用多项式模型就会导致很多P(xi|yk)=0(不做平滑的情况下),此时即使做平滑,所得到的条件概率也难以描述真实情况。所以处理连续的特征变量,应该采用高斯模型。
下面是一组人类身体特征的统计资料。
性别
身高(英尺)
体重(磅)
脚掌(英寸)
6
180
12
5.92
190
11
5.58
170
12
5.92
165
10
5
100
6
5.5
150
8
5.42
130
7
5.75
150
9
已知某人身高6英尺、体重130磅,脚掌8英寸,请问该人是男是女?
根据朴素贝叶斯分类器,计算下面这个式子的值。
P(身高|性别) x P(体重|性别) x P(脚掌|性别) x P(性别)
这里的困难在于,由于身高、体重、脚掌都是连续变量,不能采用离散变量的方法计算概率。而且由于样本太少,所以也无法分成区间计算。怎么办?
这时,可以假设男性和女性的身高、体重、脚掌都是正态分布,通过样本计算出均值和方差,也就是得到正态分布的密度函数。有了密度函数,就可以把值代入,算出某一点的密度函数的值。
比如,男性的身高是均值5.855、方差0.035的正态分布。所以,男性的身高为6英尺的概率的相对值等于1.5789(大于1并没有关系,因为这里是密度函数的值,只用来反映各个值的相对可能性)。
对于脚掌和体重同样可以计算其均值与方差。有了这些数据以后,就可以计算性别的分类了。
P(身高=6|男) x P(体重=130|男) x P(脚掌=8|男) x P(男)
    = 6.1984 x e-9  P(身高=6|女) x P(体重=130|女) x P(脚掌=8|女) x P(女)
    = 5.3778 x e-4
1
2
3
4
1
2
3
4
可以看到,女性的概率比男性要高出将近10000倍,所以判断该人为女性。
  • 总结
高斯模型假设每一维特征都服从高斯分布(正态分布):
P(xi|yk)=12πσ2yk,i√e−(xi−μyk,i)22σ2yk,i
μyk,i表示类别为yk的样本中,第i维特征的均值。
σ2yk,i表示类别为yk的样本中,第i维特征的方差。
4、简单总结
(1)多项式模型:适用于属性值为有限的多个数值的情况,如收入分为高中低三个层次。
(2)高斯模型:适用于属性值为连续的情况,如收入的具体数值,观看某个电视剧的次数等。当然也可以将这些值划分到一定的区间,然后使用多项式模型,但这样就没这么精确了。
(3)伯努利模型:适用于属性值只是2个的情况。如性别作为标签,值只是男和女。其实这只是一种特殊的二项式。
(4)如果一个训练集数据足够多且是高斯分布的话;利用多项式分布进行训练的话,训练出的模型会逼近高斯分布。也就是说数据量大大多于属性值的数量时,完全可以用多项式模型代替高斯模型。这是spark mllib目前未实现高斯分布的一个原因。另一个可能的原因是数据分布在各个节点,无法算方差,最终还是要落在一个节点上进行计算。
二、spark实现
(一)二项式及多项式模型1、训练数据
说明:
(1)朴素贝叶斯要求各个属性间是独立的,但事实上这些数据的属性是不独立的,比如年龄和是否学生就不是独立的属性。这里只是作为一个示例
(2)上述属性中,是否学生符合伯努利模型,其余3个属性均符合二项式模型。
三、spark mllib API使用

朴素贝叶斯原理及实现相关推荐

  1. multinormalNB多项式朴素贝叶斯原理及代码

    https://blog.csdn.net/u011239443/article/details/76176743 multinormalNB多项式朴素贝叶斯原理及代码 https://www.cnb ...

  2. 统计学习方法|朴素贝叶斯原理剖析及实现

    欢迎直接到我的博客查看最近文章:www.pkudodo.com.更新会比较快,评论回复我也能比较快看见,排版也会更好一点. 原始blog链接: http://www.pkudodo.com/2018/ ...

  3. 利用朴素贝叶斯原理过滤垃圾邮件(TF-IDF算法)

    本人是新手,为了还原该过程用了自己的方法,可能时间复杂度较高,并且在训练数据时也没有用到SKlearn模块中的贝叶斯分类器,是为了尝试自己去还原求后验条件概率这个过程. 目录 一.简述朴素贝叶斯原理 ...

  4. 统计学习方法笔记(三)-朴素贝叶斯原理及python实现

    朴素贝叶斯 条件概率 特征条件独立假设 朴素贝叶分类器 朴素贝叶斯分类算法原理 学习与分类算法 朴素贝叶斯算法原理 模型 多项式模型 高斯模型 伯努利模型 多项式模型的朴素贝叶斯分类器实现代码 高斯模 ...

  5. [机器学习]朴素贝叶斯原理和基于Spark 实例

    朴素贝叶斯分类 贝叶斯原理的由来:贝叶斯为了解决一个叫"逆向概率"问题写了一篇文章,尝试解答在缺乏太多可靠证据的情况下,怎样做出更符合数学逻辑的推测. 逆向概率:逆向概率是相对正向 ...

  6. sklearn朴素贝叶斯分类器_朴素贝叶斯原理

    贝叶斯分类算法是统计学是一种概率分类方法,朴素贝叶斯分类时贝叶斯分类中最简单的一种.利用贝叶斯公式根据某特征的先验概率计算出其后延概率,然后选择具有最大后延概率的类作为该特征所属的类.朴素贝叶斯,称之 ...

  7. 监督学习 | 朴素贝叶斯原理及Python实现

    文章目录 1. 贝叶斯理论 1.1 贝叶斯定理 1.2 贝叶斯分类算法 1.3 朴素贝叶斯分类算法 1.3.1 朴素贝叶斯分类器实例 学习过程 预测过程 2. Python实现 2.1 拉普拉斯修正 ...

  8. 数据分析——朴素贝叶斯原理示意图

  9. 【阿旭机器学习实战】【10】朴素贝叶斯模型原理及3种贝叶斯模型对比:高斯分布朴素贝叶斯、多项式分布朴素贝叶斯、伯努利分布朴素贝叶斯

    [阿旭机器学习实战]系列文章主要介绍机器学习的各种算法模型及其实战案例,欢迎点赞,关注共同学习交流. 本文介绍了机器学习中的朴素贝叶斯的基本原理,并对3种贝叶斯模型根据鸢尾花实例进行了比较. 目录 朴 ...

最新文章

  1. 终于解决SQL Server 2008 64位系统无法导入Access/Excel的问题 2012/08/01
  2. linux vim 高亮查找,vim技巧:用列表形式显示所有搜索到的内容,去掉搜索内容的高亮...
  3. JeeCG团队招聘啦!
  4. maven离线安装jar包
  5. SQL LIKE 操作符
  6. 第四季-专题12-按键驱动程序设计
  7. 笔记本进入pe却看不到计算机硬盘,一些笔记本进WINPE后找不到硬盘的解决办法...
  8. 腾讯火力全开“吃鸡”:下一个游戏行业风口怎能错过?
  9. 【游戏开发实战】Unity实现类似GitHub地球射线的效果(LineRenderer | 贝塞尔曲线)
  10. 解释一下积分变上限函数
  11. robots.txt文件示例
  12. [杂记]LeTeX模板——ppt
  13. 小程序canvans一键截屏纯前端实现
  14. google学术无法访问
  15. 【MySQL】MySQL高手是如何练成的?
  16. Securify之旅1之TOD漏洞剖析
  17. 娱乐 | 14个简单、有趣、好玩的Linux命令
  18. linux-3.0.1下spi设备mx25l的驱动
  19. 导出iphone手机安装包的几种方法
  20. .net中,日志组件 Nlog,SerialLog, Log4Net的用法

热门文章

  1. Leecode01. 两数之和——Leecode大厂热题100道系列
  2. 深入理解input中的value、name、id的区别和用法——Web前端自学笔记
  3. 【测试点分析】1081 检查密码 (15分)
  4. 14行代码AC——1017 A除以B (20分)(大数运算+讲解)
  5. 图解python_图解Python深拷贝和浅拷贝
  6. dede问答模块 那个php文件相对重要,DEDE5.7 问答模板的修改技巧
  7. php点击按钮变文字,点击按钮文字变成input框,点击保存变成文字的实现
  8. linux进程 面试题,Linux面试题,浅析常见Linux命令面试题及答案
  9. pdffactory字体打印不对_标准论文格式字体要求
  10. iview的select联动_iview2 之select二级联动细谈