fatcat 慢即是快

贝叶斯公式

2018-11-04
fatcat22

贝叶斯公式及其理论的在现实世界里应用非常广泛,是比较简单但非常有用的一个理论。尽管如此,我自己感觉对其的掌握还很一般,所以这里先推荐另一篇很有名的文章数学之美番外篇:平凡而又神奇的贝叶斯方法。如果你也看不懂这篇或者觉得他的篇幅太长了,可以再回头看看我这篇 ^-^

什么是贝叶斯公式

在之前介绍条件概率和联合概率时,我们提到过它们之间的关系:

\[P(X=a,Y=b) \\ = P(X=a|Y=b)P(Y=b) \\ = P(Y=b|X=a)P(X=a)\]

这里我们只看最后一个等号两端的式子。为了看起来简单,我们简化一下写法,去掉a,b:

\[P(X|Y)P(Y) = P(Y|X)P(X)\]

将这个等式变换一下,即可得到:

\[P(Y|X) = \frac{P(X|Y)P(Y)}{P(X)}\]

这个式子就是贝叶斯公式了。

公式虽然很简单,但到底代表什么意思呢?

贝叶斯公式的意义是什么?能解决什么问题?

我们先看一下《程序员的数学》里的一个例子。在一个游戏中,玩家只要打倒怪物就可以获得宝箱。宝箱有2/3的概率有陷阱。玩家虽然可以用魔法来检查陷阱,但有1/4的误判概率。有一次,一个玩家拿到了宝箱并通过魔法判定该宝箱没有陷阱。求此时“宝箱有陷阱”的概率。

用数学的方法来描述这个问题,可以简化成求P(宝箱有陷阱|陷阱没有被发现)的概率。跟据贝叶斯公式,我们只要知道P(陷阱没有被发现|宝箱有陷阱)、P(宝箱有陷阱)、P(陷阱没有被发现)这三个概率,就可以解决问题了。根据描述,可以求得:

\[P(宝箱有陷阱) = \frac{2}{3} \\ P(陷阱没有被发现|宝箱有陷阱) = \frac{1}{4} \\ P(陷阱没有被发现) = P(陷阱没有被发现|宝箱有陷阱) + P(陷阱没有被发现|宝箱无陷阱) = \\ \frac{1}{6} + \frac{1}{3}\times\frac{3}{4} = \frac{5}{12}\]

所以:

\[P(宝箱有陷阱|陷阱没有被发现) = \\ \frac{P(陷阱没有被发现|宝箱有陷阱)P(宝箱有陷阱)}{P(陷阱没有被发现)} \\ = \frac{\frac{1}{4}\times\frac{2}{3}}{\frac{5}{12}} = \frac{2}{5}\]

所以最后即使玩家通过魔法判断到手的宝箱没有陷阱,仍有40%的概率是有陷阱的。

再来看一个例子。假设有一个100人的团体,其中有一个是外星人。有一台能检测外星人的机器,但有1%的误判率,即它有1%的机率把正常人判断成外星人,也有1%的机率把外星人判断成外星人。现在随机抽取一人,机器也确实判断他为外星人。那么这个人确为外星人的概率是多少?

根据描述,我们最终要求的是P(真是外星人|机器判断为外星人)的概率。跟据贝叶斯公式,我们只要知道P(机器判断为外星人|真是外星人)、P(真是外星人)、P(机器判断为外星人)这三个概率,就可以了。从描述中可知:

\[P(机器判断为外星人) = \\ P(机器判断为外星人|非外星人) + P(机器判断为外星人|真是外星人) = \\ 0.99\times0.01 + 0.01\times0.99 = 0.198 \\ P(真是外星人) = 0.01 \\ P(机器判断为外星人|真是外星人) = 0.99\]

所以:

\[P(真是外星人|机器判断为外星人) = \\ \frac{P(机器判断为外星人|真是外星人)P(真是外星人)}{P(机器判断为外星人)} \\ = \frac{0.99 \times 0.01}{0.198} = 0.05\]

所以当机器判断结果为外星人时,其真的是外星人的概率仅为0.05。(顺便说一下,这个概率值太低了。一般情况下,如果机器判断为外星人时,我们很容易相信他就是外星人,但此时真是外星人的概率仅为0.05。我觉得安检误报也是这个道理)

总得来看一下上面两个例子,我们要求的分别是通过魔法判定宝箱没有陷阱但此时宝箱有陷阱的概率,和机器判断为外星人且这个人真的是外星人的概率。这些概率都是事情已经发生了,然后我们想求其中的概率。这种概率叫“后验概率”,相对的情况如“机器有1%的误判率”这种概率,叫做“先验概率”。贝叶斯公式就是用来求后检概率的。所以我总结出来以下特点:

凡是要计算我们没法直接观察到的事件的概率,都可以用贝叶斯公式试一试

之前的文章里提到的“上帝视角”,都是可以通过实验观察到结果的,也正因如此我们才可以使用“会场”、“剧本”这些方法。但上面的两个例子中要求的结果,我们都没有办法直接通过实验观察,所以此时要用贝叶斯公式,将要求的值转换成可以通过实验观察的事件。事实上上面两个例子中贝叶斯公式中右边的值,都可以用“上帝视角”或作图法来求得。

朴素贝叶斯

在我学习贝叶斯公式之前,我最先知道的它的应用是垃圾邮件过滤。在垃圾邮件过滤时,我们要求的结果很明显,就是P(邮件是垃圾邮件|一封新收到的邮件)这个值。显然,这个值也没法通过实验的办法观察到,所以使用贝叶斯公式将问题进行转换。

\[P(垃圾邮件|新邮件) = \frac{P(新邮件|垃圾邮件)P(垃圾邮件)}{P(新邮件)}\]

这里P(新邮件)这个表达可能很难理解。由于新邮件是由一个个单词组成的,所以如果使用 $w_i$ 表示邮件中的第 $i$ 个单词,那么P(新邮件)可以表达成 $P(w_1, w_2, w_3, …)$ 。所以上面的式子也可写成:

\[P(垃圾邮件|w_1, w_2, ...) = \frac{P(w_1, w_2, ...|垃圾邮件)P(垃圾邮件)}{P(w_1, w_2, ...)}\]

$P(垃圾邮件|w_1, w_2, …)$ 表示当邮件由 $w_1, w_2, …$ 这些单词组成时,邮件是垃圾邮件的概率,这正是我们要求的值。

$P(w_1, w_2, …|垃圾邮件)$ 表示在一封垃圾邮件中, $w_1, w_2, …$ 这些单词同时出现的概率。 $P(w_1, w_2, …)$ 表示这些单词同时出现在所有邮件中的概率。这两个是一个先验概率,可以通过观察求得。但有一个问题,每一封垃圾邮件都是不一样的,也就是 $w_1, w_2, …$ 同时出现时,组成了唯一的一封邮件,这样的话 $P(w_1, w_2, …)$ 就没有意义了(新发来的邮件跟我们邮件库里的某封邮件一模一样,那还计算它是不是垃圾邮件的概率干嘛)。因此我们做出了一个非常极端的假设:我们假设各个单词之间是独立的、没有关系的。这就是朴素贝叶斯中“朴素”的意义。基于独立的假设, $P(w_1, w_2, …|垃圾邮件)$ 可以写成 $P(w_1|垃圾邮件)P(w_2|垃圾邮件)…$ , $P(w_1, w_2, …)$ 也可以写成 $P(w_1)P(w_2)…$ 。所以上面的式子可以写成:

\[P(垃圾邮件|w_1, w_2, ...) = \frac{(P(w_1|垃圾邮件P(w_2|垃圾邮件)...)P(垃圾邮件)}{P(w_1)P(w_2)...}\]

由此,可以根据邮件库里的单词信息,得出式子右侧各概率的值,从而计算出此邮件是垃圾邮件的概率。当这个值超过一定阈值时,就可以认为这是一封垃圾邮件了。

总结

贝叶斯的应用非常广泛,但其推理却很简单。主要思想是,可以把无法通过实验观察到的概率问题(即后验概率),转换成可以通过实验观察的问题(即先验概率)。


如果您觉得文章对您有帮助,欢迎打赏

Similar Posts

下一篇 golang常量

Comments

Share