从贝叶斯定理说开来

从贝叶斯定理说开去


CC 许可。转载请署名并保留出处

简单介绍

贝叶斯定理是18世纪英国数学家托马斯·贝叶斯(Thomas Bayes)提出得重要概率论理论。以下摘一段 wikipedia 上的简单介绍:

所谓的贝叶斯定理源于他生前为解决一个“逆概”问题写的一篇文章,而这篇文章是在他死后才由他的一位朋友发表出来的。在贝叶斯写这篇文章之前,人们已经能够计算“正向概率”。如“假设袋子里面有 N 个白球,M 个黑球。你伸手进去摸一把。摸出黑球的概率是多大”。而一个自然而然的问题是反过来:“假设我们事先并不知道袋子里面黑白球的比例。而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后。那么我们能够就此对袋子里面的黑白球的比例作出什么样的猜測”。这个问题,就是所谓的逆向概率问题。

贝叶斯定理的思想出如今18世纪,但真正大规模派上用途还得等到计算机的出现。

由于这个定理须要大规模的数据计算推理才干凸显效果,它在非常多计算机应用领域中都大有作为,如自然语言处理,机器学习。推荐系统,图像识别,博弈论等等。

定义

贝叶斯定理是关于随机事件 A 和 B 的条件概率

贝叶斯定理

当中P(A|B)是在 B 发生的情况下 A 发生的可能性。

在贝叶斯定理中。每一个名词都有约定俗成的名称:

P(A)是 A 的先验概率,之所以称为“先验”是由于它不考虑不论什么 B 方面的因素。
P(A|B)是已知 B 发生后 A 的条件概率。也由于得自 B 的取值而被称作 A 的后验概率。
P(B|A)是已知 A 发生后 B 的条件概率,也由于得自 A 的取值而被称作 B 的后验概率。
P(B)是 B 的先验概率。也作标淮化常量(normalizing constant)。

按这些术语,贝叶斯定理可表述为:

后验概率 = (类似度 * 先验概率)/标淮化常量

也就是说,后验概率与先验概率和类似度的乘积成正比。

另外,比例P(B|A)/P(B)也有时被称作标淮类似度(standardised likelihood),Bayes定理可表述为:

后验概率 = 标淮类似度 * 先验概率

条件概率就是事件 A 在另外一个事件 B 已经发生条件下的发生概率。条件概率表示为P(A|B),读作“在 B 发生的条件下 A 发生的概率”。

联合概率表示两个事件共同发生(数学概念上的交集)的概率。

A 与 B 的联合概率表示为联合概率

推导

我们能够从条件概率的定义推导出贝叶斯定理。

依据条件概率的定义。在事件 B 发生的条件下事件 A 发生的概率为:

贝叶斯定理

相同地。在事件 A 发生的条件下事件 B 发生的概率为:

贝叶斯定理

结合这两个方程式。我们能够得到:

贝叶斯定理

这个引理有时称作概率乘法规则。上式两边同除以 P(A),若P(A)是非零的。我们能够得到贝叶斯定理:

贝叶斯定理

解释

通常,事件 A 在事件 B 发生的条件下的概率。与事件 B 在事件 A 发生的条件下的概率是不一样的;然而,这两者是有确定关系的,贝叶斯定理就是这样的关系的陈述。

贝叶斯公式的用途在于通过己知三个概率来猜測第四个概率。它的内容是:在 B 出现的前提下,A 出现的概率等于 A 出现的前提下 B 出现的概率乘以 A 出现的概率再除以 B 出现的概率。

通过联系 A 与 B,计算从一个事件发生的情况下还有一事件发生的概率,即从结果上溯到源头(也即逆向概率)。

通俗地讲就是当你不能确定某一个事件发生的概率时,你能够依靠与该事件本质属性相关的事件发生的概率去猜測该事件发生的概率。用数学语言表达就是:支持某项属性的事件发生得愈多,则该事件发生的的可能性就愈大。这个推理过程有时候也叫贝叶斯推理。

演示样例

演示样例一:应当依据新情况更新先验概率

决策与推断》第十二章中讲到人们都有保守主义情结,即使出现了新信息。也不愿意依据新信息来更新先验概率。用前面解释里面的话说就是:新信息是 B 事件不断发生,人们本应该依据这个信息去更新 A 事件发生的概率。但人们却更愿意固守之前预计的 A 事件发生的概率。

书中举了这样一个调查案例:

假设有两个各装了100个球的箱子。甲箱子中有70个红球,30个绿球。乙箱子中有30个红球,70个绿球。假设随机选择当中一个箱子,从中拿出一个球记下球色再放回原箱子。如此反复12次,记录得到8次红球,4次绿球。问题来了,你觉得被选择的箱子是甲箱子的概率有多大?

调查结果显示,大部分人都低估了选择的是甲箱子的概率。

依据贝叶斯定理,正确答案是96.7%。以下容我来具体分析解答。

刚開始选择甲乙两箱子的先验概率都是50%。由于是随机二选一(这是贝叶斯定理二选一的特殊形式)。

即有:

P(甲) = 0.5。 P(乙) = 1 - P(甲)。

这时在拿出一个球是红球的情况下,我们就应该依据这个信息来更新选择的是甲箱子的先验概率:

P(甲|红球1) = P(红球|甲) × P(甲) / (P(红球|甲) × P(甲) + (P(红球|乙) × P(乙)))
P(红球|甲):甲箱子中拿到红球的概率
P(红球|乙):乙箱子中拿到红球的概率

因此在出现一个红球的情况下,选择的是甲箱子的先验概率就可被修正为:

P(甲|红球1) = 0.7 × 0.5 / (0.7 × 0.5 + 0.3 × 0.5) = 0.7

即在出现一个红球之后,甲乙箱子被选中的先验概率就被修正为:

P(甲) = 0.7。 P(乙) = 1 - P(甲) = 0.3;

如此反复,直到经历8次红球修正(概率添加),4此绿球修正(概率降低)之后,选择的是甲箱子的概率为:96.7%。

我写了一段 Python 代码来解这个问题:

计算选择的是甲箱子的概率
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def bayesFunc(pIsBox1, pBox1, pBox2):
    return (pIsBox1 * pBox1)/((pIsBox1 * pBox1) + (1 - pIsBox1) * pBox2)

def redGreenBallProblem():
    pIsBox1 = 0.5

    # consider 8 red ball
    for i in range(1, 9):
        pIsBox1 = bayesFunc(pIsBox1, 0.7, 0.3)
        print " After red %d > in 甲 box: %f" % (i, pIsBox1)

    # consider 4 green ball
    for i in range(1, 5):
        pIsBox1 = bayesFunc(pIsBox1, 0.3, 0.7)
        print " After green %d > in 甲 box: %f" % (i, pIsBox1)

redGreenBallProblem()

在这个调查问题里面。8次红球与4次绿球出现的顺序并不重要。由于红球的出现总是使选择的是甲箱子的概率添加,而绿球的出现总是降低。

因此,为了简化编程,我将红球出现的情况以及绿球出现的情况摆在一起了。

程序执行结果例如以下:

不断修正的选择的是甲箱子的先验概率
1
2
3
4
5
6
7
8
9
10
11
12
After red 1 > in 甲 box: 0.700000
After red 2 > in 甲 box: 0.844828
After red 3 > in 甲 box: 0.927027
After red 4 > in 甲 box: 0.967365
After red 5 > in 甲 box: 0.985748
After red 6 > in 甲 box: 0.993842
After red 7 > in 甲 box: 0.997351
After red 8 > in 甲 box: 0.998863
After green 1 > in 甲 box: 0.997351
After green 2 > in 甲 box: 0.993842
After green 3 > in 甲 box: 0.985748
After green 4 > in 甲 box: 0.967365

从程序执行结果来看,非常明显能够看到红球的出现是添加选择甲箱子的概率,而绿球则相反。

演示样例二:频率更适合用来解答概率问题

进化心理学》第十三章(428页)讲到人类的心理从进化角度来看,更偏好使用频率(我近期十次打猎八次有收获)而不是概率(我近期打猎有80%的成功率)。

书中举了同一个问题用不同方式表述使得问题的难易程度迥然不同:

表述一:有一种疾病的发病率是千分之中的一个。医院有一种化验技术能够对这样的疾病进行诊断,可是却又百分之五的误诊率(也即是说虽然有百分之五的人没有病,可是化验结果却显示为阳性(即假阳性))。

如今假设一个人的化验结果显示为有病,仅依据这一化验结果猜測,那么这个人确实患病的概率有多大?

这个问题也能够用贝叶斯定理来解决,只是在看分析之前。你能够先估算下你自己的答案,然后再和正确答案比較。

这个问题的分析步骤例如以下:

已知先验概率:P(患病) = 0.001,P(正常) = 0.999;
该化验技术的准确率(即患病化验结果显示为阳性的概率)为:P(准确率) = 1.00;
该化验技术的误诊率(即正常化验结果显示为阳性的概率)为:P(误诊率) = 0.05。

依据上面的数据。我们就能够猜測出一个人化验为阳性的情况下,这个人确实患病的概率有多大:

P(患病|阳性) = P(患病) × P(准确率) / (P(患病) × P(准确率) + P(正常) × P(误诊率)) 
= 0.001 × 1.00 / (0.001 × 1.00 + 0.999 × 0.05)
= 0.0198 
= 2%

结果让你大吃一惊吧。在没有其它症状添加患病概率的情况下,单凭化验结果显示为阳性来猜測的话。其真实患病的概率还不到百分之二。

用频率作为信息来记忆或回顾更生动也更easy被提取。想想第一次打猎什么情形,第二次打猎什么情形。历历在目。正由于频率作为信息存储载体保留了事件的形象性,提高了记忆的可得性。因此在进化过程中人类的心理机制优先选择了频率而不是抽象的概率。并且在人类十多万年的进化过程中。出现概率概念的文明进程只是几千年。大脑还没有对进化到更适应抽象的概率的地步。

所以这个问题假设换成用频率来表述的话,相信你的答案会大大接近于正确答案。

表述二:在一千个人中,就有一个人患有X疾病(即发病率为千分之中的一个)。有一种化验技术,能够检验是否患有该疾病。假设一个人确实患有该病。化验结果可定显示为阳性。但有时候也会出现误诊。即在一千个全然健康的人中,有五十个人的化验结果显示为阳性(也即是说误诊率为百分之五)。

换成以频率方式来表述这个问题。答案就显然易见了:

P(患病|阳性) = 1/(1 + 50) = 1/51 = 0.0196 = 2%

通过这个样例,我们能够懂得,若能把概率问题转换成频率来表述,即便是须要使用贝叶斯这样复杂定理来计算的问题,也能轻而易举地解答。这就是《你的灯亮着么?》里面提到的“重述问题”的技巧。

演示样例三:在博弈论里面的应用

挑战者 B 不知道原垄断者 A 是属于高阻挠成本(为阻止 B 进入而花费的成本)类型还是低阻挠成本类型,但B知道。假设 A 属于高阻挠成本类型。B 进入市场时A进行阻挠的概率是20%(阻扰成本高,因此阻挠概率低)。假设 A 属于低阻挠成本类型,B 进入市场时 A 进行阻挠的概率是100%。

博弈開始时。B 觉得 A 属于高阻挠成本企业的概率为70%,因此,B 预计自己在进入市场时,受到 A 阻挠的概率为:

P(阻挠) = 0.7 × 0.2 + 0.3 × 1.0 = 0.44

0.44 是在 B 给定 A 所属类型的先验概率下,A 可能採取阻挠行为的概率。

当 B 进入市场时,若 A 确实进行阻挠。

依据贝叶斯定理,从 A 进行阻挠这一行为,B 可修正 A 属于高阻挠成本企业的概率为::

P(高成本阻扰企业) = 0.7 × 0.2 ÷ 0.44 × 1.0 = 0.32

依据这一新的先验概率,B 预计自己在进入市场时,受到 A 阻挠的概率为:

P(阻挠) = 0.32 × 0.2 + 0.68 × 1 = 0.744

若 B 再一次进入市场时。A 又进行了阻挠。

依据贝叶斯定理。从 A 再次进行阻挠这一行为,B 可修正 A 属于高阻挠成本企业的概率为

P(高成本阻扰企业) = 0.32 × 0.2 ÷ 0.744 × 1.0 = 0.086

这样,依据 A 一次重新的阻挠行为,B 不断修正推断 A 为高阻挠成本的概率(越来越低了)。从而越来越倾向于将 A 推断为低阻挠成本企业。

演示样例四:在计算机领域中的应用

贝叶斯定理在计算机领域中的应用那可是太多了,不管是在机器学习,自然语言处理,图像识别。推荐算法,搜索算法还是垃圾邮件处理中都大实用途。这些应用中都有一个特点,那就是依据既有输入。在庞大的已有数据库中寻找匹配程度(也即是发生概率)最高的那些项。由于这些话题太大,在这里就不展开了。

徐宥翻译过 Peter Norvig 写的一篇如何写一个拼写检查器的文章,作者仅仅用了 20 行 Python 代码就实现了拼写检查/纠错,相当强大。文章也写得深入浅出,推荐看看,翻译版本号在这里

參考


版权声明:本文博主原创文章,博客,未经同意不得转载。

posted @ 2015-10-10 18:36  lcchuguo  阅读(1200)  评论(0编辑  收藏  举报