01 贝叶斯算法 - 朴素贝叶斯
引子:
1、孩子的性别问题
已知一对夫妻生了2个孩子,其中一个是女孩,那么另一个也是女孩的概率的多少?
普遍大家会觉得生男生女都一样,所以另一个也是女孩的概率是1/2。而另一部分稍微聪明一点的人认为:根据排列组合,两个孩子生男生女一共有4种可能性,所以都是女生的概率是1/4。
然而恭喜你们,完美得避开了正确答案。
我们来看看这究竟是怎么一回事,不考虑数学公式,我们来看看两个孩子中其中一个是女孩的可能性有哪些。
首先,小夫妻生了老大和老二,但题干中并没有说明哪个是女孩。
给出所有生孩子可能出现的情况:
(老大,老二) = { 男男, 女女, 男女, 女男 };
在其中,出现女孩的情况有三个:
{女女, 男女, 女男 };
在这三种情况里,满足其中一个是女孩,那么另一个也是女孩的情况只有一种。
所以正确答案是1/3;
用条件公式概率公式来描述:
思路1:
即:在其中一个是女孩的情况下,夫妻生的双胞胎都是女孩的概率是1/3。
思路2:
P(AB) :表示两个都是女孩的概率 = 1/4;
P(B):其中一个是女孩 = 3/4;
请将这两个红色的公式深深得植入大脑后开始本章的学习。
2、古典概率中著名的三门问题
参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机率?
推荐一个非常鬼畜的动画来帮助大家理解这个问题:
https://mp.weixin.qq.com/s/7XqjBR4xUUOtuWyzL5v2ig
数学公式分析:
第一次选中车,第二次中选车的联合概率,用公式表达:
P(1车,2车) = 第一次选中车的概率 × (第一次选中车的条件下,第二次还选中车的概率);用公式表达:
分析:第一次抽到车的概率1/3,第二次如果换抽到车的概率是0。
同理:第一次选中羊,第二次选中车的联合概率公式:
分析:第一次抽到羊的概率2/3,第二次抽如果换,必然抽到车。
获奖概率:P(2车) - 如果第二次换门,抽奖获得车的概率。
同理,如果第二次换门,抽奖获得羊的概率:P(2羊)
结论:从概率角度来看,换个门是有价值的。
衍生一个问题:一共1000个门里,有999只草泥马,只有一辆劳斯莱斯。
你选了一扇门后,我去掉了另外998个装有草泥马的门。
现在剩下一扇你刚才选的门,以及另外一扇没有打开的门。
现在你换不换?
傻子才不换...例子想要说明的重点:
在给定条件的情况下,很多生活中看似显而易见的概率问题会发生重大的变化。
在模型求解的过程中,会遇到2种问题:判别式模型和生成式模型。
判别式模型: P(Y|X) - 条件概率,即在发生了X的条件下,生成了Y的概率。
生成式模型: P(X,Y) - 联合概率,即考虑X和Y同时发生的概率。
很多模型都是基于判别式和生成式进行构建的。很多分类的问题用的是判别式模型。聚类问题多数采用生成式模型。
一、贝叶斯定理相关公式
先验概率P(A):在不考虑任何情况下,A事件发生的概率。
条件概率P(B|A):A事件发生的情况下,B事件发生的概率。
后验概率P(A|B):在B事件发生之后,对A事件发生的概率的重新评估。
有时候 P(B|A) 不太好求,但右边式子中的情况都比较好求,这时候可以通过贝叶斯公式转化问题:
P(B|A) = P(A,B) / P(A) = P(B)P(A|B) / P(A)
全概率:如果A和A'(A的补集)构成样本空间的一个划分,那么事件B的概率为:A和A'的概率分别乘以B对这两个事件的概率之和。
例子中的: 就是求全概率的一种情况。
即: ;
基于条件概率的贝叶斯定律数学公式:
例子:后验概率问题 - P(B|A) = P(A,B) / P(A) = P(B)P(A|B) / P(A);
有两个碗,第一个碗中装有30个水果糖和10个巧克力糖,第二个碗中装有20个水果糖和20个巧克力糖,现在随机选择一个碗,从中取出一颗糖,发现是水果糖,请求出这颗水果糖来自一号碗的概率有多大?
思路:
1、已知每个碗中取出水果糖的概率,已知每次选碗也是随机。
2、那么先求出随机取碗条件下,取出是水果糖的全概率。
3、再根据P(B|A) = P(A,B) / P(A) = P(B)P(A|B) / P(A) 公式反推后验概率问题:水果糖来自一号碗的概率有多大。
二、朴素贝叶斯算法
朴素贝叶斯(Naive Bayes, NB)是基于“特征之间是独立的”这一朴素假设,应用贝叶斯定理的监督学习算法。朴素贝叶斯本质就是一个分类算法。
对应给定的样本X的特征向量x1,x2,...,xn;该样本X的类别y的概率可以由贝叶斯公式得到:
朴素贝叶斯算法推导:
特征属性之间是独立的,所以得到:
在给定样本的情况下,P(x1,x2,...,xm)是常数,所以得到:
P(x1,x2,xn)是一个定值,所以式子左右成正比从而:
用TF-IDF分词和词袋法来分析上述公式的应用:
分析 - 朴素贝叶斯算法朴素贝叶斯算法流程/定义如下:
1、设x={a1,a2,...,an}为待分类项,其中a为x的一个特征属性。
2、类别集合为C={y1,y2,...,yn};
3、分别计算P(y1|x),P(y2|x),....,P(yn|x)的值(贝叶斯公式)
4、如果P(yk|x)=max{P(y1|x),P(y2|x),....,P(yn|x)},那么认为x为yk类型。
三、高斯朴素贝叶斯
Gaussian Naive Bayes是指当特征属性为连续值时,而且分布服从高斯分布,那么在计算P(x|y)的时候可以直接使用高斯分布的概率公式:
因此只需要计算出各个类别中此特征项划分的各个均值和标准。
P(xk|yk) 怎么求?
1、先找到yk这个分类结果的样本,找到这些样本对应的xk属性,求这些xk的均值和标准差,最后代入g(x,η,σ);
2、分别计算P(x1|yk)× ....× P(xn|yk) × P(yk)的值,这个公式和P(yk|x1,x2,...,xn)成正比;
3、当分类个数为m个时,分别计算k=1~m的 P(x1|yk)× ....× P(xn|yk) × P(yk)的值,取其中最大概率时的K值,即最终的分类结果。
四、伯努利朴素贝叶斯
Bernoulli Naive Bayes是指当特征属性为离散值时,而且分布服从伯努利分布,那么在计算P(x|y)的时候可以直接使用伯努利分布的概率公式:
伯努利分布是一种离散分布,只有两种可能的结果。1表示成功,出现的概率为p;0表示失败,出现的概率为q=1-p;其中均值为E(x)=p,方差为Var(X)=p(1-p);
五、多项式朴素贝叶斯
Multinomial Naive Bayes是指当特征属性服从多项分布,从而,对于每个类别y,参数为θy=(θy1,θy2,...,θyn),其中n为特征属性数目,那么P(xi |y)的概率为θyi; 该算法一般用于文本分类。
分析和总结:
如果数据中既有连续的特征,又有离散的特征,我们该如何去做分类?
本质上来说,我们计算的是每一个特征对应的概率。如图:
当遇到连续值特征时,我们用高斯去算P(xi|y)。
遇到离散值特征时,我们用多项式或伯努利去算P(xi|y)。
但问题是我们的API中没有自动得集成这些功能,在这种情况下该怎么去做分类呢?
首先,我们要人为得去分析特征到底属于什么类型的数据。如果特征是一个连续值比较多的数据集,我们统一使用高斯就行了。反之统一用用多项式或伯努利。或者高级一点,对数据进行分箱操做。