概率分布¶
概率分布描述随机结果如何在可能的值上分布。本文对主要的离散和连续分布进行梳理,包括 Bernoulli、binomial、Poisson、Gaussian、exponential、beta 等,并给出每种分布的公式、直觉以及 ML 应用(损失函数、prior、噪声模型)。
-
在第四章中,我们介绍了随机变量、PMF、PDF 和 CDF。这里我们对 ML 和统计学中最重要的概率分布进行汇总,给出每种分布的直觉、公式、均值和方差。
-
三个核心函数的快速回顾(完整定义见第四章):
- PMF \(P(X = x)\):给出每个离散结果的概率,即条形图中的每根柱子。
- PDF \(f(x)\):给出连续变量在每个点的密度,曲线下两点之间的面积就是概率。
- CDF \(F(x) = P(X \le x)\):到 \(x\) 为止的累积概率,始终从 0 增加到 1,且不会减小。
-
分布的支撑集是 PMF 或 PDF 取正值的值的集合。掷骰子的支撑集是 \(\{1,2,3,4,5,6\}\),正态分布的支撑集是所有实数 \((-\infty, \infty)\)。
-
分布明确地分为两类:离散型(可数结果,使用 PMF)和连续型(不可数结果,使用 PDF)。
-
Bernoulli 分布:最简单的分布。一次试验,两种结果:以概率 \(p\) 成功(1),以概率 \(1-p\) 失败(0)。
-
均值:\(E[X] = p\)。方差:\(\text{Var}(X) = p(1-p)\)。
-
每次抛硬币、每个是/否分类、每个二值结果都是一次 Bernoulli 试验。在 ML 中,sigmoid 函数的输出恰好是 Bernoulli 分布的参数 \(p\)。
-
Binomial 分布:统计 \(n\) 次独立 Bernoulli 试验中成功的次数,每次试验的成功概率相同,为 \(p\)。
-
第 01 篇中的二项式系数 \(\binom{n}{k}\) 计算 \(n\) 次试验中 \(k\) 次成功的排列方式数。
-
均值:\(E[X] = np\)。方差:\(\text{Var}(X) = np(1-p)\)。
-
示例:抛一枚偏置硬币(\(p = 0.7\))8 次,恰好得到 6 次正面的概率为 \(\binom{8}{6}(0.7)^6(0.3)^2 = 28 \times 0.1176 \times 0.09 \approx 0.296\)。
-
Poisson 分布:在已知平均速率 \(\lambda\) 的条件下,统计固定时间或空间区间内发生的事件数。适用于事件稀少且独立的情况。
-
均值:\(E[X] = \lambda\)。方差:\(\text{Var}(X) = \lambda\)。均值等于方差是其标志性属性。
-
示例:每小时的邮件数(\(\lambda = 5\))、每页的错别字数、每秒的服务器请求数。在 ML 中,Poisson 回归对计数数据建模,避免线性模型预测出负数。
-
当 \(n \to \infty\)、\(p \to 0\) 且 \(np = \lambda\) 保持不变时,Binomial\((n,p)\) 收敛到 Poisson\((\lambda)\)。这就是 Poisson 分布在大规模人群中对稀少事件效果好的原因。
-
Geometric 分布:统计到第一次成功所需的试验次数。"我要抛几次硬币才能第一次正面朝上?"
-
均值:\(E[X] = 1/p\)。方差:\(\text{Var}(X) = (1-p)/p^2\)。
-
Geometric 分布是无记忆性的:还需等待 \(k\) 次试验才能成功的概率与已经等待了多少次无关。这使它在离散分布中独树一帜。
-
Negative Binomial 分布:将 geometric 推广为统计到第 \(r\) 次成功所需的试验次数(geometric 是 \(r=1\) 的特例)。
-
均值:\(E[X] = r/p\)。方差:\(\text{Var}(X) = r(1-p)/p^2\)。
-
Negative Binomial 分布在实践中也用于建模过度分散的计数数据(方差超过均值的情况),而 Poisson 分布无法处理这种情况。
-
现在我们转向连续分布。
-
Uniform 分布:区间 \([a, b]\) 内所有值等可能出现,PDF 是一个平坦的矩形。
-
均值:\(E[X] = \frac{a+b}{2}\)。方差:\(\text{Var}(X) = \frac{(b-a)^2}{12}\)。
-
随机数生成器以 Uniform(0,1) 采样为起点,其他分布通过对这些均匀样本进行变换得到。
-
Normal(Gaussian)分布:统计学中最重要的分布。它自然地从中心极限定理(见第四章)中产生:许多独立随机变量的平均值趋向于正态分布,无论原始分布是什么。
-
均值:\(E[X] = \mu\)。方差:\(\text{Var}(X) = \sigma^2\)。
-
标准正态分布有 \(\mu = 0\) 且 \(\sigma = 1\)。任意正态变量 \(X\) 可以通过 \(Z = (X - \mu)/\sigma\) 标准化为标准正态变量 \(Z\)。
-
经验法则(68-95-99.7 法则)指出:
- 约 68% 的数据落在均值的 \(\pm 1\sigma\) 范围内
- 约 95% 落在 \(\pm 2\sigma\) 范围内
- 约 99.7% 落在 \(\pm 3\sigma\) 范围内
-
在 ML 中,正态分布无处不在:权重初始化、数据增强中的噪声、MSE 损失背后的假设(隐含地假设 Gaussian 误差),以及变分自编码器中的重参数化技巧。
-
Exponential 分布:建模 Poisson 过程中事件之间的时间间隔。如果事件以速率 \(\lambda\) 到达,则相邻事件之间的等待时间服从 Exponential\((\lambda)\)。
-
均值:\(E[X] = 1/\lambda\)。方差:\(\text{Var}(X) = 1/\lambda^2\)。
-
与离散变量的 Geometric 分布类似,Exponential 分布是无记忆性的:\(P(X > s + t | X > s) = P(X > t)\)。再等 \(t\) 个单位的概率与已经等待了多长时间无关。
-
Gamma 分布:对 Exponential 的推广。建模 Poisson 过程中第 \(\alpha\) 个事件发生之前的时间(Exponential 是 \(\alpha = 1\) 的特例)。
-
其中 \(\alpha\)(形状参数)控制形状,\(\beta\)(速率参数)控制尺度。\(\Gamma(\alpha)\) 是 Gamma 函数,将阶乘推广到实数:对于正整数,\(\Gamma(n) = (n-1)!\)。
-
均值:\(E[X] = \alpha/\beta\)。方差:\(\text{Var}(X) = \alpha/\beta^2\)。
-
Beta 分布:定义在区间 \([0, 1]\) 上,非常适合建模概率、比例和比率。
-
分母 \(B(\alpha, \beta) = \frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha + \beta)}\) 是 Beta 函数,起归一化常数的作用。
-
均值:\(E[X] = \frac{\alpha}{\alpha + \beta}\)。方差:\(\text{Var}(X) = \frac{\alpha\beta}{(\alpha+\beta)^2(\alpha+\beta+1)}\)。
-
Beta 分布是 Bernoulli 和 Binomial likelihood 的共轭 prior。这意味着如果你的 prior 是 Beta 且数据是 Bernoulli,则 posterior 也是 Beta,使贝叶斯更新在解析上可处理。我们将在第 04 篇中使用这一性质。
- Chi-squared 分布(\(\chi^2\)):如果你取 \(k\) 个独立的标准正态随机变量并求其平方和,结果服从自由度为 \(k\) 的 \(\chi^2\) 分布。
-
均值:\(E[X] = k\)。方差:\(\text{Var}(X) = 2k\)。
-
\(\chi^2\) 分布实际上是 Gamma 分布的特例,其中 \(\alpha = k/2\),\(\beta = 1/2\)。它出现在假设检验(第四章的 chi-squared 检验)、拟合优度检验以及计算方差的置信区间中。
-
Student's t 分布:形状类似正态分布,但有更重的尾部。当你用小样本估计正态分布总体的均值且总体方差未知时,t 分布自然出现。
-
参数 \(\nu\)(nu)是自由度。当 \(\nu \to \infty\) 时,t 分布收敛到标准正态分布。当 \(\nu\) 较小时,更重的尾部为极端值赋予更多概率,反映了小样本带来的额外不确定性。
-
均值:\(E[X] = 0\)(当 \(\nu > 1\))。方差:\(\text{Var}(X) = \frac{\nu}{\nu - 2}\)(当 \(\nu > 2\))。
-
t 分布用于 t 检验(第四章),也在贝叶斯推断中作为对未知方差积分后的边缘分布出现。
-
主要分布汇总:
| 分布 | 类型 | 支撑集 | 均值 | 方差 |
|---|---|---|---|---|
| Bernoulli\((p)\) | 离散 | \(\{0,1\}\) | \(p\) | \(p(1-p)\) |
| Binomial\((n,p)\) | 离散 | \(\{0,\ldots,n\}\) | \(np\) | \(np(1-p)\) |
| Poisson\((\lambda)\) | 离散 | \(\{0,1,2,\ldots\}\) | \(\lambda\) | \(\lambda\) |
| Geometric\((p)\) | 离散 | \(\{1,2,3,\ldots\}\) | \(1/p\) | \((1-p)/p^2\) |
| Uniform\((a,b)\) | 连续 | \([a,b]\) | \((a+b)/2\) | \((b-a)^2/12\) |
| Normal\((\mu,\sigma^2)\) | 连续 | \((-\infty,\infty)\) | \(\mu\) | \(\sigma^2\) |
| Exponential\((\lambda)\) | 连续 | \([0,\infty)\) | \(1/\lambda\) | \(1/\lambda^2\) |
| Gamma\((\alpha,\beta)\) | 连续 | \((0,\infty)\) | \(\alpha/\beta\) | \(\alpha/\beta^2\) |
| Beta\((\alpha,\beta)\) | 连续 | \([0,1]\) | \(\alpha/(\alpha+\beta)\) | 见上文 |
| \(\chi^2(k)\) | 连续 | \((0,\infty)\) | \(k\) | \(2k\) |
| Student's \(t(\nu)\) | 连续 | \((-\infty,\infty)\) | \(0\) | \(\nu/(\nu-2)\) |
编程任务(使用 CoLab 或 notebook)¶
-
绘制 \(n=20\)、不同 \(p\) 值时的 Binomial PMF。观察形状如何从左偏变为对称再变为右偏。
import jax.numpy as jnp import matplotlib.pyplot as plt from math import comb n = 20 ks = jnp.arange(0, n + 1) fig, axes = plt.subplots(1, 3, figsize=(12, 4), sharey=True) for ax, p, color in zip(axes, [0.2, 0.5, 0.8], ["#e74c3c", "#3498db", "#27ae60"]): pmf = jnp.array([comb(n, int(k)) * p**k * (1-p)**(n-k) for k in ks]) ax.bar(ks, pmf, color=color, alpha=0.7) ax.set_title(f"Binomial(n={n}, p={p})") ax.set_xlabel("k") axes[0].set_ylabel("P(X = k)") plt.tight_layout() plt.show() -
验证 Binomial 的 Poisson 近似。设 \(n = 1000\),\(p = 0.003\),比较 Binomial\((n, p)\) 与 Poisson\((\lambda = np)\)。
import jax.numpy as jnp import matplotlib.pyplot as plt from math import comb, factorial, exp n, p = 1000, 0.003 lam = n * p ks = jnp.arange(0, 15) binom_pmf = jnp.array([comb(n, int(k)) * p**k * (1-p)**(n-k) for k in ks]) poisson_pmf = jnp.array([lam**k * exp(-lam) / factorial(int(k)) for k in ks]) plt.figure(figsize=(8, 4)) plt.bar(ks - 0.15, binom_pmf, width=0.3, color="#3498db", alpha=0.7, label=f"Binomial({n},{p})") plt.bar(ks + 0.15, poisson_pmf, width=0.3, color="#e74c3c", alpha=0.7, label=f"Poisson({lam})") plt.xlabel("k") plt.ylabel("P(X = k)") plt.title("Poisson 对 Binomial 的近似") plt.legend() plt.show() -
从正态分布采样并验证经验法则。统计落在均值 1、2、3 个标准差范围内的样本比例。
-
通过改变 \(\alpha\) 和 \(\beta\) 来探索 Beta 分布。绘制多种形状,观察分布如何从均匀变为偏斜再变为集中。
import jax import jax.numpy as jnp import matplotlib.pyplot as plt x = jnp.linspace(0.01, 0.99, 200) def beta_pdf(x, a, b): # 未归一化,用于形状比较 return x**(a-1) * (1-x)**(b-1) plt.figure(figsize=(10, 5)) params = [(1,1,"均匀"), (2,5,"左偏"), (5,2,"右偏"), (5,5,"对称"), (0.5,0.5,"U 形")] colors = ["#999", "#e74c3c", "#3498db", "#27ae60", "#9b59b6"] for (a, b, label), color in zip(params, colors): y = beta_pdf(x, a, b) y = y / jnp.trapezoid(y, x) # 归一化 plt.plot(x, y, label=f"α={a}, β={b}({label})", color=color, linewidth=2) plt.xlabel("x") plt.ylabel("密度") plt.title("Beta 分布的形状") plt.legend() plt.grid(alpha=0.3) plt.show()