理解全概率公式与贝叶斯公式

原文地址为:理解全概率公式与贝叶斯公式

在概率论与数理统计中,有两个相当重要的公式——全概率公式与贝叶斯公式。然而很多人对这两个公式感到非常迷茫。一来不知道公式背后的意义所在,二来不知道这些冰冷的公式能有什么现实应用。

1. 全概率公式

在讲全概率公式之前,首先要理解什么是“完备事件群”。
我们将满足

BiBj=(ij)B1+B2+=Ω B i B j = ∅ ( i ≠ j ) B 1 + B 2 + ⋯ = Ω

这样的一组事件称为一个“完备事件群”。简而言之,就是事件之间两两互斥,所有事件的并集是整个样本空间(必然事件)。

假设我们要研究事件A。我们希望能够求出 P(A) P ( A ) ,但是经过一番探索,却发现 P(A) P ( A ) 本身很难直接求出,不过却能够比较容易地求出各个 P(Bi) P ( B i ) ,以及相应的条件概率 P(A|Bi) P ( A | B i )
能不能根据这些信息,间接地求出 P(A) P ( A ) 呢?
这当然是可以的。

我们不要忘记, Bi B i 两两互斥的。

A=AΩ=AB1+AB2+AB3+ A = A Ω = A B 1 + A B 2 + A B 3 + ⋯

显然, AB1 A B 1 AB2 A B 2 AB3 A B 3 也是两两互斥的。1
一说到两两互斥,我们就想到了概率的加法定理2

P(A)=P(AΩ)=P(AB1+AB2+AB3+)=P(AB1)+P(AB2)+P(AB3)+(136)(137)(138) (136) P ( A ) = P ( A Ω ) (137) = P ( A B 1 + A B 2 + A B 3 + ⋯ ) (138) = P ( A B 1 ) + P ( A B 2 ) + P ( A B 3 ) + ⋯

再根据条件概率的定义,我们得到了教科书上的全概率公式:

P(A)=P(B1)P(A|B1)+P(B2)P(A|B2)+P(B3)P(A|B3)+ P ( A ) = P ( B 1 ) P ( A | B 1 ) + P ( B 2 ) P ( A | B 2 ) + P ( B 3 ) P ( A | B 3 ) + ⋯

这样费了一番周折,我们总算得到了所求的 P(A) P ( A ) 。可以发现,虽然 P(A) P ( A ) 本身不好求,但我们可以根据它散落的“碎片”间接地将其求出。但不是所有情况都是能这样求出的——我们必须保证 B1 B 1 B2 B 2 B3 B 3 是一个完备事件群。这个其实也很好理解,假如你想将一个碎掉的花瓶重新还原,碎片如果不全,或者碎片之间出现了多余的“重叠”,还原工作都将以失败告终。

全概率公式可以从另一个角度去理解,把 Bi B i 看作是事件 A A 发生的一种“可能途径”,若采用了不同的途径, A A 发生的概率,也就是相应的条件概率 P(A|Bi) P ( A | B i ) 也会不同。但是,我们事先却并不知道将会走哪条途径,换言之,途径的选择是随机的3,这样就导致了不同途径被选中的可能性也许也会存在差异,这就是 P(Bi) P ( B i ) 所表达的含义。这样一来,我们最终所要求的 P(A) P ( A ) ,实际上就是一个不同路径概率的加权平均
下面我们来举一个例子。
某地盗窃风气盛行,且偷窃者屡教不改。我们根据过往的案件记录,推断A今晚作案的概率是0.8,B今晚作案的概率是0.1,C今晚作案的概率是0.5。作案者只可能是A、B、C中的一人,且这三人关系不好,不会联手作案4。除此之外,还推断出A的得手率是0.1,B的得手率是1.0,C的得手率是0.5。那么,今晚村里有东西被偷的概率是多少?
通过阅读上述文字,我们大概对A、B、C三人有了一个初步的印象。首先,A的脑子可能有些问题,特别喜欢偷,但是技术相当烂。B看来是个江湖高手,一般不出手,一出手就绝不失手。C大概是追求中庸,各方面都很普通。
我们将文字描述转换为数学语言,根据作案频率可知

P(A)=0.8,P(B)=0.1,P(C)=0.5 P ( A ) = 0.8 , P ( B ) = 0.1 , P ( C ) = 0.5

将“村里有东西被偷”记为 S S ,根据得手率可以得到

P(S|A)=0.1,P(S|B)=1.0,P(S|C)=0.5 P ( S | A ) = 0.1 , P ( S | B ) = 1.0 , P ( S | C ) = 0.5

很简单,所求得的就是

P(S)=P(A)P(S|A)+P(B)P(S|B)+P(C)P(S|C)=0.43 P ( S ) = P ( A ) P ( S | A ) + P ( B ) P ( S | B ) + P ( C ) P ( S | C ) = 0.43

祝这个村晚上好运吧。

2. 贝叶斯公式

有了前面的基础,我们现在先直接抛出贝叶斯公式:

P(Bi|A)=P(ABi)P(A)=P(Bi)P(A|Bi)jP(Bj)P(A|Bj) P ( B i | A ) = P ( A B i ) P ( A ) = P ( B i ) P ( A | B i ) ∑ j P ( B j ) P ( A | B j )

这个公式本身平平无奇,无非就是条件概率的定义加上全概率公式一起作出的一个推导而已。但它所表达的意义却非常深刻。
在全概率公式中,如果将 A A 看成是“结果”, Bi B i 看成是导致结果发生的诸多“原因”之一,那么全概率公式就是一个“原因推结果”的过程。但贝叶斯公式却恰恰相反。贝叶斯公式中,我们是知道结果 A A 已经发生了,所要做的是反过来研究造成结果发生的原因,是XX原因造成的可能性有多大,即“结果推原因”。

举个例子:
假设某种病菌在人口中的带菌率为0.03,由于技术落后等等原因,使得带菌者有时也未被检出阳性反应(假阴性),不带菌者也可能会被检出阳性反应(假阳性)。有如下数据:

P(|)=0.99,P(|)=0.01,P(|)=0.05,P(|)=0.95 P ( 阳 性 | 带 菌 ) = 0.99 , P ( 阴 性 | 带 菌 ) = 0.01 , P ( 阳 性 | 不 带 菌 ) = 0.05 , P ( 阴 性 | 不 带 菌 ) = 0.95

假如一个人被检出阳性,那么这个人带菌的概率是多少?

如果不用概率的思维,光凭感觉去想这个问题……误检率那么低,那这个带菌的可能性大概会很高吧?
我们用贝叶斯公式去实际计算一下。

P(|)=P()P(|)P()P(|)+P()P(|)=0.03×0.990.03×0.99+0.97×0.05=0.38(121)(122)(123) (121) P ( 带 菌 | 阳 性 ) = P ( 带 菌 ) P ( 阳 性 | 带 菌 ) P ( 带 菌 ) P ( 阳 性 | 带 菌 ) + P ( 不 带 菌 ) P ( 阳 性 | 不 带 菌 ) (122) = 0.03 × 0.99 0.03 × 0.99 + 0.97 × 0.05 (123) = 0.38

结果竟然连40%都没到。
问题出在哪里?我们没有注意到,带菌率低到只有0.03,甚至比误检率还要低。也就是说,在一大批人里可以检查出一堆阳性的,而这堆阳性的人里面真正带菌的,也只是一小部分而已。

贝叶斯公式与机器学习

在机器学习中,我们经常遇到的一个问题就是分类。
我们看看维基百科上的“性别分类”问题(维基百科-朴素贝叶斯分类器)。
我们想要实现的是,通过知道一个人的身高、体重以及脚的尺寸,去判断这个人是男是女。
为了能够判断,我们当然需要一些参考数据,或者说,训练数据:

性别 身高(英尺) 体重(磅) 脚的尺寸(英寸)
6 180 12
5.92 190 11
5.58 170 12
5.92 165 10
5 100 6
5.5 150 8
5.42 130 7
5.75 150 9

问题来了:
现有一身高6英尺,体重130磅,脚尺寸为8英寸的人,这个人是男是女呢?

这个表格看起来不够直观,我们先做一点微小的数据可视化工作:

#!/usr/bin/python3

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 身高、体重、脚尺寸数据
x = [6, 5.92, 5.58, 5.92, 5, 5.5, 5.42, 5.75]
y = [180, 190, 170, 165, 100, 150, 130, 150]
z = [12, 11, 12, 10, 6, 8, 7, 9]

# 男性用红色园圈表示
ax.scatter(x[:4], y[:4], z[:4], c='r', marker='o', s=100)
# 女性用蓝色三角表示
ax.scatter(x[4:], y[4:], z[4:], c='b', marker='^', s=100)

ax.set_xlabel('Height (feet)')
ax.set_ylabel('Weight (lbs)')
ax.set_zlabel('Foot size (inches)')

# 显示散点图
plt.show()

旋转的散点图
尽管只有8组数据,但我们在图中也大概看了出来,似乎男女的数据点都有种“聚成一团”的感觉,这似乎是一种启示。

但是这个和贝叶斯能有什么关系呢?
我们先对前面的贝叶斯公式做一些“扩展”:
我们记 F1 F 1 F2 F 2 F3 F 3 分别为身高、体重、脚尺寸的随机变量,取值当然是各自坐标轴上的值。再记 C C 为分类结果的随机变量,取值为“男”或“女”。
不要忘了我们要解决的问题是什么。我们所要解决的问题的本质,就是在已知 F1 F 1 F2 F 2 F3 F 3 的时候,判断 p(|F1,F2,F3) p ( 男 | F 1 , F 2 , F 3 ) p(|F1,F2,F3) p ( 女 | F 1 , F 2 , F 3 ) 究竟哪个更加大,换言之,这个人是更像男还是更像女,写成数学语言就是:

ĉ =argmaxcp(C|F1,F2,F3) c ^ = arg ⁡ max c p ( C | F 1 , F 2 , F 3 )

根据贝叶斯公式,得

p(C|F1,F2,F3)=p(F1,F2,F3|C)P(C)p(F1,F2,F3) p ( C | F 1 , F 2 , F 3 ) = p ( F 1 , F 2 , F 3 | C ) P ( C ) p ( F 1 , F 2 , F 3 )

我们的任务只是比较大小,而上式右边的分母是一个常数,不妨将其忽略掉以简化计算。这时候我们的问题就剩下如何求 p(F1,F2,F3|C)P(C) p ( F 1 , F 2 , F 3 | C ) P ( C ) 了。
我们认定 F1 F 1 F2 F 2 F3 F 3 是彼此独立的特征5,那么有

p(F1,F2,F3|C)=p(F1|C)p(F2|C)p(F3|C) p ( F 1 , F 2 , F 3 | C ) = p ( F 1 | C ) p ( F 2 | C ) p ( F 3 | C )

于是我们的问题就化简为了

ĉ =argmaxcp(F1|C)p(F2|C)p(F3|C)P(C) c ^ = arg ⁡ max c p ( F 1 | C ) p ( F 2 | C ) p ( F 3 | C ) P ( C )

这样就够了么?当然没有。我们还有一个严重的问题没有解决——连续随机变量。我们不能想离散随机变量那样计算 p(Fi|C) p ( F i | C )
然而我们可以假设,身高、体重、脚尺寸都是正态分布
我们分析一下样本数据的数字特征:

性别 均值(身高) 方差(身高) 均值(体重) 方差(体重) 均值(脚的尺寸) 方差(脚的尺寸)
男性 5.855 3.5033e-02 176.25 1.2292e+02 11.25 9.1667e-01
女性 5.4175 9.7225e-02 132.5 5.5833e+02 7.5 1.6667e+00

得到了均值与方差,也就得到了正态分布的 μ μ σ2 σ 2 参数。
如此, p(F1|C)p(F2|C)p(F3|C) p ( F 1 | C ) p ( F 2 | C ) p ( F 3 | C ) 就能顺利求出了。
比如,

p(F1=6|)=12πσ2exp((6μ)22σ2)1.5789 p ( F 1 = 6 | 男 ) = 1 2 π σ 2 exp ⁡ ( − ( 6 − μ ) 2 2 σ 2 ) ≈ 1.5789

值得注意的是,这里求的是连续随机变量的概率密度,所以求出比1大的值也是正常的 6
剩下的 P(C) P ( C ) 可以用样本中男女的出现频率来估计,估算出都是0.5。

综上,我们计算可得:

p(F1=6|)p(F2=130|)p(F3=8|)P()=6.1984×109p(F1=6|)p(F2=130|)p(F3=8|)P()=5.3778×104 p ( F 1 = 6 | 男 ) p ( F 2 = 130 | 男 ) p ( F 3 = 8 | 男 ) P ( 男 ) = 6.1984 × 10 − 9 p ( F 1 = 6 | 女 ) p ( F 2 = 130 | 女 ) p ( F 3 = 8 | 女 ) P ( 女 ) = 5.3778 × 10 − 4

从计算结果可以看出,这个人是女性的可能性远大于是男性的可能性。

如果要通过编程实现这一过程,还要考虑平滑处理,这里不再赘述。


  1. 如果没有想明白这一步,可以利用Venn图来帮助理解。
  2. 若干个两两互斥的事件之和的概率,等于各事件的概率之和,即
    P(A1+A2+)=P(A1)+P(A2)+ P ( A 1 + A 2 + ⋯ ) = P ( A 1 ) + P ( A 2 ) + ⋯
  3. 随机事件的意思就是,在试验之前你并不知道该事件是否会在试验中发生,发生与否取决于机遇。
  4. 感谢网友在评论中指出的批评,这个地方我是写漏了条件。
  5. 假设不同特征彼此独立,即,当有
    P(y|x1,,xn)=P(y)P(x1,,xn|y)P(x1,,xn) P ( y | x 1 , ⋯ , x n ) = P ( y ) P ( x 1 , ⋯ , x n | y ) P ( x 1 , ⋯ , x n )

    我们假设
    P(xi|y,x1,,xi1,xi+1,,xn)=P(xi|y) P ( x i | y , x 1 , ⋯ , x i − 1 , x i + 1 , ⋯ , x n ) = P ( x i | y )

    所以才称作“朴素”贝叶斯(Naive Bayes)。
  6. 概率密度可以理解为“瞬时”的概率。对于概率密度函数,必须要满足两条性质:
    (1)f(x)0;(2)f(x)dx=1 ( 1 ) f ( x ) ≥ 0 ; ( 2 ) ∫ − ∞ ∞ f ( x ) d x = 1

    所以只要 f(x) f ( x ) 整体的积分为1就可以了,并不要求局部的每个值都比1小。就像 δ δ 函数(维基百科-delta函数),虽然在0上的函数值可以大于1,但整体的积分却永远是1。

转载请注明本文地址:理解全概率公式与贝叶斯公式
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭