第 13 课 - 概率论基础:事件、概率与条件概率
1. 学习目标
完成本课学习后,你将能够:
- 理解并清晰地定义随机试验、样本空间和随机事件。
- 掌握概率的古典定义与统计定义,并能计算简单事件的概率。
- 理解条件概率的概念,并熟练运用乘法公式。
- 理解贝叶斯定理的原理,并能应用于简单的实际问题。
2. 核心概念
事件:想象你在做一个实验(比如掷骰子),实验所有可能结果的集合就是样本空间。样本空间中我们感兴趣的某一部分结果,就叫做一个事件。例如,“掷出偶数点”就是一个事件。
概率:概率就是对一个事件发生可能性大小的数值度量,取值在0到1之间。0表示不可能发生,1表示必然发生。常用的计算方式有两种:
- 古典概率:如果所有可能的结果是等可能的,那么事件A的概率 P(A) = (A包含的结果数) / (所有可能结果的总数)。例如,一个公平骰子掷出“6点”的概率是 1/6。
- 统计概率(频率):在相同条件下重复试验n次,事件A发生了m次,当n很大时,m/n趋近于P(A)。
条件概率:在“事件B已经发生”这个信息下,事件A发生的概率,记作 P(A|B)。它体现了信息的更新。例如,已知明天是阴天(事件B),明天下雨(事件A)的概率是多少?这个概率显然比不知道天气时下雨的概率要高。
其计算公式为:P(A|B) = P(AB) / P(B),其中 P(AB) 是事件A和事件B同时发生的概率。
贝叶斯定理:这是条件概率的一个伟大应用,它回答了“在观测到证据后,如何更新我们对某个假设的信念”。公式为:P(A|B) = [P(B|A) * P(A)] / P(B)。
P(A)是先验概率:在看到证据B之前,对A的初始信念。P(B|A)是似然:如果A是真,看到证据B的可能性有多大。P(A|B)是后验概率:看到证据B之后,对A更新后的信念。P(B)是归一化常数,确保所有概率之和为1。
3. 代码示例
以下示例使用Python演示概率计算与贝叶斯定理。
import numpy as np
# === 示例1:事件与概率(生日问题)===
print("=== 生日问题 ===")
n_people = 23 # 班级人数
# 计算至少两人生日相同的概率
# 方法:计算所有人生日都不同的概率,然后用1减去它。
prob_different = 1.0
for i in range(1, n_people):
prob_different *= (365 - i) / 365
prob_same = 1 - prob_different
print(f"在 {n_people} 人的班级中,至少有两人生日相同的概率约为: {prob_same:.2%}")
# === 示例2:条件概率与乘法公式===
print("\n=== 条件概率示例:抽卡片 ===")
# 一副标准扑克牌52张,抽一张。
# 事件A: 抽到红心
# 事件B: 抽到人头牌(J, Q, K)
# 问:已知抽到一张红心,它是人头牌的概率是多少?即 P(B|A)
# 先验概率
p_A = 13 / 52 # 红心牌有13张
p_AB = 3 / 52 # 红心人头牌(J,Q,K)有3张
p_B_given_A = p_AB / p_A
print(f"P(抽到人头牌 | 抽到红心) = {p_B_given_A:.3f}") # 应约为 3/13
# === 示例3:贝叶斯定理应用 - 医学诊断===
print("\n=== 贝叶斯定理应用:疾病诊断 ===")
# 假设某种罕见病的患病率为 0.1% (先验概率 P(Disease)=0.001)
# 一种检测方法的性能:
# - 真阳性率(灵敏度):患者检测为阳性的概率 P(Positive|Disease)=0.99
# - 假阳性率:健康人检测为阳性的概率 P(Positive|NoDisease)=0.05
# 问题:一个人检测为阳性,他真正患病的概率是多少?即 P(Disease|Positive)
# 根据贝叶斯定理计算
p_disease = 0.001
p_positive_given_disease = 0.99
p_positive_given_no_disease = 0.05
# 计算 P(Positive),使用全概率公式:P(Positive) = P(Positive|Disease)*P(Disease) + P(Positive|NoDisease)*P(NoDisease)
p_positive = p_positive_given_disease * p_disease + p_positive_given_no_disease * (1 - p_disease)
# 计算后验概率 P(Disease|Positive)
p_disease_given_positive = (p_positive_given_disease * p_disease) / p_positive
print(f"已知患病率(先验): {p_disease:.1%}")
print(f"检测为阳性的概率 P(Positive): {p_positive:.4f}")
print(f"检测为阳性且真正患病的概率(后验): {p_disease_given_positive:.2%}")
print("\n解读:尽管检测看起来很准(99%灵敏度),但由于疾病本身非常罕见,阳性结果中真正患病的比例依然很低。这体现了先验概率的重要性。")
4. 实践练习
练习1 (基础):掷骰子概率
- 一个公平的六面骰子,掷一次。定义事件A为“点数大于4”,事件B为“点数为奇数”。
- 问题:1) 计算P(A)和P(B)。2) 事件A和B是互斥的吗(即不能同时发生)?为什么?
- 预期输出:P(A)=1/3,P(B)=1/2,它们不是互斥的(例如点数5同时满足A和B)。
练习2 (条件概率):袋中有球
- 一个袋子中有3个红球,2个蓝球。依次不放回地摸出两个球。
- 问题:计算在第一次摸出红球的条件下,第二次也摸出红球的概率。即P(第二次红 | 第一次红)。
- 提示:使用条件概率定义或直接考虑剩余球的情况。
- 预期输出:概率为 2/4 = 0.5。
练习3 (贝叶斯应用):垃圾邮件过滤器
- 假设:
- 40%的邮件是垃圾邮件 (P(Spam)=0.4)。
- 在垃圾邮件中,“免费”这个词出现的概率是80% (P(“免费”|Spam)=0.8)。
- 在正常邮件中,“免费”这个词出现的概率是10% (P(“免费”|Not Spam)=0.1)。
- 问题:一封邮件包含“免费”一词,它是垃圾邮件的概率是多少?
- 预期输出:计算后,P(Spam | “免费”) ≈ 88.9%。
5. 常见错误
- 混淆 P(A|B) 和 P(B|A):这是最典型的错误。例如,P(检测阳性|患病) 和 P(患病|检测阳性) 完全不是一回事。
- 忽略归一化因子:在应用贝叶斯公式时,分母 P(B) 必须使用全概率公式计算,不能遗漏。
- 错误地加总概率:只有当事件互斥(不能同时发生)时,P(A∪B) = P(A) + P(B) 才成立。对于非互斥事件,必须使用 P(A∪B) = P(A) + P(B) - P(AB)。
- 将“独立”与“互斥”混淆:两个事件独立是指一个的发生不影响另一个的概率(P(AB)=P(A)P(B))。互斥是指它们不能同时发生(P(AB)=0)。互斥事件通常不独立(因为一个发生会影响另一个发生的概率为0)。
6. 小结
- 事件是随机试验结果的某个集合,概率是其发生可能性的度量。
- 条件概率 P(A|B) 是在已知B发生的条件下A发生的概率,是信息更新的基础。
- 乘法公式 P(AB) = P(A|B)P(B) 是连接联合概率与条件概率的桥梁。
- 贝叶斯定理
P(A|B) = [P(B|A) * P(A)] / P(B)是概率论的基石之一,它建立了从“原因到结果”(似然P(B|A))和“从结果到原因”(后验P(A|B))的联系,在机器学习的分类、推理和信念更新中无处不在。 - 理解先验、似然和后验之间的关系,是掌握贝叶斯思维的关键。
练习编辑器
rust
Loading...