--- created: 2025-08-03 21:19:11 tags: - "Research" - "基础" - "Diffusion" - "贝叶斯定理" - "概率论" --- 这里推荐两个视频,深入浅出地解释了贝叶斯定理: [Bayes' Theorem 贝叶斯定理](https://www.youtube.com/watch?v=Pu675cHJ7bg) [Bayes theorem, the geometry of changing beliefs](https://www.youtube.com/watch?v=HZGCoVF3YvM) 如果你不想花太多时间看视频,可以继续阅读,我把视频内容编译成文字,以便快速学习贝叶斯定理。 ## 1. 引入 为了搞明白贝叶斯定理究竟要解决什么问题,我们先看一个现实生活的例子: 已知有一种疾病,发病率是 0.1%。针对这种疾病的测试非常准确: * 如果有病,则准确率是 99%(即有 1% 未检出阳性); * 如果没有病,则误报率是 2%(即有 2% 误报为阳性)。 现在,如果一个人测试显示阳性,请问他患病的概率是多少? 如果我们从大街上随便找一个人,那么他患病的概率就是 0.1%,因为这个概率是基于历史统计数据的先验概率。 现在,他做了一次测试,结果为阳性,我们要计算他患病的概率,就是计算条件概率,即:在测试为阳性这一条件下,患病的概率是多少。 从直觉上这个人患病的概率大于 0.1%,但也肯定小于 99%。究竟是多少,怎么计算,我们先放一放。 ## 2. 推导 为了理解条件概率,我们换一个更简单的例子:掷两次骰子,一共可能出现的结果有 6x6=36 种: ![|269](https://liaoxuefeng.com/blogs/all/2023-08-27-bayes-explain/sample-all.png) 这就是所谓的样本空间,每个样本的概率均为 1/36,这个很好理解。 如果我们定义事件 A 为:至少有一个骰子是 2,那么事件 A 的样本空间如下图红色部分所示: ![|269](https://liaoxuefeng.com/blogs/all/2023-08-27-bayes-explain/sample-a.png) 事件 A 一共有 11 种情况,我们计算事件 A 的概率 P(A): ![|246](https://liaoxuefeng.com/blogs/all/2023-08-27-bayes-explain/pa.png) 我们再定义事件 B:两个骰子之和为 7,那么事件 B 的样本空间如下图绿色部分所示: ![|269](https://liaoxuefeng.com/blogs/all/2023-08-27-bayes-explain/sample-b.png) 事件 B 一共有 6 种情况,我们计算事件 B 的概率 P(B): ![|246](https://liaoxuefeng.com/blogs/all/2023-08-27-bayes-explain/pb.png) 接下来我们用 P(A∩B) 表示 A 和 B 同时发生的概率,A∩B 就是 A 和 B 的交集,如下图蓝色部分所示: ![|269](https://liaoxuefeng.com/blogs/all/2023-08-27-bayes-explain/sample-p-a-and-b.png) 显然 A∩B 只有两种情况,因此,计算 P(A∩B): ![|246](https://liaoxuefeng.com/blogs/all/2023-08-27-bayes-explain/p-a-and-b.png) 接下来我们就可以讨论条件概率了。我们用 P(A|B) 表示在 B 发生的条件下,A 发生的概率。由于 B 已经发生,所以,样本空间就是 B 的样本数量 6,而要发生 A 则只能是 A、B 同时发生,即 A∩B,有两种情况。 因此,计算 P(A|B) 如下: ![|246](https://liaoxuefeng.com/blogs/all/2023-08-27-bayes-explain/p-a-b.png) 同理,我们用 P(B|A) 表示在 A 发生的条件下,B 发生的概率。此时,分子仍然是 A∩B 的样本数量,但分母变成 A 的样本数量: ![|246](https://liaoxuefeng.com/blogs/all/2023-08-27-bayes-explain/p-b-a.png) 可见,条件概率 P(A|B) 和 P(B|A) 是不同的。 我们再回到 A、B 同时发生的概率,观察 P(A∩B) 可以改写为: ![|525](https://liaoxuefeng.com/blogs/all/2023-08-27-bayes-explain/p-a-and-b-2.png) 同理,P(A∩B) 还可以改写为: ![](https://liaoxuefeng.com/blogs/all/2023-08-27-bayes-explain/p-a-and-b-3.png) 因此,根据上述两个等式,我们推导出下面的等式: $$P(A\cap B)=P(A|B)\times P(B)=P(B|A)\times P(A)$$ 把左边的`P(A∩B)`去掉,我们得到等式: $$P(A|B)\times P(B)=P(B|A)\times P(A)$$ 最后,整理一下等式,我们推导出贝叶斯定理如下: $$P(A|B)=\frac{P(B|A)\times P(A)}{P(B)}$$ 这就是著名的贝叶斯定理,它表示,当出现 B 时,如何计算 A 的概率。 很多时候,我们把`A`改写为`H`,把`B`改写为`E`: $$P(H|E)=\frac{P(E|H)\times P(H)}{P(E)}$$ H 表示 Hypothesis(假设),E 表示 Evidence(证据),贝叶斯定理的意义就在于,给定一个先验概率 P(H),在出现了证据 E 的情况下,计算后验概率 P(H|E)。 ## 3. 计算 有了贝叶斯定理,我们就可以回到开头的问题: 已知有一种疾病,发病率是 0.1%。针对这种疾病的测试非常准确: * 如果有病,则准确率是 99%(即有 1% 未检出阳性); * 如果没有病,则误报率是 2%(即有 2% 误报为阳性)。 现在,如果一个人测试显示阳性,请问他患病的概率是多少? 用 H 表示患病,E 表示测试为阳性,那么,我们要计算在测试为阳性的条件下,一个人患病的概率,就是计算 P(H|E)。根据贝叶斯定理,计算如下: P(H∣E)=P(E)P(E∣H)×P(H)​ P(H) 表示患病的概率,根据发病率可知,P(H)=0.1%; P(E|H)表示在患病的情况下,测试为阳性的概率,根据 “如果有病,则准确率是 99%” 可知,P(E|H)=99%; P(E) 表示测试为阳性的概率。这个概率就稍微复杂点,因为它是指对所有人(包含病人和健康人)进行测试,结果阳性的概率。 我们可以把检测人数放大,例如放大到 10 万人,对 10 万人进行检测,根据发病率可知: * 有 100 人是病人,另外 99900 是健康人; * 对 100 个病人进行测试,有 99 人显示阳性,另有 1 人未检出(阴性); * 对 99900 个健康人进行测试,有 2%=1998 人显示阳性(误报),另有 98%=97902 人为阴性。 下图显示了检测为阳性的结果的分布: ``` ┌───────┐ │100000 │ └───────┘ │ ┌───────┴───────┐ ▼ ▼ ┌───────┐ ┌───────┐ │ 100 │ │ 99900 │ └───────┘ └───────┘ │ │ ┌───┴───┐ ┌───┴───┐ ▼ ▼ ▼ ▼ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ 99 │ │ 1 │ │1998 │ │97902│ └─────┘ └─────┘ └─────┘ └─────┘ │ │ ▼ ▼ + + ``` 所以,对于 10 万人的样本空间来说,事件 E = 显示阳性的概率为 (99+1998)/100000=2.097%。 带入贝叶斯定理,计算 P(H|E): P(H∣E)=P(E)P(E∣H)×P(H)​=2.097%99%×0.1%​=0.020970.99×0.001​=0.04721=4.721% 计算结果为患病的概率为 4.721%,这个概率远小于 99%,且与大多数人的直觉不同,原因在于庞大的健康人群导致的误报数量远多于病人,当出现 “检测阳性” 的证据时,患病的概率从先验概率 0.1% 提升到 4.721%,还远不足以确诊。 ## 4. 贝叶斯定理的另一种表示 在上述计算中,我们发现计算 P(E) 是比较困难的,很多时候,甚至无法知道 P(E)。此时,我们需要贝叶斯定理的另一种表示形式。 我们用 P(H) 表示 H 发生的概率,用 H 表示 H 不发生,P(H) 表示 H 不发生的概率。显然 P(H)=1-P(H)。 下图红色部分表示 H,红色部分以外则表示 H: ![|220](https://liaoxuefeng.com/blogs/all/2023-08-27-bayes-explain/ph.png) 事件 E 用绿色表示: ![|220](https://liaoxuefeng.com/blogs/all/2023-08-27-bayes-explain/pe.png) 可见,P(E) 可以分为两部分,一部分是 E 和 H 的交集,另一部分是 E 和 H 的交集: P(E)=P(E∩H)+P(E∩H) 根据上文的公式 P(A∩B)=P(A|B)xP(B),代入可得: P(E)=P(E∩H)+P(E∩H)=P(E∣H)×P(H)+P(E∣H)×P(H) 把 P(E) 替换掉,我们得到贝叶斯定理的另一种写法: P(H∣E)=P(E∣H)×P(H)+P(E∣H)×P(H)P(E∣H)×P(H)​ 用这个公式来计算,我们就不必计算 P(E) 了。再次回到开头的问题: 已知有一种疾病,发病率是 0.1%。针对这种疾病的测试非常准确: * 如果有病,则准确率是 99%(即有 1% 未检出阳性); * 如果没有病,则误报率是 2%(即有 2% 误报为阳性)。 现在,如果一个人测试显示阳性,请问他患病的概率是多少? * P(E|H) 表示患病时检测阳性的概率 = 99%; * P(H) 表示患病的概率 = 0.1%; * P(E|H) 表示没有患病但检测阳性的概率 = 2%; * P(H) 表示没有患病的概率 = 1-P(H)=99.9%。 代入公式,计算: P(H∣E)=P(E∣H)×P(H)+P(E∣H)×P(H)P(E∣H)×P(H)​=99%×0.1%+2%×99.9%99%×0.1%​=0.04721=4.721% 检测为阳性这一证据使得患病的概率从 0.1% 提升到 4.721%。假设这个人又做了一次检测,结果仍然是阳性,那么他患病的概率是多少? 我们仍然使用贝叶斯定理计算,只不过现在先验概率 P(H) 不再是 0.1%,而是 4.721%,P(E|H) 和 P(E|H) 仍保持不变,计算新的 P(H|E): P(H∣E)=P(E∣H)×P(H)+P(E∣H)×P(H)P(E∣H)×P(H)​=99%×4.721%+2%×(1−4.721%)99%×4.721%​=0.71=71% 结果为 71%,两次检测为阳性的结果使得先验概率从 0.1% 提升到 4.721% 再提升到 71%,继续第三次检测如果为阳性则概率将提升至 99.18%。 可见,贝叶斯定理的核心思想就是不断根据新的证据,将先验概率调整为后验概率,使之更接近客观事实。