贝叶斯定理[转载]

托马斯·贝叶斯(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)表示AB同时发生的概率,A∩B就是AB的交集,如下图蓝色部分所示:


    显然A∩B只有两种情况,因此,计算P(A∩B)


    接下来我们就可以讨论条件概率了。我们用P(A|B)表示在B发生的条件下,A发生的概率。由于B已经发生,所以,样本空间就是B的样本数量6,而要发生A则只能是AB同时发生,即A∩B,有两种情况。

    因此,计算P(A|B)如下:


    同理,我们用P(B|A)表示在A发生的条件下,B发生的概率。此时,分子仍然是A∩B的样本数量,但分母变成A的样本数量:


    可见,条件概率P(A|B)P(B|A)是不同的。

    我们再回到AB同时发生的概率,观察P(A∩B)可以改写为:


    同理,P(A∩B)还可以改写为:


    因此,根据上述两个等式,我们推导出下面的等式:

    P(AB)=P(ABP(B)=P(BAP(A)

    把左边的P(A∩B)去掉,我们得到等式:

    P(ABP(B)=P(BAP(A)

    最后,整理一下等式,我们推导出贝叶斯定理如下:

    P(AB)=P(B)P(BAP(A)

    这就是著名的贝叶斯定理,它表示,当出现B时,如何计算A的概率。

    很多时候,我们把A改写为H,把B改写为E

    P(HE)=P(E)P(EHP(H)

    H表示Hypothesis(假设),E表示Evidence(证据),贝叶斯定理的意义就在于,给定一个先验概率P(H),在出现了证据E的情况下,计算后验概率P(H|E)

    计算

    有了贝叶斯定理,我们就可以回到开头的问题:

    已知有一种疾病,发病率是0.1%。针对这种疾病的测试非常准确:

  • 如果有病,则准确率是99%(即有1%未检出阳性);
  • 如果没有病,则误报率是2%(即有2%误报为阳性)。

    现在,如果一个人测试显示阳性,请问他患病的概率是多少?

    H表示患病,E表示测试为阳性,那么,我们要计算在测试为阳性的条件下,一个人患病的概率,就是计算P(H|E)。根据贝叶斯定理,计算如下:

    P(HE)=P(E)P(EHP(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(HE)=P(E)P(EHP(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)可以分为两部分,一部分是EH的交集,另一部分是EH的交集:

    P(E)=P(EH)+P(EH)

    根据上文的公式P(A∩B)=P(A|B)xP(B),代入可得:

    P(E)=P(EH)+P(EH)=P(EHP(H)+P(EHP(H)

    P(E)替换掉,我们得到贝叶斯定理的另一种写法:

    P(HE)=P(EHP(H)+P(EHP(H)P(EHP(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(HE)=P(EHP(H)+P(EHP(H)P(EHP(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(HE)=P(EHP(H)+P(EHP(H)P(EHP(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(HE)=P(E)P(EHP(H)

    稍微改一下,变为:

    P(HE)=P(HP(E)P(EH)

    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%坚定地持有这种信念,那么他将无视用户越来越多、价格上涨、交易量扩大、机构入市等诸多证据,至今仍然会坚信比特币是骗局而错过无数次机会。(注:此处示例不构成任何投资建议)

    对于新生事物,每个人都可以有非常主观的先验概率,但只要我们不把先验概率定死为0100%,就有机会改变自己的信念,从而更有可能接近客观事实,这也是贝叶斯定理的精髓:

    你相信什么并不重要,重要的是你别完全相信它。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注