2.1 概率的公理化与条件概率
线性代数处理的是确定性的对象:给定矩阵与向量,乘积给出唯一的结果。概率论处理的对象不同,同一个试验重复进行可以得到不同的结果,需要用介于
本节从随机试验出发,依次建立样本空间、事件域与概率公理,再引入条件概率这一核心工具,推导全概率公式与贝叶斯公式,最后讨论事件的独立性。这一套语言是后续全部内容的基础:随机变量是事件的数值编码,期望是概率的加权求和,统计推断是条件概率在数据条件下的反向应用。
2.1.1 随机试验与样本空间
随机现象与随机试验
在给定条件下必然出现确定结果的现象称为确定性现象,例如在标准大气压下把纯水加热到
随机试验有三个特征:可以在相同条件下重复进行;每次试验的可能结果不止一个,且全部可能结果事先已知;每次试验前无法确定哪一个结果会出现。抛硬币、掷骰子、记录服务器下一次请求的响应时间、从一批产品中随机抽取一件测量长度,都是随机试验。
样本空间与样本点
样本空间(sample space)是随机试验全部可能结果的集合,记作
不同试验的样本空间形态差异很大:
样本空间可以是有限集、可数无限集或不可数集。这一区分决定了概率的计算方式:有限与可数样本空间上用求和,不可数样本空间上要用积分。抛硬币与掷骰子的样本空间有限,响应时间与传感器波形的样本空间不可数,两类问题需要不同的工具,这一差别将在 2.2 节展开。
事件与事件域
事件(event)是样本空间的子集。事件
当样本空间不可数时,把全部子集都当作事件会带来技术困难,需要把讨论范围限制在一个满足封闭性的集合族上。这个集合族记作
由这三条性质与德摩根律可以推出,
实数轴上包含所有开区间的最小
为什么需要事件域
一个自然的问题是为什么不把所有子集都当作事件。当
集合运算与德摩根律
事件之间的关系用集合运算表达,概率论中常用的对应关系如下表。
| 记号 | 集合含义 | 概率含义 |
|---|---|---|
| 并集 | ||
| 交集,简记 | ||
| 补集 | ||
| 差集 | ||
| 互斥 | ||
| 包含 |
德摩根律(De Morgan's law)把并、交、补三种运算联系起来:
用自然语言表述:至少一个发生这一命题不成立,等价于两个都不发生;两个同时发生这一命题不成立,等价于至少一个不发生。德摩根律在可列情形下同样成立:
计算中经常出现至少一个发生的表述,直接计算需要考虑无穷多种组合,转化为对立事件后只需计算全部不发生,德摩根律是这一转化的依据。
事件组的划分
若事件组
例如,抛一枚硬币时
2.1.2 概率的公理化定义
概率空间与三条公理
概率是定义在事件域上的集函数
- 非负性:对任意
,有 。 - 规范性:
。 - 可列可加性:若
两两互斥,则 。
三元组
公理化处理的价值在于把概率的语义解释与数学运算分离开。无论把
由公理导出的基本性质
以下性质都可以由三条公理推出,它们是后续计算中最常使用的工具。
性质 1(不可能事件):
性质 2(有限可加性):若
性质 3(补事件):
性质 4(单调性):若
性质 5(次可加性,布尔不等式):对任意事件列
次可加性去掉了互斥要求,代价是把等号放宽为不等号。它在证明各种尾概率界时频繁使用,是马尔可夫不等式、联合界(union bound)的直接来源。
性质 6(容斥原理):对任意两个事件,
对三个事件,
一般地,
性质 7(下连续性):若事件列单调递增(
证明:把极限集合分解为互斥的差集序列
古典概型与几何概型
当样本空间有限且各样本点出现的可能性相同时,概率简化为计数之比:
这类模型称为古典概型,计算归结为计数。经典例子是生日问题:
当
import numpy as np
def birthday_same(n: int) -> float:
"""n 个人中至少两人生日相同的概率(按一年 365 天计)"""
days = np.arange(365, 365 - n, -1)
p_all_distinct = np.prod(days / 365)
return 1 - p_all_distinct
for n in [10, 23, 40, 60]:
print(f"n = {n:2d},至少两人同生日的概率 = {birthday_same(n):.4f}")
# n = 10,至少两人同生日的概率 = 0.1169
# n = 23,至少两人同生日的概率 = 0.5073
# n = 40,至少两人同生日的概率 = 0.8912
# n = 60,至少两人同生日的概率 = 0.9941样本空间有限但样本点等可能这一条件不能省略。掷一颗质地不均的骰子时样本空间仍然是
当样本空间是某个区域且样本点按面积均匀分布时,概率等于面积之比,这类模型称为几何概型。例如在单位正方形内随机投点,落在半径为
2.1.3 条件概率与乘法公式
条件概率的定义
在已知事件
这个定义不能凭直觉改写为
条件概率的几何解释是样本空间的收缩。已知
固定
乘法公式
把条件概率的定义式移项,得到乘法公式:
推广到
链式法则把联合概率分解为一系列条件概率的乘积。自然语言模型的基本恒等式就来自这一分解:一个句子的概率被写为逐词条件概率的连乘,
这一分解在数学上没有引入任何近似。语言模型的建模选择在于如何参数化这些条件概率:
import numpy as np
rng = np.random.default_rng(0)
# 掷两颗骰子,模拟 100 万次
n = 1_000_000
d1 = rng.integers(1, 7, size=n)
d2 = rng.integers(1, 7, size=n)
# 事件 A:两骰子点数之和为 8;事件 B:至少有一颗是 6
A = (d1 + d2) == 8
B = (d1 == 6) | (d2 == 6)
print(f"P(A) = {A.mean():.4f}") # 理论值 5/36 ≈ 0.1389
print(f"P(B) = {B.mean():.4f}") # 理论值 11/36 ≈ 0.3056
print(f"P(A ∩ B) = {(A & B).mean():.4f}") # 理论值 1/36 ≈ 0.0278
print(f"P(A | B) = {(A & B).sum() / B.sum():.4f}") # 理论值 1/11 ≈ 0.0909
print(f"P(B | A) = {(A & B).sum() / A.sum():.4f}") # 理论值 1/5 = 0.2运行结果会显示
2.1.4 全概率公式与贝叶斯公式
全概率公式
设
公式的含义是把事件
贝叶斯公式
在同一划分下,若
公式把
| 名称 | 数学形式 | 含义 |
|---|---|---|
| 先验概率 | 观察数据前对 | |
| 似然 | ||
| 证据 | 数据本身的边际概率,起归一化作用 | |
| 后验概率 | 观察数据后对 |
贝叶斯公式的结构可以概括为一句可操作的话:后验正比于先验乘似然。分母
实例:一次风控判定
某电商平台的交易中,欺诈交易占
用
被标记后真正属于欺诈交易的概率约为
def posterior(prior: float, recall: float, false_alarm: float) -> float:
"""给定欺诈率、识别率与误报率,计算被标记后的欺诈概率"""
p_flag_given_fraud = recall
p_flag_given_normal = false_alarm
p_flag = p_flag_given_fraud * prior + p_flag_given_normal * (1 - prior)
return p_flag_given_fraud * prior / p_flag
print(posterior(0.01, 0.99, 0.05)) # 0.1667
print(posterior(0.10, 0.99, 0.05)) # 0.6875,欺诈率提高后后验显著上升
print(posterior(0.01, 0.99, 0.001)) # 0.9078,误报率降低后错误标记大幅减少同一份模型判定在不同先验下给出完全不同的结论。这一现象在风控、司法与异常检测中反复出现,处理方式是明确写出先验,再计算后验,避免把
优势与贝叶斯因子
概率的比值形式在计算与解释上更简洁。事件
把贝叶斯公式用于优势,分母
似然比在统计检验中称为贝叶斯因子(Bayes factor),它度量数据对两个假设的相对支持强度。在风控的例子中,先验优势为
序列更新
贝叶斯公式可以迭代使用:把一次观测后的后验当作下一次观测的先验。若两次判定相互独立(在交易性质已知的条件下),则连续两次被标记为可疑的后验为
两次独立的标记把后验从
2.1.5 事件的独立性
两个事件独立
若事件
则称
独立性的实用价值在于把联合概率的计算化简为乘积。多个相互独立的组件构成系统时,系统的可靠性、失效率与联合分布都可以由各自的边缘概率相乘得到。
多个事件的相互独立
这个条件需要检查全部
import numpy as np
rng = np.random.default_rng(1)
n = 1_000_000
c1 = rng.integers(0, 2, size=n).astype(bool) # 第一枚硬币
c2 = rng.integers(0, 2, size=n).astype(bool) # 第二枚硬币
A = c1
B = c2
C = c1 == c2 # 两枚结果相同
print(f"P(A)P(B) = {A.mean() * B.mean():.4f},P(A∩B) = {(A & B).mean():.4f}")
print(f"P(A)P(C) = {A.mean() * C.mean():.4f},P(A∩C) = {(A & C).mean():.4f}")
print(f"P(A)P(B)P(C) = {A.mean() * B.mean() * C.mean():.4f},P(A∩B∩C) = {(A & B & C).mean():.4f}")
# 前两行两项接近,第三行相差约一倍:两两独立成立,相互独立不成立条件独立
若在事件
则称
条件独立与独立之间没有包含关系。考虑一个共因结构:降雨
朴素贝叶斯分类器建立在一个更强的假设上:给定类别标签后,各个特征相互条件独立。这个假设在文本分类中大致成立,因为给定主题后,各个词的出现主要由主题决定;在特征强相关的场景中假设明显违背,模型仍然常给出可用的分类结果,但概率输出会系统性偏移,这是概率校准问题的来源之一。
互斥与独立的区别
互斥与独立描述的是两种完全不同的关系,容易混淆。互斥指
若
独立同分布
若随机变量序列
i.i.d. 假设的作用在于把联合分布写成单个分布的乘积
最简单的 i.i.d. 序列是伯努利序列:每次试验只有成功与失败两种结果,成功概率恒为
2.1.6 本节小结
从不确定性到可计算的结构
本节建立的概率空间
下一节把这些概念落到具体的数值对象上。事件的概率是一组抽象的数,不便于做运算与建模;随机变量把样本点映射为实数,使得概率可以用分布函数、密度函数与期望来描述,也为后续的极限定理与统计推断提供了统一的载体。
练习题
第 1 题 概念推导
设
参考答案
规范性:由定义
可列可加性:设
由
两端同时除以
第 2 题 计算推理
某工厂的两条生产线生产同一种零件,甲线产量占
参考答案
记
由全概率公式,
由贝叶斯公式,
次品来自甲线的概率约为
若已知该零件来自客户甲的订单,且客户甲只接受甲线产品,则这一信息把先验改为
第 3 题 代码验证
用蒙特卡洛模拟验证伯恩斯坦反例:抛两枚均匀硬币,事件
参考答案
import numpy as np
rng = np.random.default_rng(42)
n = 2_000_000
c1 = rng.integers(0, 2, size=n).astype(bool)
c2 = rng.integers(0, 2, size=n).astype(bool)
A, B, C = c1, c2, c1 == c2
D = ~c1
# 两两独立
pairs = [("AB", A, B), ("AC", A, C), ("BC", B, C)]
for name, X, Y in pairs:
print(f"P({name}) = {(X & Y).mean():.4f},P(X)P(Y) = {X.mean() * Y.mean():.4f}")
# 三者同时发生
print(f"P(ABC) = {(A & B & C).mean():.4f},P(A)P(B)P(C) = {A.mean() * B.mean() * C.mean():.4f}")
# D 与 A 的关系
print(f"P(A ∩ D) = {(A & D).mean():.4f},P(A)P(D) = {A.mean() * D.mean():.4f}")三个两两独立对的输出都在
第 4 题 综合应用
某垃圾邮件过滤器使用朴素贝叶斯假设:在给定邮件类别(垃圾或正常)的条件下,各个词是否出现相互独立。设垃圾邮件占
参考答案
记
条件独立假设给出联合似然:
由贝叶斯公式,
后验概率约为
条件独立假设的作用是把两个词同时出现的联合似然写成各自似然的乘积,避免了估计特征组合的联合分布。若不做这一假设,需要估计
常见错误
错误 1 · 把
原因:两个条件概率在数值上往往相差很大,只是方向不同,书写时容易颠倒。风控例子中
解决:写出条件概率时明确竖线两侧的角色,竖线右侧是已知信息,左侧是要求的目标。需要反向的条件概率时用贝叶斯公式显式计算,不凭直觉替换。
错误 2 · 用两两独立代替相互独立
原因:多个事件的独立性定义要求检验全部子集组合,只检查两两乘积关系会遗漏高阶约束。伯恩斯坦反例中三个事件两两独立,但三者同时发生的概率是乘积的两倍。
解决:需要相互独立时按定义检查全部
错误 3 · 混淆互斥与独立
原因:两个概念都描述事件之间的关系,字面上又都与关联有关,容易混用。互斥是集合层面的关系,独立是概率层面的关系,两者互不相容。
解决:记住判别式。互斥看
错误 4 · 忽略基础比率直接解释模型判定
原因:模型的识别率与误报率只描述条件概率
解决:计算后验时显式写出先验,用贝叶斯公式或优势形式把先验优势与似然比相乘。调整策略应基于后验,例如用第二次独立判定提高似然比,把后验推高到可决策的水平。