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

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

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

概率空间与测度论基础

概率空间的公理化定义

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

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

为什么需要 $- 代数?

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

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

  1. 2. 3. 若 ,则 4. (容斥原理)

证明性质 1:

由可数可加性,令 , 则:

$$

P() = P({i=1}^A_i) = {i=1}^P(A_i) = _{i=1}^P() $$

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

条件概率与独立性

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

$$

P(A|B) = $$

定理 2(乘法公式)

$$

P(A_1 A_2 A_n) = P(A_1) P(A_2|A_1) P(A_3|A_1 A_2) P(A_n|A_1 A_{n-1}) $$

定理 3(全概率公式):设 {B_1, B_2, , B_n} 的一个分割(即 互不相交且 _{i=1}^n B_i = A $:

$$

P(A) = _{i=1}^n P(A|B_i) P(B_i) $$

证明:

$$

A = A = A ({i=1}^n B_i) = {i=1}^n (A B_i) $$

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

$$

P(A) = {i=1}^n P(A B_i) = {i=1}^n P(A|B_i) P(B_i) $$

证毕。

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

$$

P(A|B) = = $$

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

Bayes 定理的意义:

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

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

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

$$

P(A B) = P(A) P(B) $$

等价地,若 , 则

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

$$

P(A B | C) = P(A|C) P(B|C) $$

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

反例:考虑抛两枚硬币:

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

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

随机变量与分布

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

$$

X: $$

可测性要求:对任意 Borel 集 ,

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

$$

F_X(x) = P(X x) $$

CDF 的性质:

  1. 单调非降: 2 . 右连续: {h ^+} F_X(x+h) = F_X(x), {x } F_X(x) = 1$

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

$$

F_X(x) = _{-}^x f_X(t) , dt $$

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

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

$$

p_X(x) = P(X = x) $$

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

$$

F_{X,Y}(x, y) = P(X x, Y y) $$

联合 PDF(若存在):

$$

f_{X,Y}(x, y), F_{X,Y}(x, y) = {-}^y {-}^x f_{X,Y}(s, t) , ds , dt $$

定义 10(边缘分布):

$$

f_X(x) = {-}^f{X,Y}(x, y) , dy $$

定义 11(条件分布):

$$

f_{X|Y}(x|y) = , f_Y(y) > 0 $$

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

$$

f_{X,Y}(x, y) = f_X(x) f_Y(y), x, y $$

期望、方差与特征函数

期望的定义与性质

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

  • 离散型: - 连续型:

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

$$

E[X + Y] = E[X] + E[Y] $$

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

证明(连续型):

$

证毕。

定理 6(全期望公式):

$$

E[X] = E[E[X|Y]] $$

证明:

$

证毕。

方差与协方差

定义 14(方差):

$

定理 7(方差的性质):

  1. (X + ) = ^2 (X)X Y

证明性质 2:

$

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

定义 15(协方差):

$

性质:

  1. (X, X) = (X)(对称性)
  2. (X + Y, Z) = (X, Z) + (Y, Z)$(双线性)
  3. 独立,则 (X, Y) = 0$(但逆命题不成立)

定义 16(相关系数):

$

定理 8(Cauchy-Schwarz 不等式):

证明:考虑任意 :

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

证毕。

特征函数

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

$

特征函数的性质:

  1. _X(0) = 1| _X(t)| (共轭)
  2. , 则 _Y(t) = e^{itb} X(at)X Y $ 独立,则 {X+Y}(t) = _X(t) _Y(t)$

定理 9(特征函数唯一性):分布由特征函数唯一决定。即若 _X = _YX Y $ 同分布。

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

$$

E[X^n] = |_{t=0} $$

证明:

$

阶导数:

$

:

$

证毕。

常见概率分布

离散分布

1. 伯努利分布(Bernoulli)

定义:, 若:

$$

P(X = k) =

$$

期望与方差:

$$

E[X] = p, (X) = p(1-p) $$

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

2. 二项分布(Binomial)

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

$$

P(X = k) = p^k (1-p)^{n-k}, k = 0, 1, , n $$

期望与方差:

$$

E[X] = np, (X) = np(1-p) $$

推导期望:

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

$$

E[X] = _{i=1}^n E[X_i] = np $$

推导方差:

由方差的独立可加性:

$

3. 泊松分布(Poisson)

定义:, 若:

$$

P(X = k) = {k!}, k = 0, 1, 2, $$

期望与方差:

$$

E[X] = , (X) = $$

推导期望:

$$

E[X] = {k=0}^k {k!} = e^{-} {k=1}^k = e^{-} _{k=1}^ {(k-1)!} = e^{-} e^= $$

泊松定理:当 , , 且 固定时,(n, p) ()$。

证明:

$

:

  • - (1 - )^{-k} $ 故 。证毕。

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

连续分布

1. 均匀分布(Uniform)

定义:, 若:

$$

f_X(x) =

$$

期望与方差:

$$

E[X] = , (X) = $$

2. 指数分布(Exponential)

定义:, 若:

$$

f_X(x) = e^{-x}, x $$

期望与方差:

$$

E[X] = , (X) = $$

无记忆性:

证明:

$$

P(X > s + t | X > s) = = {e^{-s}} = e^{-t} = P(X > t) $$

证毕。

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

3. 高斯分布(Gaussian/Normal)

定义:, 若:

$$

f_X(x) = (-) $$

期望与方差:

$$

E[X] = , (X) = ^2 $$

标准正态分布:, CDF 记作 (z) = _{-}^z e{-t2/2} dt$。

标准化变换:若 , 则

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

$$

f_X(x) = (-(x - )^T ^{-1} (x - )) $$

性质:

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

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

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

4. Gamma 分布

定义:, 若:

$$

f_X(x) = x^{} e^{-x}, x > 0 $$

其中 () = _0t{} e^{-t} dt$ 是 Gamma 函数。

期望与方差:

$$

E[X] = , (X) = $$

特例:

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

5. Beta 分布

定义:, 若:

$$

f_X(x) = x^{} (1-x)^{}, < x < 1 $$

期望与方差:

$$

E[X] = , (X) = $$

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

分布之间的关系

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

$$

B(, ) = _0^1 x^{} (1-x)^{} dx = $$

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

$

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

$$

T = t_n $$

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

$$

f_T(t) = (1 + )^{-(n+1)/2} $$

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

$$

F = F_{n_1, n_2} $$

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

极限定理

大数定律

定义 18(依概率收敛):随机变量序列 {X_n} X $, 记作 , 如果:

$

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

$$

P(X a) $$

证明:

$$

E[X] = _0^x f_X(x) dx _a^x f_X(x) dx a _a^f_X(x) dx = a P(X a) $$

证毕。

定理 16(Chebyshev 不等式):若 , (X) = ^2 < :

$$

P(|X - | ) $$

证明:应用 Markov 不等式于 :

$$

P(|X - | ) = P((X - )^2 ^2) = $$

证毕。

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

$

证明:

$$

E[{X}_n] = , ({X}_n) = $$

由 Chebyshev 不等式:

$$

P(|{X}_n - | ) = (n ) $$

证毕。

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

$$

P(_{n } {X}_n = ) = 1 $$

即 {X}_n$ 几乎必然收敛到

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

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

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

中心极限定理

定理 19(中心极限定理,CLT):设 独立同分布,且 , (X_i) = ^2 < $。令:

$$

Z_n = = $$

则:

$$

Z_n (0, 1) $$

其中 $ 表示依分布收敛。

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

标准化,则 , (Y_i) = 1$。

$$

Z_n = _{i=1}^n Y_i $$ 的特征函数:

$

展开 _Y(t/)$(Taylor 展开):

$

因此:

$

而 $ e{-t2/2} 的特征函数。由 L é vy 连续性定理,。证毕。

CLT 的意义:

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

多元中心极限定理:设 独立同分布,且 , (X_i) = $。则:

$

参数估计

点估计

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

定义 20(无偏性):若 , 则称 _n 的无偏估计。

例子:

  1. 样本均值 {X}n = {i=1}^n X_i 的无偏估计
  2. 样本方差 是总体方差 ^2$ 的无偏估计

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

证明样本方差的无偏性:

$

关键步骤:

若除以 $ nE = ^2$。

定义 21(相合性):若 _n 是 $ 的相合估计。

定义 22(均方误差,MSE):

$

其中 (_n) = E[_n] - $。

偏差-方差分解:

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

最大似然估计(MLE)

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

$$

L() = _{i=1}^n f(x_i; ) $$

对数似然函数:

$

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

$

例子 1:伯努利分布的 MLE

。似然函数:

$$

L(p) = _{i=1}^n p^{x_i} (1-p)^{1-x_i} = p^{x_i} (1-p)^{n - x_i} $$

对数似然:

$

求导:

$

解得:

$

例子 2:高斯分布的 MLE

。对数似然:

$

对 $ 求偏导:

$

对 ^2$ 求偏导:

$

解得:

$

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

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

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

其中 是 Fisher 信息矩阵:

$$

I() = -E= E$$

贝叶斯估计

贝叶斯范式:将参数

后验分布:由 Bayes 定理:

$

定义 25(后验均值估计):

$

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

$

例子:Beta-Bernoulli 共轭

先验:(, )$ $

似然:

$$

f(x|) = {x_i}(1-){n - x_i} $$

后验:

$

这是 (+ x_i, + n - x_i)$。

后验均值:

$

解释:

  • 先验参数 , 个成功,$ 个失败
  • 后验是先验与数据的结合:+ x_i 个失败
  • 当 $ n (MLE)

贝叶斯 vs 频率:

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

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

假设检验与置信区间

假设检验

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

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

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

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

两类错误:

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

定义 30(显著性水平):= P( H_0 | H_0 )$, 通常取

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

$

决策规则:若 p 值 , 拒绝

例子:单样本 t 检验

假设: vs 检验统计量:

$$

T = $$

下,

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

置信区间

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

$$

P() = 1 - $$

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

例子:均值的置信区间

, ^2$ 已知。由 CLT:

$

因此:

$$

P(| | z_{/2}) = 1 - $$

变形得:

$

是 $ 的 置信区间。

若 ^2$ 未知,用 代替 $, 用 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 集)。

矛盾证明 不可测:

设 {r_n} $ 枚举 。定义

性质:

  1. 互不相交(否则存在 使 , 即 , 矛盾于 的构造)
  2. _n V_n = [0, 1]V $ 可测,则 可测且 (平移不变性)。由可数可加性:

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

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


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

独立 vs 不相关:

概念 定义 蕴含关系
独立 , A, B 不相关
不相关 (X, Y) = 0 独立

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

, 。则:

  • (奇函数积分)
  • - 因此 (X, Y) = E[XY] - E[X]E[Y] = 0Y X $ 决定,显然不独立!

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

定理:若 联合高斯,则

证明思路:

联合高斯的 PDF:

$$

f_{X,Y}(x, y) = (-) $$

其中 = (X, Y) = $。

当 = 0$ 时:

$$

f_{X,Y}(x, y) = e^{-(x-_X)^2/(2_X^2)} e^{-(y-_Y)^2/(2_Y^2)} = f_X(x) f_Y(y) $$

。证毕。

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


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

自由度的直观解释:

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

$

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

数学证明:

$

展开:

取期望:

$$

E= n^2 - 2n E[({X}_n - )^2] + n E[({X}_n - )^2] = n^2 - n = (n-1)^2 $$

因此:

$$

E[S_n^2] = E= ^2 $$


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

MLE 的三大渐近性质:

  1. 相合性:_{} 0$2 . 渐近正态性:({} - _0) (0, I(_0)^{-1})$3. 渐近有效性:MLE 达到 Cram é r-Rao 下界(在所有无偏估计中方差最小)

Cram é r-Rao 下界:

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

$

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

$$

I() = E$$

证明思路:

由无偏性:, 对 $ 求导:

定义 (得分函数)。注意

由 Cauchy-Schwarz 不等式:

整理得:() n$ 个独立样本,。证毕。

MLE 达到下界:

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


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

哲学差异:

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

MAP vs MLE:

$

MAP = MLE + 先验正则化。

例子:Ridge 回归 vs MLE

线性回归 $ y = X+

MLE:

$

贝叶斯(高斯先验 (0, ^2 I)$):

$

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

何时贝叶斯更优?

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

何时 MLE 更优?

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

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

p 值的正确解释:

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

$

常见误解:

❌ "p 值是 为真的概率": ✅ 正确:p 值是 这两者根本不同!由 Bayes 定理:

$$

P(H_0|) = $$

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 定理给出误差界:_x |F_n(x) - (x)| 2 . 厚尾分布:
    • 若 (X_i) = $(如 Cauchy 分布),CLT 不适用
    • 此时样本均值甚至不收敛到任何分布!
  2. 相依性:
    • CLT 假设独立同分布
    • 对时间序列等相依数据,需要修改版本(如 Lyapunov CLT)
  3. 多峰分布:
    • 若混合多个相距很远的分布,样本均值可能呈现多峰,而非正态

替代方案:

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

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

高斯分布的独特性质:

  1. 再生性:, 独立,则 $X + Y (_1 + _2, _1^2 + _2^2)线X (, )A X + b (A+ b, AA^T) ( , ) $$

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

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

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

最大熵推导:

目标:在约束 , (X) = ^2$ 下,最大化熵

Lagrange 函数:

$

变分法,对 求导:

$

解得:

$$

f(x) (-_2 (x-)^2) $$

确定常数后,得:

$$

f(x) = (-) $$

这正是高斯分布!

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


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

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

常见共轭对:

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

例子:Gaussian-Gaussian 共轭

似然:(^2$ 已知)

先验:(_0, _0^2)$ 后验:

$

后验均值是加权平均:

$$

E[| X] = {x} + _0 $$

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

为什么使用共轭先验?

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

局限性:

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

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


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

偏差-方差分解:

$

几何解释:

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

权衡:

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

例子:Ridge vs OLS

OLS(普通最小二乘):

$

  • 无偏: - 方差:(_{} ) = ^2 (XTX){-1}$ - 当 接近奇异时,方差爆炸!

Ridge:

$

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

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

$

特别是当 病态或 时。

实践启示:

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

🎓 总结:概率论核心要点

记忆公式:

  1. Bayes 定理: $$

P(|x) =

  1. 期望的线性性: $$

E[X + Y] = E[X] + E[Y]

  1. 中心极限定理: $ (0, 1)

  2. MLE 的渐近分布: $

记忆口诀:

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

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

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

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

实战 Checklist:

📚 参考文献

  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 许可协议。转载请注明出处!
 评论