§1.1.5

条件概率、联合概率、边缘概率与贝叶斯定理?

核心概念

联合概率 (Joint Probability), P(A,B)P(A, B),表示两个或多个事件同时发生的概率。例如,今天“下雨”和“交通堵塞”两个事件都发生的概率。

边缘概率 (Marginal Probability), P(A)P(A),是指某个单一事件发生的概率,而不考虑其他事件。它是通过在所有其他事件上对联合概率进行求和(离散情况)或积分(连续情况)得到的。之所以称为“边缘”,是因为在概率表中,它通常被计算并写在表格的边缘。

条件概率 (Conditional Probability), P(AB)P(A|B),表示在事件 B 已经发生的条件下,事件 A 发生的概率。它量化了新信息(事件 B 发生)对我们判断事件 A 发生可能性的影响。

贝叶斯定理 (Bayes' Theorem) 是一个连接以上概念的桥梁。它描述了如何在已知 P(BA)P(B|A) 的情况下,计算“逆条件概率” P(AB)P(A|B)。其核心思想是利用新证据(观测数据)来更新我们对某个假设的信念(概率)。

原理与推导

我们从最基本的条件概率定义出发,推导其他概念和定理。

1. 条件概率的定义

条件概率 P(AB)P(A|B) 的定义是:在事件 B 发生的样本空间中,事件 A 发生的概率。

P(AB)=P(AB)P(B)=P(A,B)P(B)P(A|B) = \frac{P(A \cap B)}{P(B)} = \frac{P(A, B)}{P(B)}

其中,P(A,B)P(A, B) 是 A 和 B 的联合概率,P(B)P(B) 必须大于 0。

  • 动机: 我们想知道 B 的发生如何影响 A 的发生。我们的“宇宙”从所有可能的结果缩减到了“B 发生”的子集。P(AB)P(A|B) 就是在这个缩小的宇宙里,A 所占的比例。
  • 几何解释: 想象一个代表所有可能结果的矩形区域,其面积为 1。事件 A 和 B 是其中的两个子区域。P(A)P(A)P(B)P(B) 是它们的面积。P(A,B)P(A, B) 是它们交集 ABA \cap B 的面积。当我们知道 B 已经发生,我们的样本空间就从整个矩形缩减为区域 B。在这个新样本空间里,A 发生的概率就是交集区域 ABA \cap B 的面积相对于 B 区域面积的比例,即 Area(AB)Area(B)\frac{\text{Area}(A \cap B)}{\text{Area}(B)}

2. 乘法法则 (Product Rule) 与联合概率

由条件概率定义直接移项可得乘法法则:

P(A,B)=P(AB)P(B)P(A, B) = P(A|B)P(B)

由于 A 和 B 的对称性,我们同样可以写出:

P(A,B)=P(BA)P(A)P(A, B) = P(B|A)P(A)

这就是计算联合概率的核心公式。它将联合概率分解为条件概率和边缘概率的乘积。

3. 加法法则 (Sum Rule) 与边缘概率

对于一个完备事件组 B1,B2,...,BnB_1, B_2, ..., B_n(即它们互斥且并集为全集),事件 A 的边缘概率可以通过对所有联合概率 P(A,Bi)P(A, B_i)求和得到:

P(A)=i=1nP(A,Bi)P(A) = \sum_{i=1}^{n} P(A, B_i)

对于两个变量 A 和 B,边缘概率 P(A)P(A) 就是将 B 的所有可能取值都“求和”掉(或“边缘化”掉):

P(A)=bBP(A,B=b)P(A) = \sum_{b \in \mathcal{B}} P(A, B=b)

其中 B\mathcal{B} 是变量 B 所有可能取值的集合。对于连续变量,求和变成积分:

p(a)=p(a,b)dbp(a) = \int p(a, b) \,db
  • 动机: 我们关心事件 A 的总体概率,而不关心 B 的具体取值。因此,我们考虑所有 B 可能发生的情况,并将 A 在这些情况下的概率(由联合概率 P(A,B)P(A, B) 给出)加权求和。

4. 贝叶斯定理的推导

结合两个版本的乘法法则:

P(AB)P(B)=P(A,B)=P(BA)P(A)P(A|B)P(B) = P(A, B) = P(B|A)P(A)

整理上式,假设 P(B)>0P(B) > 0,即可得到贝叶斯定理的基本形式:

P(AB)=P(BA)P(A)P(B)P(A|B) = \frac{P(B|A)P(A)}{P(B)}
  • 推导动机: 我们常常更容易获得 P(BA)P(B|A)(例如,在某个假设 A 成立的条件下,观察到证据 B 的概率),但我们真正想知道的是 P(AB)P(A|B)(在观察到证据 B 之后,假设 A 成立的概率)。贝叶斯定理提供了从前者计算后者的数学框架。

通常,分母 P(B)P(B) 不直接给出,我们可以使用加法法则和乘法法则将其展开:

P(B)=aAP(B,A=a)=aAP(BA=a)P(A=a)P(B) = \sum_{a \in \mathcal{A}} P(B, A=a) = \sum_{a \in \mathcal{A}} P(B|A=a)P(A=a)

代入后得到贝叶斯定理的完全形式:

P(AB)=P(BA)P(A)aAP(BA=a)P(A=a)P(A|B) = \frac{P(B|A)P(A)}{\sum_{a \in \mathcal{A}} P(B|A=a)P(A=a)}

在机器学习中,我们通常使用以下术语来描述贝叶斯定理的各个部分(以参数估计为例,θ\theta 为模型参数,D\mathcal{D} 为数据):

P(θD)=P(Dθ)P(θ)P(D)P(\theta|\mathcal{D}) = \frac{P(\mathcal{D}|\theta)P(\theta)}{P(\mathcal{D})}
  • P(θD)P(\theta|\mathcal{D}): 后验概率 (Posterior),在观测到数据 D\mathcal{D} 后,参数 θ\theta 的概率。这是我们想要计算的目标。
  • P(Dθ)P(\mathcal{D}|\theta): 似然 (Likelihood),在参数 θ\theta 给定的情况下,观测到数据 D\mathcal{D} 的概率。
  • P(θ)P(\theta): 先验概率 (Prior),在观测到任何数据之前,我们对参数 θ\theta 的初始信念或假设。
  • P(D)P(\mathcal{D}): 证据 (Evidence)边缘似然 (Marginal Likelihood),数据的边缘概率。它是一个归一化常数,确保后验概率的总和(或积分)为 1。

代码实现

下面我们用一个具体的例子来演示这些概念的计算。假设我们有两个二元随机变量:RR (是否下雨) 和 TT (是否交通堵塞)。它们的联合概率分布由一个 2x2 的表格给出。

| | T=True (堵塞) | T=False (不堵塞) | |-------------|-----------------|--------------------| | R=True (下雨) | 0.15 | 0.05 | | R=False (晴天)| 0.10 | 0.70 |

python
1import numpy as np
2
3# 联合概率分布表 P(R, T)
4# R: 0=晴天, 1=下雨
5# T: 0=不堵塞, 1=堵塞
6# 索引约定: joint_prob[r, t] = P(R=r, T=t)
7joint_prob_table = np.array([
8 [0.10, 0.70], # R=0 (晴天): P(R=0, T=1)=0.10, P(R=0, T=0)=0.70
9 [0.15, 0.05] # R=1 (下雨): P(R=1, T=1)=0.15, P(R=1, T=0)=0.05
10])
11
12# 重新排列一下,让 T 的维度在前,更符合表格的列定义
13# T: 0=不堵塞, 1=堵塞
14# R: 0=晴天, 1=下雨
15# 索引约定: joint_prob[t, r] = P(T=t, R=r)
16joint_prob_table = np.array([
17 [0.70, 0.05], # T=0 (不堵塞): P(T=0, R=0)=0.70, P(T=0, R=1)=0.05
18 [0.10, 0.15] # T=1 (堵塞): P(T=1, R=0)=0.10, P(T=1, R=1)=0.15
19])
20
21print("--- 1. 联合概率 P(R, T) ---")
22print(f"P(R=下雨, T=堵塞) = {joint_prob_table[1, 1]:.2f}")
23print(f"P(R=晴天, T=不堵塞) = {joint_prob_table[0, 0]:.2f}\n")
24
25
26print("--- 2. 边缘概率 P(R) 和 P(T) ---")
27# 计算 P(T),对 R 的维度(axis=1)求和
28# 为什么这样做:P(T=t) = P(T=t, R=0) + P(T=t, R=1),即对每一列求和
29prob_t = np.sum(joint_prob_table, axis=1)
30# 计算 P(R),对 T 的维度(axis=0)求和
31# 为什么这样做:P(R=r) = P(T=0, R=r) + P(T=1, R=r),即对每一行求和
32prob_r = np.sum(joint_prob_table, axis=0)
33
34print(f"P(T=不堵塞) = {prob_t[0]:.2f}, P(T=堵塞) = {prob_t[1]:.2f}")
35print(f"P(R=晴天) = {prob_r[0]:.2f}, P(R=下雨) = {prob_r[1]:.2f}\n")
36
37
38print("--- 3. 条件概率 P(R|T) ---")
39# 计算 P(R|T) = P(R, T) / P(T)
40# 为什么这样做:根据条件概率定义,联合概率除以条件事件的边缘概率。
41# NumPy的广播机制会自动将 [2,2] 的数组除以 [2,1] 的数组(列向量)
42prob_r_given_t = joint_prob_table / prob_t.reshape(2, 1)
43
44print("P(R|T) 条件概率表:")
45print(f"P(R=晴天|T=不堵塞) = {prob_r_given_t[0, 0]:.2f}")
46print(f"P(R=下雨|T=不堵塞) = {prob_r_given_t[0, 1]:.2f}")
47print(f"P(R=晴天|T=堵塞) = {prob_r_given_t[1, 0]:.2f}")
48print(f"P(R=下雨|T=堵塞) = {prob_r_given_t[1, 1]:.2f}\n")
49
50
51print("--- 4. 使用贝叶斯定理验证 ---")
52# 目标:计算 P(R=下雨 | T=堵塞)
53# 已知:
54# P(T=堵塞 | R=下雨) (似然)
55# P(R=下雨) (先验)
56# P(T=堵塞) (证据)
57
58# 首先计算 P(T|R) = P(T, R) / P(R)
59prob_t_given_r = joint_prob_table / prob_r.reshape(1, 2)
60likelihood = prob_t_given_r[1, 1] # P(T=堵塞 | R=下雨)
61print(f"似然 P(T=堵塞|R=下雨) = {likelihood:.2f}")
62
63prior = prob_r[1] # P(R=下雨)
64print(f"先验 P(R=下雨) = {prior:.2f}")
65
66evidence = prob_t[1] # P(T=堵塞)
67print(f"证据 P(T=堵塞) = {evidence:.2f}")
68
69# 应用贝叶斯定理
70# 为什么这样做:这是贝叶斯公式 P(A|B) = P(B|A) * P(A) / P(B) 的直接应用
71posterior = (likelihood * prior) / evidence
72print(f"\n通过贝叶斯定理计算后验 P(R=下雨|T=堵塞) = ({likelihood:.2f} * {prior:.2f}) / {evidence:.2f} = {posterior:.2f}")
73
74# 验证结果是否与直接计算的条件概率一致
75direct_calculation = prob_r_given_t[1, 1]
76print(f"直接从条件概率定义计算的结果 = {direct_calculation:.2f}")
77assert np.isclose(posterior, direct_calculation)
78print("结果一致,验证通过!")

工程实践

  • 使用场景:

    • 朴素贝叶斯分类器 (Naive Bayes Classifier): 这是一个经典的分类算法,它使用贝叶斯定理和特征之间相互独立的“朴素”假设。例如,在垃圾邮件分类中,计算 P(垃圾邮件邮件内容)P(\text{垃圾邮件}|\text{邮件内容}),通过贝叶斯定理转化为计算 P(邮件内容垃圾邮件)P(\text{邮件内容}|\text{垃圾邮件})P(垃圾邮件)P(\text{垃圾邮件})。前者通过统计词频得到,后者是垃圾邮件的先验比例。
    • 贝叶斯网络 (Bayesian Networks): 也称信念网络,是一种概率图模型。它通过一个有向无环图来表示变量间的条件依赖关系,极大地简化了高维随机变量联合概率分布的表示和推断。常用于医疗诊断、故障排查等领域。
    • 贝叶斯推断 (Bayesian Inference): 在现代机器学习中,用于估计模型参数的不确定性。例如,在贝叶斯神经网络中,权重不是一个固定的值,而是一个概率分布。通过贝叶斯定理,用观测数据来更新权重的后验分布。
    • A/B 测试: 在分析 A/B 测试结果时,贝叶斯方法可以给出“A优于B的概率”这样的直观结论,而不仅仅是p值。
  • 超参数选择:

    • 在贝叶斯模型中,先验分布的选择本身就是一种超参数。例如,在朴素贝叶斯中,用于平滑的拉普拉斯平滑系数 α\alpha 可以看作是狄利克雷先验的参数。
    • 无信息先验 (Uninformative Prior): 当我们对参数没有太多先验知识时使用,让数据本身说话。
    • 共轭先验 (Conjugate Prior): 当先验和后验属于同一类分布时,称该先验为似然函数的共轭先验。这会极大简化计算,因为后验分布有解析形式。例如,Beta 分布是二项分布似然的共轭先验。
  • 性能 / 显存 / 吞吐 的权衡:

    • 朴素贝叶斯: 训练速度极快,计算开销小,因为它只需要计数和计算概率。但由于其强独立性假设,模型表达能力有限,精度可能不如复杂模型。
    • 贝叶斯网络: 推断(计算后验概率)在一般图上是 NP-hard 的。实际中常使用近似推断算法,如马尔可夫链蒙特卡洛 (MCMC) 或变分推断 (Variational Inference)。这些方法计算成本高,但能捕捉更复杂的依赖关系。
    • 数值稳定性: 连续的概率连乘很容易导致数值下溢(结果接近于零)。在实践中,几乎总是在对数空间 (log-space) 中进行计算,将乘法变为加法:logP(A,B)=logP(AB)+logP(B)\log P(A,B) = \log P(A|B) + \log P(B)
  • 常见坑和调试技巧:

    • 零概率问题: 在朴素贝叶斯中,如果一个特征值在训练集中某个类别下从未出现过,其条件概率会是 0,导致整个后验概率为 0。解决方法是拉普拉斯平滑 (Laplace Smoothing) 或伪计数,即给所有计数加一个小的正数 α\alpha
    • 特征独立性假设: 朴素贝叶斯的核心弱点。在调试时,可以通过分析特征相关性矩阵,或使用互信息等工具来检查哪些特征严重违背了独立性假设。如果违背严重,可以考虑树增强朴素贝叶斯 (TAN) 等模型。

常见误区与边界情况

  • 混淆 P(AB)P(A|B)P(BA)P(B|A): 这是最常见的误区。

    • 例子:P(阳性患病)P(\text{阳性}|\text{患病}) 是检测的灵敏度(真阳性率),通常很高。而 P(患病阳性)P(\text{患病}|\text{阳性}) 是我们拿到阳性报告后,真正关心的自己患病的概率。后者受疾病的先验概率(流行率)影响巨大。如果一个病很罕见,即使检测很准,拿到阳性报告后,实际患病的概率也可能不高(因为假阳性的可能性相对变大了)。
  • 误认为独立性是常态: 很多初学者会不自觉地使用 P(A,B)=P(A)P(B)P(A, B) = P(A)P(B),但这是条件独立的特殊情况,仅当 P(AB)=P(A)P(A|B) = P(A) 时成立。在绝大多数现实问题中,变量是相互依赖的。

  • 边界情况 P(B)=0P(B)=0: 如果条件事件 B 的概率为零,则条件概率 P(AB)P(A|B)未定义的。在编程实现时,除以一个概率值前,必须检查其是否为零,以避免除零错误。

  • 对“证据”P(D)P(\mathcal{D})的忽视: 在做模型比较时,P(D)=P(Dθ)P(θ)dθP(\mathcal{D}) = \int P(\mathcal{D}|\theta)P(\theta)d\theta 是至关重要的。它代表了模型对数据的拟合优度,是贝叶斯模型选择的核心。计算它通常非常困难,是高级贝叶斯方法(如 MCMC)的主要挑战之一。

  • 常见面试追问:

    • : “请现场推导一下贝叶斯定理。”
      • : 从条件概率定义 P(AB)=P(A,B)/P(B)P(A|B) = P(A,B)/P(B) 出发,利用乘法法则 P(A,B)=P(BA)P(A)P(A,B) = P(B|A)P(A) 替换分子即可。
    • : “朴素贝叶斯为什么‘朴素’?它的核心假设是什么?”
      • : “朴素”在于它假设所有特征在给定类别的情况下是条件独立的。即 P(X1,X2,...,XnC)=P(X1C)P(X2C)...P(XnC)P(X_1, X_2, ..., X_n | C) = P(X_1|C)P(X_2|C)...P(X_n|C)。这个假设大大简化了计算,但在现实中往往不成立。
    • : “在朴素贝叶斯中,如果一个词在训练集的垃圾邮件中从未出现,会发生什么?如何解决?”
      • : 会导致 P(垃圾邮件)=0P(\text{词}|\text{垃圾邮件}) = 0,使得整个邮件的后验概率为零,即使其他词都强烈指向垃圾邮件。解决方法是拉普拉斯平滑,给所有词的计数加一个小的平滑值 α\alpha
    • : “解释一下最大似然估计 (MLE) 和最大后验估计 (MAP) 的区别。”
      • : MLE 旨在找到使似然 P(Dθ)P(\mathcal{D}|\theta) 最大的参数 θ\theta。MAP 旨在找到使后验概率 P(θD)P(\theta|\mathcal{D}) 最大的参数 θ\theta。根据贝叶斯定理,P(θD)P(Dθ)P(θ)P(\theta|\mathcal{D}) \propto P(\mathcal{D}|\theta)P(\theta),所以 MAP = MLE ×\times Prior。MAP 在 MLE 的基础上加入了先验知识 P(θ)P(\theta),可以看作是正则化的一种形式。当先验是均匀分布时,MAP 等价于 MLE。
相关题目