托马斯·贝叶斯(Thomas Bayes)是18世纪的英国数学家,也是一位虔诚的牧师。据说他为了反驳对上帝的质疑而推导出贝叶斯定理。贝叶斯定理是一个由结果倒推原因的概率算法,在贝叶斯提出这个条件概率公式后,很长一段时间,大家并没有觉得它有什么作用,并一直受到主流统计学派的排斥。直到计算机诞生后,人们发现,贝叶斯定理可以广泛应用在数据分析、模式识别、统计决策,以及最火的人工智能中,结果,贝叶斯定理是如此有用,以至于不仅应用在计算机上,还广泛应用在经济学、心理学、博弈论等各种领域,可以说,掌握并应用贝叶斯定理,是每个人必备的技能。
为了搞明白贝叶斯定理究竟要解决什么问题,我们先看一个现实生活的例子:
已知有一种疾病,发病率是0.1%。针对这种疾病的测试非常准确:
-
如果有病,则准确率是99%(即有1%未检出阳性);
-
如果没有病,则误报率是2%(即有2%误报为阳性)。
现在,如果一个人测试显示阳性,请问他患病的概率是多少?
如果我们从大街上随便找一个人,那么他患病的概率就是0.1%,因为这个概率是基于历史统计数据的先验概率。
现在,他做了一次测试,结果为阳性,我们要计算他患病的概率,就是计算条件概率,即:在测试为阳性这一条件下,患病的概率是多少。
从直觉上这个人患病的概率大于0.1%,但也肯定小于99%。究竟是多少,怎么计算,我们先放一放。
为了理解条件概率,我们换一个更简单的例子:掷两次骰子,一共可能出现的结果有6×6=36种:
这就是所谓的样本空间,每个样本的概率均为1/36,这个很好理解。
如果我们定义事件A为:至少有一个骰子是2,那么事件A的样本空间如下图红色部分所示:
事件A一共有11种情况,我们计算事件A的概率P(A):
我们再定义事件B:两个骰子之和为7,那么事件B的样本空间如下图绿色部分所示:
事件B一共有6种情况,我们计算事件B的概率P(B):
接下来我们用P(A∩B)表示A和B同时发生的概率,A∩B就是A和B的交集,如下图蓝色部分所示:
显然A∩B只有两种情况,因此,计算P(A∩B):
接下来我们就可以讨论条件概率了。我们用P(A|B)表示在B发生的条件下,A发生的概率。由于B已经发生,所以,样本空间就是B的样本数量6,而要发生A则只能是A、B同时发生,即A∩B,有两种情况。
因此,计算P(A|B)如下:
同理,我们用P(B|A)表示在A发生的条件下,B发生的概率。此时,分子仍然是A∩B的样本数量,但分母变成A的样本数量:
可见,条件概率P(A|B)和P(B|A)是不同的。
我们再回到A、B同时发生的概率,观察P(A∩B)可以改写为:
同理,P(A∩B)还可以改写为:
因此,根据上述两个等式,我们推导出下面的等式:
P(A∩B)=P(A∣B)×P(B)=P(B∣A)×P(A)
把左边的P(A∩B)去掉,我们得到等式:
P(A∣B)×P(B)=P(B∣A)×P(A)
最后,整理一下等式,我们推导出贝叶斯定理如下:
P(A∣B)=P(B)P(B∣A)×P(A)
这就是著名的贝叶斯定理,它表示,当出现B时,如何计算A的概率。
很多时候,我们把A改写为H,把B改写为E:
P(H∣E)=P(E)P(E∣H)×P(H)
H表示Hypothesis(假设),E表示Evidence(证据),贝叶斯定理的意义就在于,给定一个先验概率P(H),在出现了证据E的情况下,计算后验概率P(H|E)。
计算
有了贝叶斯定理,我们就可以回到开头的问题:
已知有一种疾病,发病率是0.1%。针对这种疾病的测试非常准确:
-
如果有病,则准确率是99%(即有1%未检出阳性);
-
如果没有病,则误报率是2%(即有2%误报为阳性)。
现在,如果一个人测试显示阳性,请问他患病的概率是多少?
用H表示患病,E表示测试为阳性,那么,我们要计算在测试为阳性的条件下,一个人患病的概率,就是计算P(H|E)。根据贝叶斯定理,计算如下:
P(H∣E)=P(E)P(E∣H)×P(H)
P(H)表示患病的概率,根据发病率可知,P(H)=0.1%;
P(E|H)表示在患病的情况下,测试为阳性的概率,根据“如果有病,则准确率是99%”可知,P(E|H)=99%;
P(E)表示测试为阳性的概率。这个概率就稍微复杂点,因为它是指对所有人(包含病人和健康人)进行测试,结果阳性的概率。
我们可以把检测人数放大,例如放大到10万人,对10万人进行检测,根据发病率可知:
-
有100人是病人,另外99900是健康人;
-
对100个病人进行测试,有99人显示阳性,另有1人未检出(阴性);
-
对99900个健康人进行测试,有2%=1998人显示阳性(误报),另有98%=97902人为阴性。
下图显示了检测为阳性的结果的分布:
┌───────┐
│100000 │
└───────┘
│
┌───────┴───────┐
▼ ▼
┌───────┐ ┌───────┐
│ 100 │ │ 99900 │
└───────┘ └───────┘
│ │
┌───┴───┐ ┌───┴───┐
▼ ▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│ 99 │ │ 1 │ │1998 │ │97902│
└─────┘ └─────┘ └─────┘ └─────┘
│ │
▼ ▼
+ +
所以,对于10万人的样本空间来说,事件E=显示阳性的概率为(99+1998)/100000=2.097%。
带入贝叶斯定理,计算P(H|E):
P(H∣E)=P(E)P(E∣H)×P(H)=2.097%99%×0.1%=0.020970.99×0.001=0.04721=4.721%
计算结果为患病的概率为4.721%,这个概率远小于99%,且与大多数人的直觉不同,原因在于庞大的健康人群导致的误报数量远多于病人,当出现“检测阳性“的证据时,患病的概率从先验概率0.1%提升到4.721%,还远不足以确诊。
贝叶斯定理的另一种表示
在上述计算中,我们发现计算P(E)是比较困难的,很多时候,甚至无法知道P(E)。此时,我们需要贝叶斯定理的另一种表示形式。
我们用P(H)表示H发生的概率,用H表示H不发生,P(H)表示H不发生的概率。显然P(H)=1-P(H)。
下图红色部分表示H,红色部分以外则表示H:
事件E用绿色表示:
可见,P(E)可以分为两部分,一部分是E和H的交集,另一部分是E和H的交集:
P(E)=P(E∩H)+P(E∩H)
根据上文的公式P(A∩B)=P(A|B)xP(B),代入可得:
P(E)=P(E∩H)+P(E∩H)=P(E∣H)×P(H)+P(E∣H)×P(H)
把P(E)替换掉,我们得到贝叶斯定理的另一种写法:
P(H∣E)=P(E∣H)×P(H)+P(E∣H)×P(H)P(E∣H)×P(H)
用这个公式来计算,我们就不必计算P(E)了。再次回到开头的问题:
已知有一种疾病,发病率是0.1%。针对这种疾病的测试非常准确:
-
如果有病,则准确率是99%(即有1%未检出阳性);
-
如果没有病,则误报率是2%(即有2%误报为阳性)。
现在,如果一个人测试显示阳性,请问他患病的概率是多少?
-
P(E|H)表示患病时检测阳性的概率=99%;
-
P(H)表示患病的概率=0.1%;
-
P(E|H)表示没有患病但检测阳性的概率=2%;
-
P(H)表示没有患病的概率=1-P(H)=99.9%。
代入公式,计算:
P(H∣E)=P(E∣H)×P(H)+P(E∣H)×P(H)P(E∣H)×P(H)=99%×0.1%+2%×99.9%99%×0.1%=0.04721=4.721%
检测为阳性这一证据使得患病的概率从0.1%提升到4.721%。假设这个人又做了一次检测,结果仍然是阳性,那么他患病的概率是多少?
我们仍然使用贝叶斯定理计算,只不过现在先验概率P(H)不再是0.1%,而是4.721%,P(E|H)和P(E|H)仍保持不变,计算新的P(H|E):
P(H∣E)=P(E∣H)×P(H)+P(E∣H)×P(H)P(E∣H)×P(H)=99%×4.721%+2%×(1−4.721%)99%×4.721%=0.71=71%
结果为71%,两次检测为阳性的结果使得先验概率从0.1%提升到4.721%再提升到71%,继续第三次检测如果为阳性则概率将提升至99.18%。
可见,贝叶斯定理的核心思想就是不断根据新的证据,将先验概率调整为后验概率,使之更接近客观事实。
在统计学里,长期以来,有频率学派和贝叶斯学派两大学派,他们互相鄙视对方,就像华山派的气宗与剑宗之争。
这两大学派最根本的观点在于看待世界的方式不同:
-
频率学派认为世界是客观的,必须通过大量独立采样来获得统计均值,不能先给出一个主观的先验概率(假设);
-
贝叶斯学派则认为概率是一种信念度,可以有非常主观的先验概率,然后,通过一次次采样结果修正先验概率,使之逼近客观事实。
这两大学派哪个才是正确的?其实都对,只是看待世界的角度不同。但是在现实世界中,除了抛硬币、掷骰子、玩老虎机等少数符合理想数学模型的场景,频率学派才能发挥作用。大多数需要我们估算概率的现实场景,只能用贝叶斯理论来指导实践。
举个例子,假设我住在市区,希望赶上飞机的概率不低于90%,那么我应该提前多久出发呢?我必须试验至少100次,看看样本空间,才能获得一个比较准确的统计均值。然而这是不现实的,因为我一年可能就坐几次飞机。我只能拍脑袋先估一个提前30分钟就够了,结果第三次就没赶上,这说明我必须修正我的先验概率,后续改为提前45分钟,才能提升赶上飞机的概率。
我们再以《狼来了》的故事为例,当小孩第一次喊狼来了,村民听到后可以根据先验概率,比如P(小孩是诚实的)=90%判断赶紧去帮忙,结果发现被骗了,于是大家根据“被骗了“这一证据把后验概率P(小孩是诚实的)调整为60%,第二次又被骗了,于是再次把后验概率调整为20%,等到第三次听见小孩求救时,大家根据P(小孩是诚实的)=20%判断,他大概率还是在说谎,于是没有人去帮忙了。
有的同学会问,你说的这些,都是定性分析,没有定量计算啊!
要把贝叶斯定理用到定量计算,必须得借助计算机。
以吴军老师在中文分词领域举的一个例子来说,对于一个句子:南京市长江大桥,可以有两种划分:
-
南京市 / 长江大桥
-
南京市长 / 江大桥
到底哪一种更合理?我们可以计算条件概率:
-
P(长江大桥|南京市) = 出现“南京市“时,出现“长江大桥“的概率;
-
P(江大桥|南京市长) = 出现“南京市长“时,出现“江大桥“的概率。
提前准备好大量的中文语料,计算出任意两个词的条件概率,我们就可以得出哪种分词更合理。
在互联网领域,凡是遇到“当出现xyz时应该推荐什么“这样的条件概率时,也总是能应用贝叶斯理论。
例如,我们在搜索引擎中输入elon这个单词后,搜索框自动给出了联想补全:
怎么实现这个功能?把用户最近搜索的所有可能的单词列出来,然后计算条件概率:
-
P(mask|elon)=0.5
-
P(jerk|elon)=0.1
-
P(university|elon)=0.2
-
…
把它们排个序,选出条件概率最大的几个,就是搜索建议。
诸如反垃圾邮件、电商推荐系统等,都是贝叶斯理论在机器学习中的应用。由于需要大量的计算,贝叶斯理论也只有在计算机时代才能广泛应用。
关于信念
我们再回顾一下贝叶斯定理:
P(H∣E)=P(E)P(E∣H)×P(H)
稍微改一下,变为:
P(H∣E)=P(H)×P(E)P(E∣H)
P(H)是先验概率,P(H|E)是后验概率,P(E|H)/P(E)被称为调整因子,先验概率乘以调整因子就得到后验概率。
我们发现,如果P(H)=0,则P(H|E)=0;如果P(H)=1,则P(E|H)=P(E),P(H|E)=1。
也就是说,如果先验概率为0%或100%,那么,无论出现任何证据E,都无法改变后验概率P(H|E)。这对我们看待世界的认知有重大指导意义,因为贝叶斯概率的本质是信念,通过一次次事件,我们可能加强某种信念,也可能减弱某种信念,但如果信念保持100%或0%,则可以做到对外界输入完全“免疫“。
举个例子,十年前许多人都认为比特币是庞氏骗局,如果100%坚定地持有这种信念,那么他将无视用户越来越多、价格上涨、交易量扩大、机构入市等诸多证据,至今仍然会坚信比特币是骗局而错过无数次机会。(注:此处示例不构成任何投资建议)
对于新生事物,每个人都可以有非常主观的先验概率,但只要我们不把先验概率定死为0或100%,就有机会改变自己的信念,从而更有可能接近客观事实,这也是贝叶斯定理的精髓:
你相信什么并不重要,重要的是你别完全相信它。