贝叶斯分类算法实例 --根据姓名推测男女

2018 年 11 月 30 日 七月在线实验室

点击蓝字“七月在线实验室”关注我们

学会学习的人,是非常幸福的人。


一.从贝叶斯公式开始

贝叶斯分类其实是利用用贝叶斯公式,算出每种情况下发生的概率,再取概率较大的一个分类作为结果。我们先来看看贝叶斯公式:

P(A|B) = P(B|A) P(A) / P(B)


其中P(A|B)是指在事件B发生的情况下事件A发生的概率。

在贝叶斯定理中,每个名词都有约定俗成的名称:


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

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

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

  • P(B)是B的先验概率或边缘概率。


这里可以用一个例子来说明这个公式。

看一个简单的小例子来展示贝叶斯定理

病人的例子:
某个医院早上收了八个门诊病人,如下表。


现在又来了第九个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?

根据贝叶斯定理:

P(A|B) = P(B|A) P(A) / P(B)

可得满足“打喷嚏”和“建筑工人”两个条件下,感冒的概率如下:


假定"打喷嚏"和"建筑工人"这两个特征是独立的(即这两个条件没有相关性,比如不存在说他是建筑工人他打喷嚏的概率比较大或者比较小这种关系),因此,上面的等式就变成了。


通过统计可得:


通过贝叶斯公式算出了满足条件下感冒的概率,那么现在贝叶斯分类器如何实现呢?


接上面的例子,从上面我们得出了 P(感冒|打喷嚏x建筑工人) 的值,那么我们可以再算出
P(不感冒|打喷嚏x建筑工人) 的值,计算结果如下:


OK,现在我们知道来一个打喷嚏的建筑工人,他感冒的几率是P(感冒|打喷嚏x建筑工人)= (16/45)。不感冒的几率是P(不感冒|打喷嚏x建筑工人)= (16/45)。


通过对概率的比较,我们就可以将打喷嚏的建筑工人分类到“不感冒”人群中(不感冒的概率比较大)。 这就是朴素贝叶斯分类器的最简单的应用了。当然你也看到了,贝叶斯分类器需要我们应用到统计所得的结果,这需要数据量比较大,大到能满足大数定理(大数定理这里就不多解释啦,自行百度即可),以及样本数据足够客观。


接下来我们看一个实际的例子,是我在 github 上看到的一个项目例子,根据姓名来对性别进行分类。看上去觉得很不可思议吧,其实也是用了上述说的贝叶斯分类的方法。


二.贝叶斯分类器根据姓名判别男女 -python


项目github地址:https://github.com/observerss/ngender


先说一下主要思路,我们日常从一个人的名字中,基本上能大致判断这个名字的主人是男是女。比如李大志,这个名字一听就很男性。为什么呢?因为大字和志字男性名字用得比较多。


虽然机器一眼看不出来,但它可以通过统计信息来判断。如果有足够多的数据,我们就可以统计出大字和志字用作男性名字的比例,计算概率信息。然后就可以用这些概率,运用上述的贝叶斯公式来进行计算,判定性别。


代码其实不难,各个字的统计数据已经计算好,在项目中给出。我们只需要读取文件数据,存储到 python 的字典中,计算出概率,然后预测的时候进行计算即可。我们先看核心代码,稍后会有例子说明。


里面核心代码文件为:

这里主要讲一下核心代码的内容:

https://github.com/observerss/ngender/blob/master/ngender/ngender.py



上述代码还是比较简单的,首先在初始化的时候会调用 _load_model() 函数,这个函数完成的是一些概率计算工作,比如先将每个字对应是男是女的概率计算好存储在字典中。


然后在计算的时候,先过滤掉姓氏。然后分别计算出这个名字是男是女的概率,比如计算 P(男|李大志)和P(女|李大志),,对比哪个概率大一些,然后进行男女分类。


这里放上一个例子:判断


公式原理为贝叶斯公式,下面对公式中中各个项进行解答,首先明确我们已经统计得到P(gender=男),P(gender=女)的概率。


怎么算 P(name has 本|gender=男)?

 “本”在男性名字中出现的次数 / 男性字出现的总次数

怎么算 P(gender=男)?

• 男性名出现的次数 / 总次数


这个概率对男女来说都是一样的,所以没必要算出来,即我们只需要比较P(name=本山|gender=男)P(gender=男)和P(name=本山|gender=女) P(gender=女)两部分谁比较大即可做出判断。


以上就是贝叶斯分类器介绍的全部内容啦。

参考文章:

http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html


来源:云栖社区

链接:https://yq.aliyun.com/articles/673991?spm=a2c4e.11155435.0.0.1a411b55Vn4j26



End



今日学习推荐

【深度学习集训营第二期】

火热报名中

从DL基础起步实战BAT工业项目

12月4日开课

努力5周,挑战年薪40万,甚至更多薪

还没报名的亲们抓紧时间喽,下周二开课啦

报名即送三门课程

《机器学习工程师 第八期》

《深度学习 第三期》、《TensorFlow框架案例实战》

助力您更好的学习深度学习集训营课程

且2人及2人以上组团报名各减500元


咨询/报名/组团请添加微信客服

julyedukefu_02

👇

长按识别二维码


 更多资讯

 请戳一戳


往期推荐

重要通知:有个轻松赚零花钱的机会,微信可直接提现

刚写完排序算法,就被开除了…

985本科生程序员,校招拿到40万的Offer,老员工被倒挂:难受!

这是一份超全机器学习&深度学习网站资源清单,请收藏!

32岁程序员面试,因年龄太大被拒!网友:是领导能力差怕被超越

GitHub上25个最受欢迎的开源机器学习库



拼团,咨询,查看课程请点击 “ 阅读原文 

↓↓↓ 
登录查看更多
0

相关内容

本话题关于日常用语「概率」,用于讨论生活中的运气、机会,及赌博、彩票、游戏中的「技巧」。关于抽象数学概念「概率」的讨论,请转 概率(数学)话题。
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
【实用书】Python机器学习Scikit-Learn应用指南,247页pdf
专知会员服务
255+阅读 · 2020年6月10日
商业数据分析,39页ppt
专知会员服务
157+阅读 · 2020年6月2日
【干货书】机器学习Python实战教程,366页pdf
专知会员服务
331+阅读 · 2020年3月17日
广东疾控中心《新型冠状病毒感染防护》,65页pdf
专知会员服务
18+阅读 · 2020年1月26日
从零推导支持向量机 (SVM)
AI科技评论
9+阅读 · 2019年2月7日
从示例中理解SVM算法(附代码)
论智
9+阅读 · 2018年5月10日
一文读懂因果推测、倾向模型(结合实例)
数据派THU
3+阅读 · 2018年3月26日
一文读懂贝叶斯分类算法(附学习资源)
大数据文摘
12+阅读 · 2017年12月14日
独家 | 一文读懂贝叶斯分类算法(附学习资源)
数据派THU
7+阅读 · 2017年12月7日
实例详解贝叶斯推理的原理
算法与数学之美
3+阅读 · 2017年10月3日
详解基于朴素贝叶斯的情感分析及Python实现
AI研习社
9+阅读 · 2017年7月12日
用户画像之用户性别识别
Python技术博文
7+阅读 · 2017年7月7日
Arxiv
23+阅读 · 2018年10月24日
Arxiv
3+阅读 · 2018年5月21日
Arxiv
10+阅读 · 2017年7月4日
VIP会员
相关资讯
从零推导支持向量机 (SVM)
AI科技评论
9+阅读 · 2019年2月7日
从示例中理解SVM算法(附代码)
论智
9+阅读 · 2018年5月10日
一文读懂因果推测、倾向模型(结合实例)
数据派THU
3+阅读 · 2018年3月26日
一文读懂贝叶斯分类算法(附学习资源)
大数据文摘
12+阅读 · 2017年12月14日
独家 | 一文读懂贝叶斯分类算法(附学习资源)
数据派THU
7+阅读 · 2017年12月7日
实例详解贝叶斯推理的原理
算法与数学之美
3+阅读 · 2017年10月3日
详解基于朴素贝叶斯的情感分析及Python实现
AI研习社
9+阅读 · 2017年7月12日
用户画像之用户性别识别
Python技术博文
7+阅读 · 2017年7月7日
Top
微信扫码咨询专知VIP会员