本文包括:
1.走近朴素贝叶斯 - 上帝到底掷不掷骰子
2.重要概念
3.贝叶斯公式的一般形式
5.朴素贝叶斯的基本方法
6.贝叶斯估计
其它有关数据分析,机器学习的文章及社群
朴素贝叶斯 - 贝叶斯估计Python复现:
朴素贝叶斯(Bayes)模型python复现 - 贝叶斯估计;下溢出问题 - 知乎 (zhihu.com)
1.走近朴素贝叶斯 - 上帝到底掷不掷骰子:
上帝到底掷不掷骰子,这个问题精准地概括了相对论和量子力学之间的矛盾,即我们这个世界到底是决定的,还是概率的。
上帝掷骰子吗?
在我们的生活中,概率的思想实际上一直存在,比如明天有雨的概率是80%,比如某个病人的肿瘤病变的概率是20%,比如生女孩的概率是50%。
玩过飞行棋的都知道,骰子的每一面都有1/6的概率朝上,这种每一次投掷都存在的不确定性让飞行棋充满了乐趣。
但是,如果有人作弊,使用的是一颗偏心骰子呢?这个骰子就会有一面朝上的概率更大,这个面对面的那个面朝下的概率更大,其它的四个面再平分剩下的概率。
也就是说,在骰子为正常骰子的条件下,和骰子为偏心骰子的条件下,某一面朝上的概率是不同的。
现在,如果我们将不同数目的正常骰子和偏心骰子混在盒子里,让一个人随便去抓,再让他掷抓出来的骰子,这时候的情况又会如何呢?
此时一个特定面朝上的概率又会发生变化。
而朴素贝叶斯,就是利用了这些概率之间的种种关系,来判断一个事件发生的概率,或者一个物体分为一个类的概率的方法。
2.重要概念:
在正式介绍朴素贝叶斯模型之前,需要先对一些基本概念有所了解,如果明白这些概念可以直接跳过。
概率分布:当我们说到概率,一般是指一个事件的概率。以A代表该事件,则该事件发生的概率是P(A)。除了事件A之外,还有可能发生事件B,事件C,事件D等等,我们将P(B),P(C),P(D)…放在二维空间中,以竖轴代表概率的大小,横轴代表事件,则可以得到一个概率分布。
当然不同的事件可能会有不同形状的概率分布,上图只是其中最常见的一种,称为正态分布。
联合概率:指包含多个条件且所有条件同时成立的概率。比如,事件A和事件B同时发生的概率为联合概率,可以通过P(A,B)表示。
边缘概率:仅考虑单一事件发生的可能性,而不考虑其它事件发生的可能性。
条件概率:在某一事件发生的情况下,另一事件发生的概率。比如以P(A|B)代表的概率的意思是,在事件B发生的情况下,事件A发生的概率。
以一个具体例子说明三种概率:
联合概率:P(性别=男,职业=幼教)=1/20,P(性别=女,职业=消防员)=2/20。
边缘概率:P(性别=男)=1/20+9/20=10/20,P(职业=幼教)=1/20+8/20=9/20
条件概率:P(职业=幼教|性别=男)=(1/20)/(1/20+9/20)=1/10,P(性别=女|职业=消防员)=(2/20)/(8/20+2/20)=2/10。
三者的关系:条件概率=联合概率/边缘概率。
P(职业=幼教|性别=男)=P(职业=幼教,性别=男)/P(性别=男)=(1/20)/(10/20)=1/10
先验概率:根据以往的经验,不用采样就可以得到的概率。比如扔骰子6点朝上的概率是1/6。
后验概率:指某件事已经发生,依据这件事发生的事实来推断某一个事件在该事件前发生的概率。比如袋子中有十个红球,五个白球,现在随机抽取一个球,仅知道第二次抽出来的球是红球(已经发生的事),计算第一次抽取出来的是红球的概率(在已发生事件前某一事件发生的概率)。
独立同分布:独立指发生的事件之间不会互相影响对方发生的概率。举个例子,男性身高高和男性肌肉多两个事件之间就不是独立的,因为身高较高的男性可能喜欢打蓝球,打篮球的男性肌肉比较多。而今天我吃了鱼和今天宇宙的边缘一颗超新星爆发了这两个事件就是独立的。
同分布指事件发生的概率符合同一个概率分布。
3.贝叶斯公式的一般形式:
我们可以通过一句话理解朴素贝叶斯分类器的原理,即通过已获得的数据算得先验概率,再通过朴素贝叶斯算法得到各事件的后验概率,认为最大的后验概率所对应的事件的类作为分类的结果。
首先说明贝叶斯公式的一般形式的推导:
上式运用到了联合概率,边缘概率和条件概率的关系。
通过上式我们可以知道,通过事件A的概率,事件B的概率和在B的情况下事件A的概率,可以求得在A的情况下事件B的概率。
公式右边的三个概率都是先验概率,可以通过训练集获得,公式左边的即后验概率,需要求得。
现在,将贝叶斯公式代入到朴素贝叶斯分类器的实际情况中。在看下面的公式时,可以对照上面的贝叶斯公式一般形式进行推导。
4.朴素贝叶斯的基本方法:
朴素贝叶斯法通过训练数据集学习联合概率分布P(X,Y)。联合概率P(X,Y)可以由条件概率P(X|Y)和边缘概率P(Y)(先验概率)相乘得到,于是,问题转换为求以下先验概率分布及条件概率分布。
先验概率分布:
其中Ck代表各个类,K为类的总数量,P(Y=Ck)代表在训练集中某一类出现的概率。
条件概率分布:
这里指Y=Ck的情况下各个特征分别为其某一可取值的概率,上式既有条件也有联合,因此也可称为条件联合概率。
通过条件概率和先验概率(边缘概率)可得到联合概率分布P(X,Y)。
但是这里有一个问题,在实际运用中,一个特征可能有非常多的取值,如果采用联合概率分布,那么就需要对每种特征的每种取值的每一个组合计算先验概率,这种情况下,条件概率分布有指数级数量的参数,这样复杂的模型实际是不可行的。
让我们来计算一下这种情况下参数的个数:具体的,我们可以假设特征x(j)可取值有Sj个,Y可取值有K个,那么参数个数为每个特征的可取值个数相乘再乘以Y的可取值,即
其中,n是特征的个数。
在实际运用中,特征的个数n可以有成百上千,甚至上万上亿,而每个特征的可取值又可能有成百上千,这样算下来真的是指数级别的参数了。
为了解决计算量太大模型太复杂的问题,我们可以对条件概率分布作条件独立性的假设。虽然该假设可能并不符合实际情况,但在该假设下的一些模型的预测准确率足够用以做出决策,因此可以忽略条件独立性假设造成的误差。
在事件独立的情况下,P(A,B)=P(A)*P(B),因此原来的条件概率可转换为多个独立事件的条件概率的连乘:
在此假设下,后验概率的计算用到贝叶斯定理:
因为x为新输入实例的特征向量,因此对于Y取任意值,分母不变。我们将后验概率最大的类作为x的类输出,在对比大小时,相同的分母可以忽略,所以最后朴素贝叶斯公式可转换为:
其中,P(Y=Ck)即先验概率(边缘概率),P(X(j)=x(j)|Y=Ck)即条件概率,可以依据训练集得出。上式代表计算在某一特征向量的情况下计算该实例为某一类的概率,将最大的概率所对应的类认为是该点的类。
那么接下来的问题就转变为先验概率和条件概率的计算,这两个概率分布的计算都很简单。
先验概率的计算方法:
其中N为训练集中实例的总数,I为指示函数,表示若括号中条件成立则取1,否则取0。比如训练集一共有100个实例,其中分类为A的实例有50个,则P(Y=A)=50/100=1/2。
按照这个思路可以自己理解一下条件概率的计算方法:
5.贝叶斯估计:
考虑这样一个情况,如果新出现的实例中有一个特征的取值在训练集中从来没有出现过,会产生什么后果?
在这种情况下,朴素贝叶斯公式中的
这一连乘项中的一个值为0,即
最终导致Y取任意情况下后验概率皆为0,无法对新输入实例进行分类。
但在实际应用中,仅一个特征的偏差可能对结果的影响并不大,这个新输入的实例的真实分类可能仍属于训练集中的某个类。
解决这一问题的方法是采用贝叶斯估计。
贝叶斯估计的先验概率为:
条件概率为:
式中λ≥0,当λ=1,则称为拉普拉斯平滑(一般都使λ=1)。K为训练集中Y的类的数量,Sj为特征x(j)可取值的数量。
也就是说,对于先验概率,拉普拉斯平滑在其分子加1,在分母加上类别的数量。对于条件概率,则是在分子加1,在分母加上该特征的可取值的数量。
在添加λ后,前面所提到条件概率为0的情况就不会出现了。
尽管λ会让后验概率与未加入λ之前有所变化,但是在数据量非常大的情况下,λ的加入所引起的后验概率的变化是在可接受范围的,对最终的分类结果影响可以忽略不计。
我是舟晓南,关注我的同名 公众号 和 知乎,发掘更多内容哦
对机器学习,深度学习,python感兴趣,欢迎关注专栏,学习笔记已原创70+篇,持续更新中~ ^_^
专栏文章举例:
【机器学习】关于逻辑斯蒂回归,看这一篇就够了!解答绝大部分关于逻辑斯蒂回归的常见问题,以及代码实现 - 知乎 (zhihu.com)
记录一下工作中用到的少有人知的pandas骚操作,提升工作效率 - 知乎 (zhihu.com)
关于切片时不考虑最后一个元素以及为什么从0开始计数的问题 - 知乎 (zhihu.com)
关于转行:
舟晓南:如何转行和学习数据分析 | 工科生三个月成功转行数据分析心得浅谈
舟晓南:求职数据分析师岗位,简历应该如何写?|工科生三个月成功转行数据分析心得浅谈
我建了个数据分析,机器学习,深度学习的群~ 需要学习资料,想要加入社群均可私信~
在群里我会不定期分享各种数据分析相关资源,技能学习技巧和经验等等~
详情私信,一起进步吧!