贝叶斯定理
贝叶斯法则,贝叶斯公式
产生来源
引入:
在贝叶斯创造这个理论之前,人们已经能够计算出
正向概率
,如:“假设某个袋子中有N个白球,M个黑球,摸出黑球的概率是多大?”,当然这是在已知数据的情况下才能计算的先验概率
。这个问题反过来:“如果我们事先并不知道袋子里面是什么球,而摸出一个(或者几个)球,观察球的颜色之后来推测袋子中球的比例”。这个问题就是逆向概率
问题,也就是贝叶斯定理解决的问题。
定义:(英语:Bayes' theorem)是概率论中的一个定理,描述在已知一些条件下,某事件的发生几率。比如,如果已知某癌症与寿命有关,使用贝叶斯定理则可以透过得知某人年龄,来更加准确地计算出他罹患癌症的几率。————wiki解释
贝叶斯公式:
事件B发生的条件下,事件A发生的概率为:
事件A发生的条件下,事件B发生的概率为:
由此可得:
得贝叶斯公式如下:
补充知识
- 全概率公式:这个公式的作用是计算贝叶斯定理中的P(B);
如果A和A'构成一个问题的全部(全部的样本空间),那么事件B的概率就等于A和A'的概率分别乘以B对这两个事件的条件概率之和。
-
P(A):也叫
先验概率
或边缘概率
;在没有数据支持下,A发生的概率。
(Prior probability),不知道其他事件发生的前提下,我们对事件A发生概率的一个主观判断。
-
P(A|B):也叫
条件概率
或后验概率
;在已知B发生后A的条件概率,由于得自B的取值而被称为A的后验概率。
(Posterior probability),即在B事件发生后,我们对事件A发生概率的重新评估。
-
P(B|A):也叫
似然函数
;在已知A事件发生的情况下的概率分布。
称为可能性函数(Likelyhood),这是一个调整因子,即新信息事件B的发生调整,使得先验概率更接近真实概率。
可能性函数可以理解为得到新信息后,对先验概率的一个调整,例如:主观认为明天下雨的可能为50%(先验概率),在知道今天的空气湿度、温度等信息(调整因子)后认为明天下雨的可能超过50%(后验概率)。
>1,意味着“先验概率”被增强,事件A的发生的可能性变大;
=1,意味着事件B无助于判断事件A的可能性;
>1,意味着“先验概率”被削弱,事件A的发生的可能性变小;
深入理解
贝叶斯公式:
上式可以理解为:
所以贝叶斯的底层思想为:
如果掌握了一个事情的全部信息,就可以计算出一个客观概率(古典概率、正向概率),但是绝大多数决策面临的信息都是不全的,在有限信息的条件下,尽可能预测一个好的结果,也就是在主观判断的基础上,可以先估计一个值(先验概率),然后根据观察的新信息不断修正(可能性函数)
。
先根据以往的经验预估一个先验概率P(A),然后加入新的信息(B),这样有了新的信息后,我们对事件A的预测就更加准确。
应用案例
案例一:事件判断
问题:有两个一模一样的碗,1号碗里有30个巧克力和10个水果糖,2号碗里有20个巧克力和20个水果糖。然后把碗盖住。随机选择一个碗,从里面摸出一个巧克力。这颗巧克力来自1号碗的概率是多少?
求解问题:
来自1号碗记为事件A1,来自2号碗记为事件A2,取出的是巧克力,记为事件B,那么要求的问题就是P(A1|B),即取出的是巧克力,来自1号碗的概率
已知信息:
1号碗里有30个巧克力和10个水果糖
2号碗里有20个巧克力和20个水果糖
取出的是巧克力
应用贝叶斯:
求先验概率(来自1号碗的概率)
由于两个碗是一样的,所以在得到新信息(取出是巧克力之前),这两个碗被选中的概率相同,因此P(A1)=P(A2)=0.5,(其中A1表示来自1号碗,A2表示来自2号碗)
这个概率就是"先验概率",即没有做实验之前,来自一号碗、二号碗的概率都是0.5。
求可能性函数:
P(B|A1):
表示从一号碗中(A1)取出巧克力(B)的概率。因为1号碗里有30个水果糖和10个巧克力,所以P(B|A1)=30/(30+10)=75%
P(B):
P(B|A1)是1号碗中巧克力的概率,我们根据前面的已知条件,很容易求出。P(B|A2)是2号碗中巧克力的概率,也很容易求出。
而P(A1)=P(A2)=0.5,根据全概率公式,最后P(B)=62.5%。所以,可能性函数P(A1|B)/P(B)=75%/62.5%=1.2。
带入贝叶斯公式求后验概率:
将上述计算结果,带入贝叶斯定理,即可算出P(A1|B)=60%
这个例子中我们需要关注的是约束条件:抓出的是巧克力。如果没有这个约束条件在,来自一号碗这件事的概率就是50%了,因为巧克力的分布不均把概率从50%提升到60%。
案例一:疾病检验
问题:假设艾滋病的发病率是0.001,即1000人中会有1个人得病。现有一种试剂可以检验患者是否得病,它的准确率是0.99,即在患者确实得病的情况下,它有99%的可能呈现阳性。它的误报率是5%,即在患者没有得病的情况下,它有5%的可能呈现阳性。现有一个病人的检验结果为阳性,请问他确实得病的可能性有多大?
求解问题:
病人的检验结果为阳性,他确实得病的概率有多大?
病人的检验结果为阳性(新的信息)为事件B,他得病记为事件A,那么求解的就是P(A|B),即病人的检验结果为阳性,他确实得病的概率
已知信息:
疾病的发病率是0.001,即P(A)=0.001;
试剂可以检验患者是否得病,准确率是0.99,即在患者确实得病的情况下(A),它有99%的可能呈现阳性(B),也就是P(B|A)=0.99;
试剂的误报率是5%,即在患者没有得病的情况下,它有5%的可能呈现阳性,得病我们记为事件A,那么没有得病就是事件A的反面,记为A',所以这句话就是P(B|A')=5%;
应用贝叶斯定理:
求先验概率:
疾病的发病率是0.001,即P(A)=0.001
求可能性函数:
P(B|A)
表示在患者确实得病的情况下(A),试剂呈现阳性的概率,从前面的已知条件中我们已经知道P(B|A)=0.99
P(B)
根据全概率公式,可以求得P(B)=0.05,
所以可能性函数P(B|A)/P(B)=0.99/0.05=19.8
带入贝叶斯公式求后验概率:
得到了一个惊人的结果,P(A|B)等于1.98%。
也就是说,筛查的正确性都到了99%以上了,通过体检判断有没有得病的概率也只有1.98%
造成这么不靠谱的误诊的原因,是我们无差别地给一大群人做筛查,而不论测量准确率有多高,因为正常人的数目远大于实际的患者,所以误测造成的干扰就非常大了。根据贝叶斯定理,我们知道提高先验概率,可以有效的提高后验概率。
所以解决的办法倒也很简单,就是先锁定可疑的样本,比如10000人中检查出现问题的那10个人,再独立重复检测一次,因为正常人连续两次体检都出现误测的概率极低,这时筛选出真正患者的准确率就很高了,这也是为什么许多疾病的检测,往往还要送交独立机构多次检查的原因。
案例二:垃圾邮件过滤器
问题:最初的垃圾邮件过滤是靠静态关键词加一些判断条件来过滤,效果不好,漏网之鱼多,冤枉的也不少。2002年,Paul Graham提出使用"贝叶斯推断"过滤垃圾邮件
。因为典型的垃圾邮件词汇在垃圾邮件中会以更高的频率出现
,所以在做贝叶斯公式计算时,肯定会被识别出来。之后用最高频的15个垃圾词汇做联合概率计算,联合概率的结果超过90%将说明它是垃圾邮件。
我们要求解的是这个概率:
这个某种特征可以是关键词、时间、频次、附件类型、包括以上各种特征混合的特征……。例如:
怎么知道垃圾邮件里出现“发票”关键词的概率?
理论上,除非我们统计所有邮件,否则我们是得不出的。这时候,就得做个妥协,在工程上做个近似,我们自己找到一定数量的真实邮件,并分为两组,一组正常邮件,一组垃圾邮件,然后进行计算,看 发票 这个词,在垃圾邮件中出现的概率是多少,在正常邮件里出现的概率是多少。
显然,这里的训练数量大一些的话,计算得到的概率会更逼近真实值。 Paul Graham 使用的邮件规模,是正常邮件和垃圾邮件各 4000封 。如果某个词只出现在垃圾邮件中, Paul Graham 就假定,它在正常邮件的出现频率是 1% ,反之亦然,这样做是为了避免概率为 0 。
这样的话,将公式继续分解为如下:
根据训练模型得到的概率,进行初始值计算:
此后,可以通过大量用户将垃圾邮件标注为正常邮件,正常邮件挪到垃圾邮件的动作,进行反复训练纠正,直至逼近一个合理值了。
不过这里还涉及到一个问题,就是单个关键词的概率(单个条件)无论如何再高,这封邮件仍然有可能不是垃圾邮件,所以在此处应用贝叶斯定理时,我们显然要用到多个条件,也就是计算这个概率:
P(垃圾邮件|检测到“A”关键词,检测到“B”关键词,检测到"C",...)
Paul Graham 的做法是,选出邮件中 P(垃圾邮件|检测到“X”关键词) 最高的 15个词 ,计算它们的联合概率
。(如果关键词是第一次出现,Paul Graham 就假定这个值等于 0.4 ,也即认为是negative normal)。
案例三:机器学习之贝叶斯算法
后续更新……
参考文章1:(知乎)小白之通俗易懂的贝叶斯定理(Bayes' Theorem)
参考文章2:(简书)贝叶斯公式/贝叶斯法则/贝叶斯定理