人工智能之数学基础 概率论与统计
第二章 核心定理
文章目录
- [人工智能之数学基础 概率论与统计](#人工智能之数学基础 概率论与统计)
- 前言
- [一、贝叶斯定理(Bayes' Theorem)](#一、贝叶斯定理(Bayes' Theorem))
- [1. 定理陈述](#1. 定理陈述)
- [2. 直观例子:疾病检测](#2. 直观例子:疾病检测)
- [3. Python 实现:贝叶斯更新(Beta-Bernoulli 共轭)](#3. Python 实现:贝叶斯更新(Beta-Bernoulli 共轭))
- [二、大数定律(Law of Large Numbers, LLN)](#二、大数定律(Law of Large Numbers, LLN))
- [1. 定理陈述](#1. 定理陈述)
- [2. Python 验证:模拟 LLN](#2. Python 验证:模拟 LLN)
- [三、中心极限定理(Central Limit Theorem, CLT)](#三、中心极限定理(Central Limit Theorem, CLT))
- [1. 定理陈述](#1. 定理陈述)
- [2. 直观理解](#2. 直观理解)
- [3. Python 验证:CLT 模拟](#3. Python 验证:CLT 模拟)
- 四、三大定理对比总结
- [五、综合应用:A/B 测试中的 CLT 与贝叶斯](#五、综合应用:A/B 测试中的 CLT 与贝叶斯)
- 场景:比较两个网页版本的点击率
- [方法1:频率学派(基于 CLT)](#方法1:频率学派(基于 CLT))
- 六、结语
- 后续
- 资料关注
前言
概率论中的三大核心定理------贝叶斯定理(Bayes' Theorem) 、大数定律(Law of Large Numbers) 和 中心极限定理(Central Limit Theorem, CLT) ------构成了现代统计推断、机器学习和数据科学的理论基石。本文将深入讲解这些定理的数学含义、直观解释、应用场景 ,并提供完整的 Python 代码实现与可视化验证。
一、贝叶斯定理(Bayes' Theorem)
1. 定理陈述
对于两个事件 A 和 B ,若 P(B) \> 0 ,则:
P ( A ∣ B ) = P ( B ∣ A ) ⋅ P ( A ) P ( B ) P(A \mid B) = \frac{P(B \mid A) \cdot P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)⋅P(A)
在参数估计中,常写作:
后验 = 似然 × 先验 证据 ⇒ P ( θ ∣ D ) = P ( D ∣ θ ) P ( θ ) P ( D ) \text{后验} = \frac{\text{似然} \times \text{先验}}{\text{证据}} \quad \Rightarrow \quad P(\theta \mid \mathcal{D}) = \frac{P(\mathcal{D} \mid \theta) P(\theta)}{P(\mathcal{D})} 后验=证据似然×先验⇒P(θ∣D)=P(D)P(D∣θ)P(θ)
其中:
- P(\\theta) :先验(Prior)--- 对参数的初始信念
- P(\\mathcal{D} \\mid \\theta) :似然(Likelihood)--- 在参数下观测数据的概率
- P(\\theta \\mid \\mathcal{D}) :后验(Posterior)--- 观测数据后对参数的更新信念
- P(\\mathcal{D}) = \\int P(\\mathcal{D} \\mid \\theta) P(\\theta) d\\theta :边缘似然/证据(Evidence)
✅ 贝叶斯定理实现了从"原因→结果"到"结果→原因"的推理逆转。
2. 直观例子:疾病检测
- 某病患病率:P(\\text{病}) = 0.001
- 检测准确率:
- P(\\text{阳性} \\mid \\text{病}) = 0.99 (真阳性)
- P(\\text{阳性} \\mid \\text{健康}) = 0.02 (假阳性)
问:若检测为阳性,实际患病的概率?
P ( 病 ∣ 阳性 ) = 0.99 × 0.001 0.99 × 0.001 + 0.02 × 0.999 ≈ 0.047 P(\text{病} \mid \text{阳性}) = \frac{0.99 \times 0.001}{0.99 \times 0.001 + 0.02 \times 0.999} \approx 0.047 P(病∣阳性)=0.99×0.001+0.02×0.9990.99×0.001≈0.047
即使检测"很准",由于疾病罕见,阳性结果大概率是假阳性!
3. Python 实现:贝叶斯更新(Beta-Bernoulli 共轭)
假设我们抛硬币,想知道正面概率 \\theta 。先验用 Beta 分布(共轭先验)。
python
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import beta, binom
# 先验:Beta(α=1, β=1) → 均匀分布
alpha_prior, beta_prior = 1, 1
# 模拟观测数据:10 次试验,7 次正面
n_trials, n_heads = 10, 7
# 后验参数(共轭性质)
alpha_post = alpha_prior + n_heads
beta_post = beta_prior + n_trials - n_heads
# 绘制先验 vs 后验
x = np.linspace(0, 1, 500)
prior_pdf = beta.pdf(x, alpha_prior, beta_prior)
posterior_pdf = beta.pdf(x, alpha_post, beta_post)
plt.plot(x, prior_pdf, 'r--', label=f'先验 Beta({alpha_prior}, {beta_prior})')
plt.plot(x, posterior_pdf, 'b-', label=f'后验 Beta({alpha_post}, {beta_post})')
plt.axvline(n_heads / n_trials, color='k', linestyle=':', label='MLE = 0.7')
plt.xlabel('θ (正面概率)')
plt.ylabel('密度')
plt.title('贝叶斯更新:硬币偏置估计')
plt.legend()
plt.grid(True)
plt.show()
print(f"后验均值: {alpha_post / (alpha_post + beta_post):.3f}")
print(f"95% 置信区间: {beta.ppf([0.025, 0.975], alpha_post, beta_post)}")
✅ 随着数据增加,后验越来越集中,趋近于真实值。
二、大数定律(Law of Large Numbers, LLN)
1. 定理陈述
设 X_1, X_2, \\dots, X_n 是独立同分布(i.i.d.)的随机变量,且 \\mathbb{E}\[X_i\] = \\mu 存在,则:
X ˉ n = 1 n ∑ i = 1 n X i → a . s . μ (强大数定律) \bar{X}n = \frac{1}{n} \sum{i=1}^n X_i \xrightarrow{a.s.} \mu \quad \text{(强大数定律)} Xˉn=n1i=1∑nXia.s. μ(强大数定律)
X ˉ n → P μ (弱大数定律) \bar{X}_n \xrightarrow{P} \mu \quad \text{(弱大数定律)} XˉnP μ(弱大数定律)
即:样本均值依概率(或几乎必然)收敛于期望值。
💡 直观:抛硬币次数越多,正面频率越接近 0.5。
2. Python 验证:模拟 LLN
python
np.random.seed(42)
n_max = 10000
# 生成 i.i.d. 样本(指数分布,均值=2)
true_mean = 2
samples = np.random.exponential(scale=true_mean, size=n_max)
# 计算累积均值
cumulative_means = np.cumsum(samples) / np.arange(1, n_max + 1)
# 绘图
plt.figure(figsize=(10, 5))
plt.plot(cumulative_means, label='样本均值')
plt.axhline(true_mean, color='r', linestyle='--', label=f'真实均值 μ={true_mean}')
plt.xlabel('样本数量 n')
plt.ylabel('累积均值')
plt.title('大数定律验证:指数分布(λ=0.5)')
plt.legend()
plt.grid(True)
plt.show()
📉 可见:随着 ( n ) 增大,样本均值稳定收敛到理论均值。
三、中心极限定理(Central Limit Theorem, CLT)
1. 定理陈述
设 X_1, \\dots, X_n 是 独立同分布 (i.i.d.) 随机变量, \\mathbb{E}\[X_i\] = \\mu , , , \\text{Var}(X_i) = \\sigma\^2 \< \\infty ,则当 n \\to \\infty 时:
X ˉ n − μ σ / n → d N ( 0 , 1 ) \frac{\bar{X}_n - \mu}{\sigma / \sqrt{n}} \xrightarrow{d} \mathcal{N}(0, 1) σ/n Xˉn−μd N(0,1)
即:无论原始分布如何,样本均值的标准化形式渐近服从标准正态分布。
✅ 这是t 检验、置信区间、A/B 测试等方法的理论基础!
2. 直观理解
即使原始数据高度偏斜(如指数分布、泊松分布),只要样本量足够大,均值的分布就近似正态。
3. Python 验证:CLT 模拟
python
import seaborn as sns
np.random.seed(0)
n_samples = 10000 # 模拟多少次"抽样"
n_obs = 50 # 每次抽多少个样本
# 从非正态分布(指数分布)抽样
sample_means = []
for _ in range(n_samples):
sample = np.random.exponential(scale=2, size=n_obs) # 均值=2
sample_means.append(np.mean(sample))
sample_means = np.array(sample_means)
# 理论:均值 ~ N(μ, σ²/n)
mu = 2
sigma = 2 # 指数分布标准差 = 均值
theoretical_std = sigma / np.sqrt(n_obs)
# 绘图
plt.figure(figsize=(10, 5))
sns.histplot(sample_means, kde=True, stat='density', bins=50, alpha=0.6, label='样本均值分布')
# 叠加理论正态分布
x = np.linspace(sample_means.min(), sample_means.max(), 200)
theoretical_pdf = norm.pdf(x, loc=mu, scale=theoretical_std)
plt.plot(x, theoretical_pdf, 'r-', lw=2, label=f'理论 N(μ={mu}, σ={theoretical_std:.2f})')
plt.axvline(mu, color='k', linestyle='--', label='真实均值')
plt.xlabel('样本均值')
plt.ylabel('密度')
plt.title(f'中心极限定理验证(n={n_obs})')
plt.legend()
plt.grid(True)
plt.show()
print(f"样本均值均值: {sample_means.mean():.3f} (理论: {mu})")
print(f"样本均值标准差: {sample_means.std():.3f} (理论: {theoretical_std:.3f})")
📊 即使原始分布是右偏的指数分布,均值的分布已非常接近正态!
四、三大定理对比总结
| 定理 | 核心思想 | 收敛类型 | 应用 |
|---|---|---|---|
| 贝叶斯定理 | 用数据更新信念 | --- | 贝叶斯推断、垃圾邮件过滤、医学诊断 |
| 大数定律 | 样本均值 → 期望 | 依概率 / 几乎必然 | 蒙特卡洛积分、频率稳定性 |
| 中心极限定理 | 均值分布 → 正态 | 依分布 | 假设检验、置信区间、误差分析 |
五、综合应用:A/B 测试中的 CLT 与贝叶斯
场景:比较两个网页版本的点击率
方法1:频率学派(基于 CLT)
python
# 模拟 A/B 测试数据
n_A, n_B = 1000, 1000
clicks_A, clicks_B = 120, 150
p_A = clicks_A / n_A
p_B = clicks_B / n_B
# 标准误(SE)
SE = np.sqrt(p_A*(1-p_A)/n_A + p_B*(1-p_B)/n_B)
# z 统计量
z = (p_B - p_A) / SE
p_value = 2 * (1 - norm.cdf(abs(z)))
print(f"p_A = {p_A:.3f}, p_B = {p_B:.3f}")
print(f"z = {z:.2f}, p-value = {p_value:.4f}")
方法2:贝叶斯(Beta-Bernoulli)
python
# 先验 Beta(1,1)
alpha_A, beta_A = 1 + clicks_A, 1 + n_A - clicks_A
alpha_B, beta_B = 1 + clicks_B, 1 + n_B - clicks_B
# 蒙特卡洛模拟后验
samples_A = beta.rvs(alpha_A, beta_A, size=10000)
samples_B = beta.rvs(alpha_B, beta_B, size=10000)
prob_B_better = np.mean(samples_B > samples_A)
print(f"P(版本B更好 | 数据) = {prob_B_better:.4f}")
✅ 贝叶斯给出直接的概率解释,更符合直觉。
六、结语
- 贝叶斯定理 :教你如何理性更新信念;
- 大数定律 :保证长期频率稳定;
- 中心极限定理 :赋予你用正态分布近似复杂问题的能力。
后续
python过渡项目部分代码已经上传至gitee,后续会逐步更新。
资料关注
公众号:咚咚王
gitee:https://gitee.com/wy18585051844/ai_learning
《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》