机器学习数学推导(三)概率论与统计推断
Chen Kai BOSS

1912 年, Fisher 提出了最大似然估计(MLE)的思想,彻底改变了统计学。他的核心洞察是:参数的最佳估计应该使观测数据出现的概率最大。这个看似简单的想法,背后隐藏着深刻的数学结构——从概率空间的公理化定义,到统计推断的渐近性质,再到贝叶斯学派与频率学派的哲学分歧。

机器学习的核心是不确定性建模。线性回归假设误差服从高斯分布;逻辑回归假设标签服从伯努利分布;隐马尔可夫模型假设状态转移服从马尔可夫链。所有这些模型都建立在概率论的坚实基础上。本章从 Kolmogorov 公理出发,严格推导统计推断的数学理论。

概率空间与测度论基础

概率空间的公理化定义

定义 1(概率空间):概率空间是一个三元组, 其中:

  1. 样本空间 :所有可能结果的集合
  2. 事件域 的子集族,满足-代数性质:
    • ,则(对补集封闭)
    • ,则(对可数并封闭)
  3. 概率测度 ,满足 Kolmogorov 公理:
    • 非负性
    • 规范性
    • 可数可加性:若互不相交,则

为什么需要-代数?

在无限样本空间中,不是所有子集都可测。例如,实数区间上存在不可测集(Vitali 集)。-代数确保我们只考虑"良好"的事件,使概率测度有良好的数学性质。

定理 1(概率的基本性质)

  1. ,则 4.(容斥原理)

证明性质 1

由可数可加性,令,则:

此式成立当且仅当。证毕。

条件概率与独立性

定义 2(条件概率):设, 事件在事件发生条件下的条件概率定义为:

定理 2(乘法公式)

定理 3(全概率公式):设的一个分割(即互不相交且),则对任意事件

证明:

由于互不相交,故也互不相交。由可数可加性:

证毕。

定理 4(Bayes 定理):设, 则:

其中第二个等式使用了全概率公式。

Bayes 定理的意义:

-: 先验概率(prior),在观测数据前对的信念 -: 似然(likelihood),在发生条件下观测到的概率 -: 后验概率(posterior),在观测到后对的更新信念 -: 证据(evidence),数据的边缘概率

Bayes 定理是贝叶斯统计的核心,它提供了从数据更新信念的数学框架。

定义 3(独立性):事件独立,如果:

等价地,若, 则

定义 4(条件独立):事件在事件条件下独立,记作, 如果:

注意:独立不蕴含条件独立,条件独立也不蕴含独立。

反例:考虑抛两枚硬币:

-: 第一枚是正面 -: 第二枚是正面 -: 恰有一枚正面

显然独立。但在条件下,不独立:若知道恰有一枚正面且第一枚是正面,则第二枚必定是反面。

随机变量与分布

定义 5(随机变量):随机变量是从样本空间到实数的可测函数:

可测性要求:对任意 Borel 集

定义 6(累积分布函数,CDF):随机变量的 CDF 定义为:

CDF 的性质:

  1. 单调非降:
  2. 右连续:
  3. 极限性质:,

定义 7(概率密度函数,PDF):若存在非负函数使得:

则称的概率密度函数。此时是连续型随机变量。

定义 8(概率质量函数,PMF):对离散型随机变量, 其 PMF 定义为:

定义 9(联合分布):随机变量的联合 CDF 定义为:

联合 PDF(若存在):

定义 10(边缘分布):

定义 11(条件分布):

定义 12(随机变量的独立性):随机变量独立,如果:

期望、方差与特征函数

期望的定义与性质

定义 13(期望):随机变量的期望定义为:

  • 离散型: - 连续型:

定理 5(期望的线性性):

对任意常数和随机变量(即使不独立)。

证明(连续型):

证毕。

定理 6(全期望公式):

证明

证毕。

方差与协方差

定义 14(方差)

定理 7(方差的性质)

  1. 独立,则

证明性质 2

独立,则,最后一项为 0。证毕。

定义 15(协方差)

性质

  1. (对称性)
  2. (双线性)
  3. 独立,则(但逆命题不成立)

定义 16(相关系数)

定理 8(Cauchy-Schwarz 不等式)

证明:考虑任意

这是关于的二次函数,恒非负,故判别式

证毕。

特征函数

定义 17(特征函数):随机变量的特征函数定义为:

特征函数的性质

  1. (共轭)
  2. ,则
  3. 独立,则

定理 9(特征函数唯一性):分布由特征函数唯一决定。即若,则同分布。

定理 10(矩生成性质):若,则:

证明

阶导数:

证毕。

常见概率分布

离散分布

1. 伯努利分布(Bernoulli)

定义:, 若:

期望与方差:

应用:二元分类、逻辑回归的输出分布。

2. 二项分布(Binomial)

定义:表示次独立伯努利试验中成功的次数:

期望与方差:

推导期望:

, 其中独立同分布。由期望的线性性:

推导方差:

由方差的独立可加性:

3. 泊松分布(Poisson)

定义:, 若:

期望与方差:

推导期望:

泊松定理:当,且固定时,

证明

。证毕。

应用:稀有事件计数(如网站访问次数、放射性衰变)。

连续分布

1. 均匀分布(Uniform)

定义:, 若:

期望与方差:

2. 指数分布(Exponential)

定义:, 若:

期望与方差:

无记忆性:

证明:

证毕。

应用:等待时间、寿命分布、泊松过程的事件间隔。

3. 高斯分布(Gaussian/Normal)

定义:, 若:

期望与方差:

标准正态分布,CDF 记作

标准化变换:若,则

多元高斯分布,其中正定:

性质

  1. 线性变换的不变性:若,则
  2. 边缘分布是高斯:若联合高斯,则的边缘分布也是高斯
  3. 条件分布是高斯:若联合高斯,则也是高斯
  4. 不相关蕴含独立:对高斯随机变量,

为什么高斯分布如此重要?

  1. 中心极限定理:独立同分布随机变量之和的分布趋向高斯
  2. 最大熵原理:在给定均值和方差的所有分布中,高斯分布熵最大
  3. 解析性好:高斯分布的卷积、线性变换仍是高斯
  4. 广泛出现:自然界中许多现象近似高斯(如测量误差)

4. Gamma 分布

定义,若:

其中是 Gamma 函数。

期望与方差:

特例:

  • = 1 - = n/2, = 1/2

5. Beta 分布

定义:, 若:

期望与方差:

应用:贝叶斯推断中的共轭先验(伯努利/二项分布的先验)。

分布之间的关系

定理 11(Gamma 函数与 Beta 函数的关系):

定理 12(卡方分布):若独立,则:

定理 13(t 分布):若,且,则:

其中是自由度为的 t 分布,PDF 为:

定理 14(F 分布):若,, 且, 则:

下图展示了机器学习中最常用的 6 种概率分布族:高斯分布、 Beta 分布、伽马分布、二项分布、泊松分布和卡方分布。这些分布构成了概率建模的基础工具箱:

Common Probability Distributions

下图更详细地展示了各分布在不同参数下的形状变化——理解参数如何影响分布形态是选择合适模型的关键:

Detailed Distribution Shapes

下图展示了概率分布之间的数学关系网络——这些关系揭示了分布论中深层的结构联系:

Distribution Relationships

极限定理

大数定律

定义 18(依概率收敛):随机变量序列 {X_n}XX n X{n } P(|X_n - X| > ) = 0, > 0 $$

定理 15(Markov 不等式):若, 则对任意:

证明:

证毕。

定理 16(Chebyshev 不等式):若,则对任意

证明:应用 Markov 不等式于:

证毕。

定理 17(弱大数定律,WLLN):设独立同分布,且$E [X_i] = , (X_i) = ^2 < , 则:$

证明:

由 Chebyshev 不等式:

证毕。

定理 18(强大数定律,SLLN):在 WLLN 的条件下:

几乎必然收敛到,记作

几乎必然收敛 vs 依概率收敛:

  • 几乎必然收敛(a.s.):样本轨道收敛
  • 依概率收敛(in probability):概率质量集中

几乎必然收敛强于依概率收敛。

中心极限定理

定理 19(中心极限定理,CLT):设独立同分布,且。令:

则:

其中表示依分布收敛。

证明思路(利用特征函数):

标准化,则

的特征函数:

展开(Taylor 展开):

因此:

正是的特征函数。由 Lévy 连续性定理,。证毕。

CLT 的意义

  1. 解释了为什么正态分布如此普遍:许多现象是大量小随机效应的叠加
  2. 为统计推断提供理论基础:样本均值的分布近似正态
  3. 给出近似误差界:

下面的动画直观展示了中心极限定理的魔力——即使原始分布是高度偏斜的指数分布,随着样本量的增大,标准化后的样本均值分布也会逐渐趋近标准正态分布:

CLT Convergence Animation

多元中心极限定理:设独立同分布,且。则:

参数估计

点估计

定义 19(估计量):设是来自分布的样本,是未知参数。估计量是样本的函数。

定义 20(无偏性):若$E [_n] = , 则称 _n$的无偏估计。

例子

  1. 样本均值是总体均值的无偏估计
  2. 样本方差是总体方差的无偏估计

为什么样本方差除以而不是

证明样本方差的无偏性

关键步骤:

若除以,得到的是有偏估计:

定义 21(相合性):若,则称的相合估计。

定义 22(均方误差,MSE)

其中 (_n) = E[_n] -

偏差-方差分解:

  • 偏差(bias):估计的系统误差
  • 方差(variance):估计的随机性
  • 两者的权衡是统计学习的核心

最大似然估计(MLE)

定义 23(似然函数):给定样本,似然函数定义为:

对数似然函数:

定义 24(最大似然估计):MLE 定义为:

例子 1:伯努利分布的 MLE

。似然函数:

对数似然:

求导:

解得:

例子 2:高斯分布的 MLE

。对数似然:

求偏导:

求偏导:

解得:

注意:这是有偏估计!无偏估计应除以

定理 20(MLE 的渐近性质):在正则条件下,MLE 具有以下性质:

  1. 相合性(真实参数)
  2. 渐近正态性
  3. 渐近有效性:在所有相合估计中,MLE 的渐近方差达到 Cramér-Rao 下界

其中是 Fisher 信息矩阵:

贝叶斯估计

贝叶斯范式:将参数视为随机变量,赋予先验分布

后验分布:由 Bayes 定理:

定义 25(后验均值估计)

定义 26(最大后验估计,MAP)

例子:Beta-Bernoulli 共轭

先验:

似然:

后验:

这是

后验均值:

解释

  • 先验参数可视为"伪观测":先验认为有个成功,个失败
  • 后验是先验与数据的结合:个成功,个失败
  • ,后验均值(MLE)

贝叶斯 vs 频率:

特性 频率学派 贝叶斯学派
参数 固定但未知 随机变量
推断基础 重复抽样 条件概率
先验知识 不使用 显式建模
不确定性 置信区间 可信区间
计算 通常较简单 可能需要 MCMC

下图对比了最大似然估计( MLE)与最大后验估计( MAP)的差异:左图展示 MLE 仅依赖似然函数寻找使数据概率最大的参数;右图展示 MAP 如何结合先验知识与似然函数得到后验分布,在小样本情况下 MAP 通常更稳定:

MLE vs MAP Comparison

下图进一步展示了贝叶斯估计的核心流程:左图展示似然函数,中图展示先验分布如何与似然函数结合产生后验分布,右图展示随着数据量增大后验分布逐渐集中到真实参数值(后验一致性):

MLE vs Bayesian Comparison

假设检验与置信区间

假设检验

定义 27(统计假设):关于总体分布的陈述。

  • 原假设: 默认假设(通常是"无效应")
  • 备择假设: 研究者希望证明的假设

定义 28(检验统计量):基于样本构造的随机变量

定义 29(拒绝域):若, 则拒绝

两类错误:

真实情况 接受 拒绝
第 I 类错误(
第 II 类错误( ✓(检验力

定义 30(显著性水平),通常取

定义 31(p 值):在为真的条件下,观测到当前或更极端数据的概率:

决策规则:若 p 值,拒绝

例子:单样本 t 检验

假设:vs检验统计量:

下,

拒绝域:,其中是 t 分布的分位数。

下图直观展示了假设检验的核心概念:左图展示了第一类错误(拒绝真实的)和第二类错误(未拒绝错误的)之间的权衡关系;右图展示了 p 值的几何意义——它是在原假设为真时,观测到当前或更极端检验统计量的概率:

Hypothesis Testing

置信区间

定义 32(置信区间):随机区间称为置信区间,如果:

注意:这是关于随机区间的概率陈述,而非参数的概率陈述(频率观点)。

例子:均值的置信区间

已知。由 CLT:

因此:

变形得:

置信区间。

未知,用代替,用 t 分布代替正态:

代码实现:分布、估计与检验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
from scipy.special import gamma as gamma_func
import seaborn as sns

np.random.seed(42)
sns.set_style("whitegrid")

def demonstrate_distributions():
"""
演示常见概率分布及其关系
"""
print("="*60)
print("1. 概率分布及其关系")
print("="*60)

fig, axes = plt.subplots(2, 3, figsize=(15, 10))

# 1. 伯努利与二项分布
n, p = 20, 0.3
x_binomial = np.arange(0, n+1)
pmf_binomial = stats.binom.pmf(x_binomial, n, p)

axes[0, 0].bar(x_binomial, pmf_binomial, alpha=0.7, color='steelblue')
axes[0, 0].set_title(f'Binomial({n}, {p})')
axes[0, 0].set_xlabel('k')
axes[0, 0].set_ylabel('P(X=k)')
axes[0, 0].axvline(n*p, color='red', linestyle='--', label=f'Mean={n*p}')
axes[0, 0].legend()

# 2. 泊松分布
lam = 5
x_poisson = np.arange(0, 20)
pmf_poisson = stats.poisson.pmf(x_poisson, lam)

axes[0, 1].bar(x_poisson, pmf_poisson, alpha=0.7, color='coral')
axes[0, 1].set_title(f'Poisson({lam})')
axes[0, 1].set_xlabel('k')
axes[0, 1].set_ylabel('P(X=k)')
axes[0, 1].axvline(lam, color='red', linestyle='--', label=f'Mean={lam}')
axes[0, 1].legend()

# 3. 高斯分布
x_norm = np.linspace(-5, 5, 1000)
pdf_norm = stats.norm.pdf(x_norm, 0, 1)

axes[0, 2].plot(x_norm, pdf_norm, 'b-', lw=2, label='N(0,1)')
axes[0, 2].fill_between(x_norm, pdf_norm, alpha=0.3)
axes[0, 2].set_title('Standard Normal Distribution')
axes[0, 2].set_xlabel('x')
axes[0, 2].set_ylabel('f(x)')
axes[0, 2].legend()

# 4. 指数分布
x_exp = np.linspace(0, 10, 1000)
lambdas = [0.5, 1, 2]
for lam in lambdas:
pdf_exp = stats.expon.pdf(x_exp, scale=1/lam)
axes[1, 0].plot(x_exp, pdf_exp, lw=2, label=f'λ={lam}')

axes[1, 0].set_title('Exponential Distribution')
axes[1, 0].set_xlabel('x')
axes[1, 0].set_ylabel('f(x)')
axes[1, 0].legend()

# 5. Gamma 分布
x_gamma = np.linspace(0, 20, 1000)
alphas = [1, 2, 5]
beta = 1
for alpha in alphas:
pdf_gamma = stats.gamma.pdf(x_gamma, alpha, scale=1/beta)
axes[1, 1].plot(x_gamma, pdf_gamma, lw=2, label=f'α={alpha}')

axes[1, 1].set_title(f'Gamma Distribution (β={beta})')
axes[1, 1].set_xlabel('x')
axes[1, 1].set_ylabel('f(x)')
axes[1, 1].legend()

# 6. Beta 分布
x_beta = np.linspace(0, 1, 1000)
params = [(0.5, 0.5), (2, 2), (2, 5)]
for alpha, beta in params:
pdf_beta = stats.beta.pdf(x_beta, alpha, beta)
axes[1, 2].plot(x_beta, pdf_beta, lw=2, label=f'α={alpha}, β={beta}')

axes[1, 2].set_title('Beta Distribution')
axes[1, 2].set_xlabel('x')
axes[1, 2].set_ylabel('f(x)')
axes[1, 2].legend()

plt.tight_layout()
plt.savefig('probability_distributions.png', dpi=150)
plt.close()

print("图表已保存: probability_distributions.png\n")

def demonstrate_clt():
"""
演示中心极限定理
"""
print("="*60)
print("2. 中心极限定理演示")
print("="*60)

# 从不同分布抽样
distributions = {
'Uniform(0, 1)': lambda n: np.random.uniform(0, 1, n),
'Exponential(1)': lambda n: np.random.exponential(1, n),
'Bernoulli(0.3)': lambda n: np.random.binomial(1, 0.3, n),
'Poisson(5)': lambda n: np.random.poisson(5, n)
}

sample_sizes = [1, 5, 30, 100]
num_samples = 10000

fig, axes = plt.subplots(4, 4, figsize=(16, 16))

for i, (dist_name, dist_func) in enumerate(distributions.items()):
for j, n in enumerate(sample_sizes):
# 生成样本均值
sample_means = []
for _ in range(num_samples):
sample = dist_func(n)
sample_means.append(np.mean(sample))

sample_means = np.array(sample_means)

# 标准化
mu_true = np.mean(dist_func(100000)) # 近似真实均值
sigma_true = np.std(dist_func(100000))
z_scores = (sample_means - mu_true) / (sigma_true / np.sqrt(n))

# 绘制直方图
axes[i, j].hist(z_scores, bins=50, density=True, alpha=0.7,
color='skyblue', edgecolor='black')

# 叠加标准正态分布
x = np.linspace(-4, 4, 100)
axes[i, j].plot(x, stats.norm.pdf(x, 0, 1), 'r-', lw=2,
label='N(0,1)')

axes[i, j].set_title(f'{dist_name}, n={n}')
axes[i, j].set_xlim(-4, 4)
if j == 0:
axes[i, j].set_ylabel('Density')
if i == 3:
axes[i, j].set_xlabel('Standardized Sample Mean')
axes[i, j].legend(fontsize=8)

plt.tight_layout()
plt.savefig('clt_demonstration.png', dpi=150)
plt.close()

print("图表已保存: clt_demonstration.png")
print("\n 观察:")
print("- 随着样本量 n 增加,样本均值的分布越来越接近正态分布")
print("- 即使原始分布高度非正态(如伯努利),样本均值也会趋向正态\n")

def demonstrate_mle():
"""
演示最大似然估计
"""
print("="*60)
print("3. 最大似然估计(MLE)")
print("="*60)

# 生成数据:混合高斯分布
np.random.seed(42)
n = 200
true_mu = 5.0
true_sigma = 2.0
data = np.random.normal(true_mu, true_sigma, n)

# MLE 估计
mu_mle = np.mean(data)
sigma_mle = np.sqrt(np.mean((data - mu_mle)**2)) # 有偏
sigma_unbiased = np.sqrt(np.sum((data - mu_mle)**2) / (n-1)) # 无偏

print(f"真实参数: μ={true_mu}, σ={true_sigma}")
print(f"MLE 估计: μ_hat={mu_mle:.4f}, σ_hat={sigma_mle:.4f}")
print(f"无偏估计: σ_hat={sigma_unbiased:.4f}\n")

# 可视化似然函数
mu_range = np.linspace(4, 6, 100)
sigma_range = np.linspace(1.5, 2.5, 100)
MU, SIGMA = np.meshgrid(mu_range, sigma_range)

# 计算对数似然
log_likelihood = np.zeros_like(MU)
for i in range(MU.shape[0]):
for j in range(MU.shape[1]):
mu, sigma = MU[i, j], SIGMA[i, j]
ll = -n/2 * np.log(2*np.pi*sigma**2) - \
np.sum((data - mu)**2) / (2*sigma**2)
log_likelihood[i, j] = ll

# 绘图
fig = plt.figure(figsize=(15, 5))

# 子图 1:对数似然等高线
ax1 = fig.add_subplot(131)
contour = ax1.contour(MU, SIGMA, log_likelihood, levels=20, cmap='viridis')
ax1.plot(mu_mle, sigma_mle, 'r*', markersize=15, label='MLE')
ax1.plot(true_mu, true_sigma, 'ko', markersize=10, label='True')
ax1.set_xlabel('μ')
ax1.set_ylabel('σ')
ax1.set_title('Log-Likelihood Contour')
ax1.legend()
plt.colorbar(contour, ax=ax1)

# 子图 2:数据直方图与拟合分布
ax2 = fig.add_subplot(132)
ax2.hist(data, bins=30, density=True, alpha=0.7, color='skyblue',
edgecolor='black', label='Data')
x = np.linspace(data.min(), data.max(), 100)
ax2.plot(x, stats.norm.pdf(x, mu_mle, sigma_mle), 'r-', lw=2,
label=f'MLE: N({mu_mle:.2f}, {sigma_mle:.2f}²)')
ax2.plot(x, stats.norm.pdf(x, true_mu, true_sigma), 'k--', lw=2,
label=f'True: N({true_mu}, {true_sigma}²)')
ax2.set_xlabel('x')
ax2.set_ylabel('Density')
ax2.set_title('Data Histogram & Fitted Distribution')
ax2.legend()

# 子图 3:估计的收敛性
ax3 = fig.add_subplot(133)
sample_sizes = range(10, n+1, 5)
mu_estimates = []
sigma_estimates = []

for k in sample_sizes:
subsample = data[:k]
mu_est = np.mean(subsample)
sigma_est = np.sqrt(np.mean((subsample - mu_est)**2))
mu_estimates.append(mu_est)
sigma_estimates.append(sigma_est)

ax3.plot(sample_sizes, mu_estimates, 'b-', label='μ estimate')
ax3.axhline(true_mu, color='b', linestyle='--', label='True μ')
ax3_twin = ax3.twinx()
ax3_twin.plot(sample_sizes, sigma_estimates, 'r-', label='σ estimate')
ax3_twin.axhline(true_sigma, color='r', linestyle='--', label='True σ')

ax3.set_xlabel('Sample Size')
ax3.set_ylabel('μ estimate', color='b')
ax3_twin.set_ylabel('σ estimate', color='r')
ax3.set_title('Convergence of MLE')
ax3.legend(loc='upper left')
ax3_twin.legend(loc='upper right')

plt.tight_layout()
plt.savefig('mle_demonstration.png', dpi=150)
plt.close()

print("图表已保存: mle_demonstration.png\n")

def demonstrate_bayesian():
"""
演示贝叶斯估计:Beta-Bernoulli 共轭
"""
print("="*60)
print("4. 贝叶斯估计:Beta-Bernoulli 共轭")
print("="*60)

# 实验设置
true_p = 0.6
n_trials = [0, 1, 5, 20, 100]
alpha_prior, beta_prior = 2, 2 # 先验:Beta(2, 2)

fig, axes = plt.subplots(2, 3, figsize=(15, 10))
axes = axes.flatten()

# 先验分布
theta = np.linspace(0, 1, 1000)
prior_pdf = stats.beta.pdf(theta, alpha_prior, beta_prior)

axes[0].plot(theta, prior_pdf, 'k-', lw=2, label='Prior')
axes[0].fill_between(theta, prior_pdf, alpha=0.3, color='gray')
axes[0].set_title('Prior: Beta(2, 2)')
axes[0].set_xlabel('θ')
axes[0].set_ylabel('Density')
axes[0].legend()
axes[0].axvline(true_p, color='red', linestyle='--', label='True p')

# 不同数据量下的后验
for i, n in enumerate(n_trials):
if i == 0:
continue # 跳过 n=0(已经是先验)

# 模拟数据
data = np.random.binomial(1, true_p, n)
n_success = np.sum(data)
n_failure = n - n_success

# 后验:Beta(alpha + n_success, beta + n_failure)
alpha_post = alpha_prior + n_success
beta_post = beta_prior + n_failure
posterior_pdf = stats.beta.pdf(theta, alpha_post, beta_post)

# MLE
p_mle = n_success / n if n > 0 else 0.5

# 贝叶斯后验均值
p_bayes = alpha_post / (alpha_post + beta_post)

axes[i].plot(theta, prior_pdf, 'k--', lw=1, alpha=0.5, label='Prior')
axes[i].plot(theta, posterior_pdf, 'b-', lw=2, label='Posterior')
axes[i].fill_between(theta, posterior_pdf, alpha=0.3, color='skyblue')
axes[i].axvline(true_p, color='red', linestyle='--', label='True p')
axes[i].axvline(p_mle, color='green', linestyle=':', label=f'MLE={p_mle:.2f}')
axes[i].axvline(p_bayes, color='blue', linestyle='-.', label=f'Bayes={p_bayes:.2f}')

axes[i].set_title(f'After {n} trials ({n_success} successes)')
axes[i].set_xlabel('θ')
axes[i].set_ylabel('Density')
axes[i].legend(fontsize=8)

plt.tight_layout()
plt.savefig('bayesian_estimation.png', dpi=150)
plt.close()

print("图表已保存: bayesian_estimation.png")
print("\n 观察:")
print("- 先验:Beta(2, 2)是对称的,在 0.5 处达到峰值")
print("- 随数据增加,后验逐渐集中到真实参数附近")
print("- 贝叶斯估计(后验均值)介于先验均值和 MLE 之间")
print("- 数据越多,贝叶斯估计越接近 MLE\n")

def demonstrate_hypothesis_testing():
"""
演示假设检验
"""
print("="*60)
print("5. 假设检验")
print("="*60)

# 单样本 t 检验
np.random.seed(42)
n = 30
true_mu = 5.0
mu_0 = 4.5 # 原假设
sigma = 2.0
data = np.random.normal(true_mu, sigma, n)

# 计算检验统计量
x_bar = np.mean(data)
s = np.std(data, ddof=1)
t_stat = (x_bar - mu_0) / (s / np.sqrt(n))

# p 值
df = n - 1
p_value = 2 * (1 - stats.t.cdf(abs(t_stat), df))

# 置信区间
alpha = 0.05
t_critical = stats.t.ppf(1 - alpha/2, df)
ci_lower = x_bar - t_critical * s / np.sqrt(n)
ci_upper = x_bar + t_critical * s / np.sqrt(n)

print(f"样本均值: {x_bar:.4f}")
print(f"样本标准差: {s:.4f}")
print(f"检验统计量 t: {t_stat:.4f}")
print(f"自由度: {df}")
print(f"p 值: {p_value:.4f}")
print(f"95%置信区间: [{ci_lower:.4f}, {ci_upper:.4f}]")
print(f"\n 决策: {'拒绝' if p_value < alpha else '不拒绝'}原假设 H0: μ = {mu_0}\n")

# 可视化
fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# 子图 1:t 分布与检验统计量
t_range = np.linspace(-4, 4, 1000)
pdf_t = stats.t.pdf(t_range, df)

axes[0].plot(t_range, pdf_t, 'b-', lw=2, label=f't({df})')
axes[0].fill_between(t_range, pdf_t, where=(t_range < -t_critical),
alpha=0.3, color='red', label='Rejection Region')
axes[0].fill_between(t_range, pdf_t, where=(t_range > t_critical),
alpha=0.3, color='red')
axes[0].axvline(t_stat, color='green', linestyle='--', lw=2,
label=f'Observed t={t_stat:.2f}')
axes[0].axvline(-t_critical, color='red', linestyle=':', lw=1)
axes[0].axvline(t_critical, color='red', linestyle=':', lw=1,
label=f'Critical Value=±{t_critical:.2f}')

axes[0].set_xlabel('t')
axes[0].set_ylabel('Density')
axes[0].set_title('t-Test: Distribution and Test Statistic')
axes[0].legend()
axes[0].grid(True, alpha=0.3)

# 子图 2:置信区间
sample_means = []
ci_lowers = []
ci_uppers = []
num_experiments = 50

for _ in range(num_experiments):
sample = np.random.normal(true_mu, sigma, n)
mean = np.mean(sample)
std = np.std(sample, ddof=1)
ci_l = mean - t_critical * std / np.sqrt(n)
ci_u = mean + t_critical * std / np.sqrt(n)

sample_means.append(mean)
ci_lowers.append(ci_l)
ci_uppers.append(ci_u)

# 检查是否包含真实均值
contains_true = [(ci_l <= true_mu <= ci_u) for ci_l, ci_u in
zip(ci_lowers, ci_uppers)]

for i in range(num_experiments):
color = 'blue' if contains_true[i] else 'red'
axes[1].plot([i, i], [ci_lowers[i], ci_uppers[i]], color=color,
lw=1, alpha=0.7)
axes[1].plot(i, sample_means[i], 'o', color=color, markersize=3)

axes[1].axhline(true_mu, color='green', linestyle='--', lw=2,
label=f'True μ={true_mu}')
axes[1].set_xlabel('Experiment')
axes[1].set_ylabel('95% Confidence Interval')
axes[1].set_title(f'95% CIs ({sum(contains_true)}/{num_experiments} contain true μ)')
axes[1].legend()
axes[1].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('hypothesis_testing.png', dpi=150)
plt.close()

print("图表已保存: hypothesis_testing.png\n")

if __name__ == "__main__":
print("╔" + "="*58 + "╗")
print("║" + " "*10 + "概率论与统计推断实验" + " "*24 + "║")
print("╚" + "="*58 + "╝")
print()

demonstrate_distributions()
demonstrate_clt()
demonstrate_mle()
demonstrate_bayesian()
demonstrate_hypothesis_testing()

print("="*60)
print("所有实验完成!")
print("="*60)

代码解读:

  1. 概率分布演示:可视化常见分布的 PDF/PMF,展示其形状特征
  2. 中心极限定理:从不同分布抽样,展示样本均值的正态化过程
  3. 最大似然估计:计算高斯分布的 MLE,可视化似然函数,展示估计的收敛性
  4. 贝叶斯估计:演示 Beta-Bernoulli 共轭,展示先验、数据和后验的关系
  5. 假设检验:单样本 t 检验,计算 p 值和置信区间,可视化拒绝域

❓ Q&A:概率论常见疑问

Q1:为什么需要- 代数?不能直接对所有子集定义概率吗?

Vitali 集的反例:

在区间上,定义等价关系:(有理数)。每个等价类包含可数个元素。由选择公理,可以从每个等价类中选一个代表,构成集合(Vitali 集)。

矛盾证明不可测

枚举。定义

性质:

  1. 互不相交(否则存在使,即,矛盾于的构造)
  2. 。若可测,则可测且(平移不变性)。由可数可加性:

  • , 右边, 矛盾
  • , 右边, 矛盾

因此不可测。- 代数正是为了排除这类病态集合。


Q2:独立与不相关有什么区别?为什么高斯随机变量中二者等价?

独立 vs 不相关:

概念 定义 蕴含关系
独立 独立不相关
不相关 不相关独立

反例(不相关但不独立):

。则:

  • (奇函数积分)
  • 因此,但完全由决定,显然不独立!

为什么高斯随机变量中二者等价?

定理:若联合高斯,则

证明思路:

联合高斯的 PDF:

其中

时:

。证毕。

关键:高斯分布的特殊性在于,其 PDF 可以完全因式分解为边缘 PDF 的乘积,当且仅当协方差为 0 。


Q3:为什么样本方差要除以而不是

自由度的直观解释

样本方差中,偏差满足约束:

这意味着给定个偏差后,第个偏差被唯一确定。因此只有个"自由"的信息。

数学证明

展开:

取期望:

因此:


Q4:最大似然估计(MLE)为什么是"好"的估计?

MLE 的三大渐近性质:

  1. 相合性

  2. 渐近正态性

  3. 渐近有效性:MLE 达到 Cram é r-Rao 下界(在所有无偏估计中方差最小)

Cramér-Rao 下界

定理:设的无偏估计,则:

其中是单个样本的 Fisher 信息:

证明思路

由无偏性:,对求导:

定义(得分函数)。注意

由 Cauchy-Schwarz 不等式:

整理得:。对个独立样本,。证毕。

MLE 达到下界

在正则条件下,MLE 的渐近方差正好是 CR 下界,因此 MLE 是渐近有效的。


Q5:贝叶斯估计与 MLE 有什么区别?何时更优?

哲学差异:

特性 频率派(MLE) 贝叶斯派
参数 固定但未知 随机变量
数据 随机 观测到后为固定值
推断
不确定性 估计的抽样分布 参数的后验分布

MAP vs MLE

MAP = MLE + 先验正则化。

例子:Ridge 回归 vs MLE

线性回归

MLE:

贝叶斯(高斯先验):

这正是 Ridge 回归!正则化参数反映了先验强度。

何时贝叶斯更优?

  1. 小样本:先验提供额外信息,减少过拟合
  2. 高维问题:正则化防止奇异性
  3. 不确定性量化:后验分布提供完整不确定性描述,而非点估计
  4. 序贯更新:易于增量学习(后验→下次先验)

何时 MLE 更优?

  1. 大样本:数据主导,先验影响消失
  2. 计算简单:无需积分后验
  3. 客观性:无先验主观性争议

Q6:p 值到底是什么?为什么不能说"参数有 95%概率落在置信区间"?

p 值的正确解释:

p 值 = 在原假设为真的条件下,观测到当前或更极端数据的概率。

常见误解:

❌ "p 值是为真的概率":这是对的误读

✅ 正确:p 值是,即在原假设为真时观测到当前数据的概率

这两者根本不同!由 Bayes 定理:

p 值只是分子的一部分,不涉及

置信区间的正确解释:

95%置信区间的含义:

✅ 如果我们重复实验无数次,95%的区间会包含真实参数。

❌ 参数有 95%概率落在此区间。

为什么第二种说法错误?

频率观点下,参数是固定的(虽然未知)。一旦构造了区间,要么在其中(概率 1),要么不在(概率 0)。

图示:

1
2
3
4
5
6
重复实验 100 次,构造 100 个 95%置信区间:
[----] 约 95 个区间包含真实参数θ
[------]
[--] 约 5 个区间不包含θ
[----]
...

每个区间要么包含(1)要么不包含(0),但我们不知道是哪种情况。"95%"是关于重复抽样程序的频率陈述,而非单次区间的概率陈述。

贝叶斯可信区间:

贝叶斯派可以说"参数有 95%概率落在可信区间",因为他们将视为随机变量,可信区间是后验分布的分位数。


Q7:中心极限定理为什么如此重要?有什么局限性?

CLT 的重要性:

  1. 普适性:适用于几乎任何分布(只需有限方差)
  2. 解释正态分布无处不在:许多现象是大量小随机效应的叠加
  3. 统计推断的基础:
    • 样本均值的置信区间
    • t 检验、 ANOVA 等依赖正态近似
    • 回归系数的渐近分布

应用例子:

  • 测量误差:多个独立误差源的叠加
  • 生物特征:身高、智商等受多基因影响
  • 金融:资产收益是多因素综合作用

CLT 的局限性:

  1. 收敛速度
    • 对高度偏斜分布,需要很大的才能近似正态
    • Berry-Esseen 定理给出误差界:,其中
  2. 厚尾分布
    • (如 Cauchy 分布),CLT 不适用
    • 此时样本均值甚至不收敛到任何分布!
  3. 相依性:
    • CLT 假设独立同分布
    • 对时间序列等相依数据,需要修改版本(如 Lyapunov CLT)
  4. 多峰分布:
    • 若混合多个相距很远的分布,样本均值可能呈现多峰,而非正态

替代方案:

  • Bootstrap:无需正态假设,用重抽样估计抽样分布
  • Permutation test:精确检验,无需渐近近似
  • Robust statistics:对异常值不敏感的估计(如中位数)

Q8:为什么高斯分布如此特殊?

高斯分布的独特性质

  1. 再生性独立,则
  2. 线性变换不变性,则
  3. 边缘与条件分布均为高斯

则: -(边缘) -(条件)

  1. 不相关蕴含独立:仅对高斯成立

  2. 最大熵原理:给定均值和方差,高斯分布熵最大

最大熵推导

目标:在约束下,最大化熵

Lagrange 函数:

变分法,对求导:

解得:

确定常数后,得:

这正是高斯分布!

意义:在只知道均值和方差的情况下,高斯分布是最"无偏"的选择(信息熵最大,假设最少)。


Q9:什么是共轭先验?为什么要使用它?

定义:若先验分布 ()属于同一分布族,则称先验为共轭先验。

常见共轭对:

似然 共轭先验 后验
Bernoulli/Binomial Beta Beta
Poisson Gamma Gamma
Gaussian(均值) Gaussian Gaussian
Gaussian(方差) Inverse-Gamma Inverse-Gamma
Multinomial Dirichlet Dirichlet

例子:Gaussian-Gaussian 共轭

似然:已知)

先验:

后验:

后验均值是加权平均:

权重 = 精度(方差的倒数)。

为什么使用共轭先验?

  1. 解析解:后验有闭式形式,无需数值积分
  2. 可解释性:先验参数有直观含义(如"伪观测")
  3. 序贯更新:后验作为新的先验,易于增量学习
  4. 计算效率:对大规模数据尤其重要

局限性:

  • 可能不反映真实先验信念
  • 分布族选择受限

非共轭先验:使用 MCMC(如 Gibbs 采样、 Metropolis-Hastings)或变分推断。


Q10:偏差-方差分解在统计推断中有何意义?

偏差-方差分解

几何解释:

1
2
3
4
5
6
7
      θ (真实参数)
|
| Bias
|<-------->
| μ_θ (估计的期望)
|
σ²(θ):|<------>| (方差)

权衡:

  • 低偏差,高方差:过拟合(如高次多项式拟合)
  • 高偏差,低方差:欠拟合(如线性模型拟合复杂数据)
  • 最优:平衡两者

例子:Ridge vs OLS

OLS(普通最小二乘):

  • 无偏:
  • 方差:
  • 接近奇异时,方差爆炸!

Ridge:

  • 有偏: - 方差更小:正则化稳定估计

定理(Ridge 的 MSE 优势):存在使得:

特别是当病态或时。

实践启示:

  1. 无偏估计不一定最优(可能方差巨大)
  2. 适度偏差换取方差大幅下降,常能降低 MSE
  3. 正则化、收缩估计(如 Lasso 、 Ridge)正是基于此思想

🎓 总结:概率论核心要点

记忆公式

  1. Bayes 定理

  1. 期望的线性性

  1. 中心极限定理

  1. MLE 的渐近分布

记忆口诀:

Bayes 更新先验信念(后验∝似然×先验)

大数定律保证收敛(样本均值→总体均值)

中心极限给出正态(和的分布近似正态)

MLE 达到效率下界(Cram é r-Rao 界)

实战 Checklist:

✏️ 练习题与解答

练习 1:条件概率与贝叶斯公式

题目:某疾病的患病率为 0.1%。一种检测方法的灵敏度(真阳性率)为 99%,特异度(真阴性率)为 95%。一个人检测阳性,他实际患病的概率是多少?

解答

= 患病, = 检测阳性。已知:,即

由贝叶斯公式:

即使检测阳性,实际患病概率只有约 1.94%。这是"基率谬误"的经典案例——当患病率很低时,即使检测很准确,阳性预测值也可能很低。

练习 2:最大似然估计

题目:设独立同分布于均匀分布,其中未知。求的 MLE,并判断该估计是否无偏。

解答

似然函数:

𝟙𝟙

其中

要最大化,注意关于递减,且需要。因此:

检查无偏性:的 CDF 为),PDF 为

因此,MLE 是有偏的(系统性地低估)。

无偏修正:

练习 3:中心极限定理的应用

题目:一台机器生产的螺丝长度服从均值 10mm、标准差 0.2mm 的分布。随机抽取 100 根螺丝,求样本均值在之间的概率。

解答

为第根螺丝的长度,

由中心极限定理,

即样本均值落在之间的概率约为 95.44%。

练习 4:贝叶斯估计与共轭先验

题目:投掷一枚可能不均匀的硬币,假设正面概率的先验为。投掷 10 次观测到 7 次正面,求的后验分布和后验均值。

解答

先验:

似然:,观测到

由 Beta-Binomial 共轭性,后验为:

后验均值:

对比 MLE:

后验均值(0.643)比 MLE(0.7)更接近 0.5,这是先验(偏向公平硬币)的"拉回"效应。当数据量增大时,后验均值会趋近 MLE。

练习 5:假设检验

题目:某工厂声称其产品的平均重量为 500g。随机抽取 25 件产品,测得。在显著性水平下,检验该声称是否成立。

解答

vs (双侧检验)。

检验统计量:

下,

临界值:

由于,不落入拒绝域,因此在水平下不能拒绝

p 值:

结论:没有足够的统计证据表明产品的平均重量与 500g 有显著差异。但注意:不能拒绝不等于证明为真——可能是样本量不够大,统计功效不足。

📚 参考文献

  1. Casella, G., & Berger, R. L. (2002). Statistical Inference (2nd ed.). Duxbury Press.

  2. Wasserman, L. (2004). All of Statistics: A Concise Course in Statistical Inference. Springer.

  3. Murphy, K. P. (2022). Probabilistic Machine Learning: An Introduction. MIT Press.

  4. Gelman, A., Carlin, J. B., Stern, H. S., Dunson, D. B., Vehtari, A., & Rubin, D. B. (2013). Bayesian Data Analysis (3rd ed.). Chapman and Hall/CRC.

  5. Lehmann, E. L., & Casella, G. (1998). Theory of Point Estimation (2nd ed.). Springer.

  6. van der Vaart, A. W. (1998). Asymptotic Statistics. Cambridge University Press.

  7. Billingsley, P. (2008). Probability and Measure (Anniversary ed.). Wiley.

  8. Durrett, R. (2019). Probability: Theory and Examples (5th ed.). Cambridge University Press.

  9. Ferguson, T. S. (1996). A Course in Large Sample Theory. Chapman and Hall/CRC.

  10. Robert, C. P., & Casella, G. (2004). Monte Carlo Statistical Methods (2nd ed.). Springer.


下一章预告:第 4 章将深入探讨优化理论基础,包括凸优化、梯度下降、牛顿法、拟牛顿法、约束优化等,为机器学习算法的训练提供数学工具。

  • 本文标题:机器学习数学推导(三)概率论与统计推断
  • 本文作者:Chen Kai
  • 创建时间:2021-09-06 10:45:00
  • 本文链接:https://www.chenk.top/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E6%95%B0%E5%AD%A6%E6%8E%A8%E5%AF%BC%EF%BC%88%E4%B8%89%EF%BC%89%E6%A6%82%E7%8E%87%E8%AE%BA%E4%B8%8E%E7%BB%9F%E8%AE%A1%E6%8E%A8%E6%96%AD/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论