此理论由Thomas Bayes提出,18世纪英国数学家和哲学家。此理论主要用于计算基于某个条件下另一件事情发生的概率有多少。例如:事情A发生后,计算事情B发生的概率。
这篇文章里,不会出现太多的专业术语,尽量用简单通俗的语言去说明问题。
用一个简单的例子去说明贝叶斯公式:
箱子里有三个球,分别是A,B,C。一次拿两个球,那么不管怎么拿,只有三个种组合情况:
情况1:AB;情况2:AC;情况3:BC。
根据上面的组合情况,很显然,对于A球B球C球来说,每一个球被拿出来的几率是三分之一。用符号表示:
P(A)=1/3
P(B)=1/3
P(C)=1/3
根据组合情况,同时拿出AB球的概率是三分之一,同理可用于AC球,BC球。用符号表示:
P(AB|箱子)=1/3
P(AC|箱子)=1/3
P(BC|箱子)=1/3
另外,在拿出来的两个球里,如果出现A球,那么B球出现的概率是二分之一。理由很简单,因为A球已经被假设一定会被拿到,那么剩下的只有B球和C球,所以拿到B球的概率肯定是二分之一。可以这么想象,把手伸进箱子里,首先准确无误的拿到了A球,那么接下来从剩余的两个球里拿任意一个,都是二分之一的机会。用符号表示:
P(B|A)=1/2(意思是:A条件发生之后,B发生的概率)
P(A|B)=1/2(意思是:B条件发生之后,A发生的概率)
注意,在现实应用中,P(B|A)是不能和P(A|B)划等号的,这个例子只是凑巧数值上相等而已。
接下来,先把这个例子放一下,用常理想象另一件事情,已知两个条件:
条件一:事件1发生的概率是某数值,用符号表示:P(事件1)
条件二:如果事件1发生了,事件2
必定会跟着发生(事件2
后发生率100%,这多了个“
后”字,表示是有依赖性的),也就是说这两件事情都发生的话,用符号表示:P(事件2∩事件1)
现在问:事件1发生后,事件2发生的概率是多少,用符号表示:P(事件2|事件1),其实就是两件事情都发生了。
很显然,事件2的发生是以事件1作为必要前提的,而且事件2在事件1发生后是必定会发生,那么事件1发生的概率其实就是事件2发生的概率,那么用公式表示就是:
P(事件2|事件1)*P(事件1) = P(事件1∩事件2)再把上面的条件二稍微修改一下,就改几个字,其他不变:
条件一:事件1发生的概率是某数值,用符号表示:P(事件1)
条件二:如果事件1发生了,事件2
可能会跟着发生(事件2后发生率为某个百分比数值),也就是说这两件事情都发生的话,用符号表示:P(事件2∩事件1)
现在问:事件1发生后,事件2发生的概率是多少,就是求P(事件2|事件1)。
很显然,只是改一下事件2的发生概率的数值而已,由原来的百分百改成某个百分比数值,依然可以用这个公式:P(事件2|事件1)*P(事件1) = P(事件1∩事件2)
好了,现在用英文字母来代替事件1和事件2吧,用字母A代替事件1,B字母代替事件2,得到以下简化公式:
P(B|A)*P(A) = P(A∩B)
同样的道理,把上面的事件1和事件2的角色对调以下,也可以得到这个公式:
P(A|B)*P(B) = P(A∩B)
好了,把公式串联起来:P(B|A)*P(A) = P(A∩B)= P(A|B)*P(B),把中间的P(A∩B)暂时忽略,就是:P(B|A)*P(A) = P(A|B)*P(B),如果大家同时除以P(A),就是:
这就是大名鼎鼎的贝叶斯公式了
可以把上面的三个球例子里得到的数据代入公式进行验证:
P(B|A)=1/2
P(A|B)=1/2
P(A)=2/3
P(B)=2/3
P(A∩B)=1/3
代入公式:P(B|A) = P(A|B)*P(B) / P(A),就是:1/2 = 1/2 乘以 2/3 除以 2/3
再代入公式:P(B|A)*P(A) = P(A∩B),就是:1/2 乘以 2/3 = 1/3
数据代入之后,结果正确吻合。最终验证了开头的那句话:贝叶斯理论主要用于计算基于某个条件下另一件事情发生的概率有多少。
使用贝叶斯公式要注意的事情,不能按照下面的方法进行公式等价转换:
下面是正确的等价转换公式:
下面的两个等式在各个属性都是独立互不影响的前提条件下才成立:
当某种情况从没出现过,导致某个概率为零的时候,可以采用拉普拉斯平滑来计算概率:
其实贝叶斯数据就只有两种类型:
属性值与分类,它的求解就是:通过知道一个或多个属性值,去求解分类遍布概率;或者知道一个或者多个分类遍布值,去求解某些属性值的概率,用通俗的话去理解贝叶斯公式:
P(分类A):分类A所属的大类里,分类A占的比例。例如:在一个公司的工作岗位有:技术岗位,营销岗位,售后岗位,那么技术岗位占的比例就是三分之一,P(技术岗位)=1/3。
P(属性值A):某属性下,属性值为A的数据所占比例。例如:技术岗位有个属性,叫做职称,职称里有几个属性值,分别为:初级,中级,高级,现在有10个技术人员,5个是初级,3个中级,2个高级,那么:初级占的比例就是一半,P(初级)=5/10。
P(属性值b|分类A):假设属性值b属于属性B,那么可以解释为:A分类里面,属性为B的数据里,属性值为b的数据所占的比例。P(分类A|属性值b):假设属性值b属于属性B,那么可以解释为:属性B里面,属性值为b的数据里,其中属于分类A的数据所占比例。贝叶斯的应用例子:天气预报(下面的数据是为了举例而乱填写的,与生活中的实际情况不一样),假设下面这些是历史数据:
问题:知道明天的温度是高温,风力是微风,天气是晴朗,问空气湿度是潮湿的概率是多少?
实际上就是求:
继续分解上面的公式:
开始逐个计算右边的值:
P(高温|潮湿):潮湿的数据有两条,在温度属性里,没有一条是高温,那么高温在这个数据量里,占的比例是零(貌似有点不太对劲,但是又说不出什么原因,先暂时这样吧)。
P(微风|潮湿):潮湿的数据有两条,在风力属性里,其中一条是微风,那么微风在这个数据量里,占的比例是二分之一。
P(晴朗|潮湿):潮湿的数据有两条,在天气属性里,其中一条是晴朗,那么晴朗在这个数据量里,占的比例是二分之一。
P(潮湿):潮湿的数据有两条,对应空气湿度这个属性,所占比例是二分之六。
P(高温):高温的数据有三条,对应温度这个属性,所占比例是三分之六。
P(微风):微风的数据有两条,对应风力这个属性,所占比例是二分之六。
P(晴朗):晴朗的数据有四条,对应天气这个属性,所占比例是四分之六。
好了,把数值都代进去吧:P(潮湿|高温x微风x晴朗)=0 * 1/2 * 1/2 * 2/6 除以 ( 3/6 * 2/6 * 4/6 ) = 0
什么,最终结果是零!!!从数据上来说感觉也对,毕竟历史数据里面,凡是空气湿度是潮湿的,从没出现过高温现象,历史数据都没出现过的情况,你凭啥叫人去预测这个概率呀?所以最终结果是零,从逻辑上来说,也说的过去。但是现实生活中并不如此,毕竟你收集不到的情况数据,不代表这种情况从来没出现过!!!或许只是这种情况非常罕见,罕见到难以遇到。所以呢,还是找下原因,修正上面的结果。
原因很明显,就是:
P(高温|潮湿):潮湿的数据有两条,在温度属性里,没有一条是高温,那么高温在这个数据量里,占的比例是零。因为是零,所以导致了整个计算结果都是零。
这时候要对全体概率采用拉普拉斯平滑的方法进行计算:
首先对P(高温|潮湿)进行平滑计算:0+1 / 3+2等于五分之一,解释如下,
0:潮湿的数据有两条,在温度属性里,没有一条是高温,所以是零。
1:固定值,常量,没什么好说的。
3:高温这个属于温度属性,在这个属性里,不同的属性值只有三种情况:低温,中温,高温,所以值是三。
2:整个表格里,属性值为潮湿的数据有两条。
按照这个思路,对每一个概率都进行平滑计算:
P(微风|潮湿):1+1 / 3+2等于五分之二,解释如下,
1:潮湿的数据有两条,在风力属性里,其中一条是微风,所以数值是一。
1:固定值。
3:微风这个属于风力属性,在这个属性里,不同的属性值只有三种情况:微风,大风,暴风,所以值是三。
2:整个表格里,属性值为潮湿的数据有两条。
P(晴朗|潮湿):1+1 / 3+2等于五分之二,解释如下,
1:潮湿的数据有两条,在天气属性里,其中一条是晴朗,所以数值是一。
1:固定值。
3:晴朗这个属于天气属性,在这个属性里,不同的属性值只有三种情况:下雨,多云,晴朗,所以值是三。
2:整个表格里,属性值为潮湿的数据有两条。
P(潮湿):2+1 / 3+6等于九分之三,解释如下,
2:在空气湿度属性里,潮湿的数据有两条。
1:固定值。
3:空气湿度属性里,不同的属性值只有三种情况:潮湿,干燥,微微湿润,所以值是三。
6:空气湿度属性里,一共有六条数据。
P(高温):3+1 / 3+6等于九分之四,解释如下,
3:在温度属性里,高温的数据有三条。
1:固定值。
3:温度属性里,不同的属性值只有三种情况:低温,中文,高温,所以值是三。
6:温度属性里,一共有六条数据。
P(微风):2+1 / 3+6等于九分之三,解释如下,
2:在风力属性里,微风的数据有两条。
1:固定值。
3:风力属性里,不同的属性值只有三种情况:微风,大风,暴风,所以值是三。
6:风力属性里,一共有六条数据。
P(晴朗):4+1 / 3+6等于九分之五,解释如下,
5:在天气属性里,微风的数据有四条。
1:固定值。
3:天气属性里,不同的属性值只有三种情况:多云,下雨,晴朗,所以值是三。
6:天气属性里,一共有六条数据。
把上面的数值代入公式吧:
P(高温|潮湿):0+1 / 3+2等于1/5
P(微风|潮湿):1+1 / 3+2等于2/5
P(晴朗|潮湿):1+1 / 3+2等于2/5
P(潮湿):2+1 / 3+6等于3/9
P(高温):3+1 / 3+6等于4/9
P(微风):2+1 / 3+6等于3/9
P(晴朗):4+1 / 3+6等于5/9
1/5 * 2/5 * 2/5 * 3/9 / (4/9 * 3/9 * 5/9)=0.129,这就是最终结果,知道明天的温度是高温,风力是微风,天气是晴朗,空气湿度是潮湿的概率是12.9%
贝叶斯运用的条件:所有分类都必须要有同样的属性(属性值可以不一样),被预测的事物必须拥有同样的属性,而且每一个属性都要有具体的值。
适用场景:已经发生或已存在的现象,从这些已知现象里总结出特征(也可以说成是条件),然后根据现有特征推导将来某件事情(也就是未发生的事情)的发生概率;另外,未发生的事情的特征不能加入训练集,也就是说不能将这些未发生的事情的特征加入已知特征数据集里面参与推导运算。
如果未发生的事情有些特征是已知训练集里所没有的,在特征独立互不干涉的情况下,可以考虑用平滑方法去运算。
最后,要提醒的是:
1 贝叶斯算法不是万能算法,它在一些场合不适用。
2 对待客观事物的态度,不要过度迷信算法公式,就这个贝叶斯算法来说,概率是一种不存在的客观事实,不要用概率去认定现实,概率不等于现实,这是要记住的,所以采用贝叶斯计算出的结果,有时候是跟现实违背的。概率只能够用于参考,不能用于生搬硬套到现实生活中去做事!网络上的一个举例:已知一对夫妻生了2个孩子,其中一个是女孩,那么另一个也是女孩的概率的多少?原解法是:
这个解法得到的数值是正确的,从学术角度来说是对的,但从现实来说不符合逻辑,因为人只有两种性别,不是男就是女,所以从现实中去考虑这个问题,就是二分之一。而我个人认为最终的答案也是二分之一,为什么?因为我们一切活动的最终目的,都是为了去做好现实中的某些事情,脱离了现实去玩纯理论,意义不大。一门知识如果不拿去参与社会实践活动,永远只在纸上谈兵,那么干脆把这门知识当做故事去听就算了。