贝叶斯定理

贝叶斯定理

@(DataAnalysis)[贝叶斯法则,贝叶斯定理]

产生来源

引入:

在贝叶斯创造这个理论之前,人们已经能够计算出正向概率,如:“假设某个袋子中有N个白球,M个黑球,摸出黑球的概率是多大?”,当然这是在已知数据的情况下才能计算的先验概率。这个问题反过来:“如果我们事先并不知道袋子里面是什么球,而摸出一个(或者几个)球,观察球的颜色之后来推测袋子中球的比例”。这个问题就是逆向概率问题,也就是贝叶斯定理解决的问题。

定义:(英语:Bayes’ theorem)是概率论中的一个定理,描述在已知一些条件下,某事件的发生几率。比如,如果已知某癌症与寿命有关,使用贝叶斯定理则可以透过得知某人年龄,来更加准确地计算出他罹患癌症的几率。————wiki解释

贝叶斯公式:

事件B发生的条件下,事件A发生的概率为:
P ( A ∣ B ) = P ( A B ) P ( B ) P(A|B)=\dfrac{P(AB)}{P(B)}P(AB)=P(B)P(AB)
事件A发生的条件下,事件B发生的概率为:
P ( B ∣ A ) = P ( A B ) P ( A ) P(B|A)=\dfrac{P(AB)}{P(A)}P(BA)=P(A)P(AB)
由此可得:
P ( A ∣ B ) P ( B ) = P ( A B ) = P ( B ∣ A ) P ( A ) P(A|B)P(B)=P(AB)=P(B|A)P(A)P(AB)P(B)=P(AB)=P(BA)P(A)
得贝叶斯公式如下:
P ( A ∣ B ) = P ( A ) P ( B ∣ A ) P ( B ) P(A|B)=P(A)\dfrac{P(B|A)}{P(B)}P(AB)=P(A)P(B)P(BA)

补充知识

  • 全概率公式:这个公式的作用是计算贝叶斯定理中的P(B);

P ( B ) = P ( B ∣ A ) P ( A ) + P ( B ∣ A ′ ) P ( A ′ ) P(B)=P(B|A)P(A)+P(B|A')P(A')P(B)=P(BA)P(A)+P(BA)P(A)

如果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事件发生的情况下的概率分布。

P ( B ∣ A ) P ( B ) \dfrac{P(B|A)}{P(B)}P(B)P(BA)称为可能性函数(Likelyhood),这是一个调整因子,即新信息事件B的发生调整,使得先验概率更接近真实概率。

可能性函数可以理解为得到新信息后,对先验概率的一个调整,例如:主观认为明天下雨的可能为50%(先验概率),在知道今天的空气湿度、温度等信息(调整因子)后认为明天下雨的可能超过50%(后验概率)。

P ( B ∣ A ) P ( B ) \dfrac{P(B|A)}{P(B)}P(B)P(BA)>1,意味着“先验概率”被增强,事件A的发生的可能性变大;
P ( B ∣ A ) P ( B ) \dfrac{P(B|A)}{P(B)}P(B)P(BA)=1,意味着事件B无助于判断事件A的可能性;
P ( B ∣ A ) P ( B ) \dfrac{P(B|A)}{P(B)}P(B)P(BA)>1,意味着“先验概率”被削弱,事件A的发生的可能性变小;

深入理解

贝叶斯公式:
P ( A ∣ B ) = P ( A ) P ( B ∣ A ) P ( B ) P(A|B)=P(A)\dfrac{P(B|A)}{P(B)}P(AB)=P(A)P(B)P(BA)
上式可以理解为:
后 验 概 率 = 先 验 概 率 ∗ 可 能 性 函 数 后验概率=先验概率*可能性函数=

所以贝叶斯的底层思想为:
如果掌握了一个事情的全部信息,就可以计算出一个客观概率(古典概率、正向概率),但是绝大多数决策面临的信息都是不全的,在有限信息的条件下,尽可能预测一个好的结果,也就是在主观判断的基础上,可以先估计一个值(先验概率),然后根据观察的新信息不断修正(可能性函数)

先根据以往的经验预估一个先验概率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%将说明它是垃圾邮件。

我们要求解的是这个概率:

P ( 垃 圾 邮 件 ∣ 检 测 到 某 种 特 征 ) P(垃圾邮件|检测到某种特征)P()
这个某种特征可以是关键词、时间、频次、附件类型、包括以上各种特征混合的特征……。

例如:
P ( 垃 圾 邮 件 ∣ 检 测 到 “ 发 票 ” 关 键 词 ) = P ( 检 测 到 “ 发 票 ” 关 键 词 ∣ 垃 圾 邮 件 ) P ( 检 测 到 “ 发 票 ” 关 键 词 ) P(垃圾邮件|检测到“发票”关键词)=\dfrac{P(检测到“发票”关键词|垃圾邮件)}{P(检测到“发票”关键词)}P()=P()P()

怎么知道垃圾邮件里出现“发票”关键词的概率?

理论上,除非我们统计所有邮件,否则我们是得不出的。这时候,就得做个妥协,在工程上做个近似,我们自己找到一定数量的真实邮件,并分为两组,一组正常邮件,一组垃圾邮件,然后进行计算,看 发票 这个词,在垃圾邮件中出现的概率是多少,在正常邮件里出现的概率是多少。

显然,这里的训练数量大一些的话,计算得到的概率会更逼近真实值。 Paul Graham 使用的邮件规模,是正常邮件和垃圾邮件各 4000封 。如果某个词只出现在垃圾邮件中, Paul Graham 就假定,它在正常邮件的出现频率是 1% ,反之亦然,这样做是为了避免概率为 0

这样的话,将公式继续分解为如下:

P ( 垃 圾 邮 件 ∣ 检 测 到 “ 发 票 ” 关 键 词 ) = P ( 检 测 到 “ 发 票 ” 关 键 词 ∣ 垃 圾 邮 件 ) P ( 检 测 到 “ 发 票 ” 关 键 词 ) P(垃圾邮件|检测到“发票”关键词)= \dfrac{P(检测到“发票”关键词|垃圾邮件)}{P(检测到“发票”关键词)}P=P()P()

P = P ( 检 测 到 “ 发 票 ” 关 键 词 ∣ 垃 圾 邮 件 ) P ( 检 测 到 “ 发 票 ” 关 键 词 ∩ 垃 圾 邮 件 ) + P ( 检 测 到 “ 发 票 ” 关 键 词 ∩ 正 常 邮 件 ) P= \dfrac{P(检测到“发票”关键词|垃圾邮件)}{P(检测到“发票”关键词∩垃圾邮件)+P(检测到“发票”关键词∩正常邮件)}P=P()+P()P()

P = P ( 检 测 到 “ 发 票 ” 关 键 词 ∣ 垃 圾 邮 件 ) P ( 检 测 到 “ 发 票 ” 关 键 词 ∣ 垃 圾 邮 件 ) P ( 垃 圾 邮 件 ) + P ( 检 测 到 “ 发 票 ” 关 键 词 ∣ 正 常 邮 件 ) P ( 正 常 邮 件 ) P= \dfrac{P(检测到“发票”关键词|垃圾邮件)}{\dfrac{P(检测到“发票”关键词|垃圾邮件)}{P(垃圾邮件)}+\dfrac{P(检测到“发票”关键词|正常邮件)}{P(正常邮件)}}P=P()P()+P()P()P()

根据训练模型得到的概率,进行初始值计算:

此后,可以通过大量用户将垃圾邮件标注为正常邮件,正常邮件挪到垃圾邮件的动作,进行反复训练纠正,直至逼近一个合理值了。

不过这里还涉及到一个问题,就是单个关键词的概率(单个条件)无论如何再高,这封邮件仍然有可能不是垃圾邮件,所以在此处应用贝叶斯定理时,我们显然要用到多个条件,也就是计算这个概率:

P(垃圾邮件|检测到“A”关键词,检测到“B”关键词,检测到"C",…)

Paul Graham 的做法是,选出邮件中 P(垃圾邮件|检测到“X”关键词) 最高的 15个词 ,计算它们的联合概率。(如果关键词是第一次出现,Paul Graham 就假定这个值等于 0.4 ,也即认为是negative normal)。

案例三:机器学习之贝叶斯算法

后续更新……



参考文章1:(知乎)小白之通俗易懂的贝叶斯定理(Bayes’ Theorem)
参考文章2:(简书)贝叶斯公式/贝叶斯法则/贝叶斯定理


版权声明:本文为qq_45089354原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。