更新时间:作者:小小条
第二章 核心定理
概率论中的三大核心定理——贝叶斯定理(Bayes' Theorem)、大数定律(Law of Large Numbers) 和 中心极限定理(Central Limit Theorem, CLT)——构成了现代统计推断、机器学*和数据科学的理论基石。本文将深入讲解这些定理的数学含义、直观解释、应用场景,并提供完整的 Python 代码实现与可视化验证。

对于两个事件 $ A $ 和 $B $,若 $P(B) > 0 $,则:
$ P(A \mid B) = \frac{P(B \mid A) \cdot P(A)}{P(B)} $
在参数估计中,常写作:
$ \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(\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)✅ 贝叶斯定理实现了从“原因→结果”到“结果→原因”的推理逆转。
问:若检测为阳性,实际患病的概率?
$ P(\text{病} \mid \text{阳性}) = \frac{0.99 \times 0.001}{0.99 \times 0.001 + 0.02 \times 0.999} \approx 0.047 $
即使检测“很准”,由于疾病罕见,阳性结果大概率是假阳性!
假设我们抛硬币,想知道正面概率 $ \theta $。先验用 Beta 分布(共轭先验)。
import numpy as npimport matplotlib.pyplot as pltfrom 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_headsbeta_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)}")
✅ 随着数据增加,后验越来越集中,趋近于真实值。
设 $X1, X2, \dots, Xn $ 是独立同分布(i.i.d.)的随机变量,且 $ \mathbb{E}[Xi] = \mu $存在,则:
$ \bar{X}n = \frac{1}{n} \sum{i=1}^n X_i \xrightarrow{a.s.} \mu \quad \text{(强大数定律)} $
$ \bar{X}_n \xrightarrow{P} \mu \quad \text{(弱大数定律)} $
即:样本均值依概率(或几乎必然)收敛于期望值。
直观:抛硬币次数越多,正面频率越接近 0.5。
np.random.seed(42)n_max = 10000# 生成 i.i.d. 样本(指数分布,均值=2)true_mean = 2samples = 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 \) 增大,样本均值稳定收敛到理论均值。
设 $ X1, \dots, Xn $ 是 独立同分布(i.i.d.) 随机变量,$ \mathbb{E}[Xi] = \mu $,$ \text{Var}(Xi) = \sigma^2 < \infty $,则当 $n \to \infty $ 时:
$ \frac{\bar{X}_n - \mu}{\sigma / \sqrt{n}} \xrightarrow{d} \mathcal{N}(0, 1) $
即:无论原始分布如何,样本均值的标准化形式渐近服从标准正态分布。
✅ 这是t 检验、置信区间、A/B 测试等方法的理论基础!
即使原始数据高度偏斜(如指数分布、泊松分布),只要样本量足够大,均值的分布就近似正态。
import seaborn as snsnp.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 = 2sigma = 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 测试数据n_A, n_B = 1000, 1000clicks_A, clicks_B = 120, 150p_A = clicks_A / n_Ap_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) / SEp_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}")
# 先验 Beta(1,1)alpha_A, beta_A = 1 + clicks_A, 1 + n_A - clicks_Aalpha_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》
版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除