Skip to content

概率分布

概率分布描述了随机结果如何在可能的值上分布。本文件记录了关键的离散和连续分布:伯努利、二项、泊松、高斯、指数、贝塔等,给出了每个分布的公式、直观理解以及机器学习应用(损失函数、先验、噪声模型)。

  • 在第4章中我们介绍了随机变量、PMF、PDF和CDF。这里我们列举在机器学习和统计学中你会遇到的最重要的概率分布,给出每个分布的直观理解、公式、均值和方差。

  • 快速回顾三个核心函数(完整定义见第4章):

    • 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)。

  • 伯努利分布:最简单的分布。单次试验有两个结果:成功(1)概率为 \(p\),失败(0)概率为 \(1-p\)

\[P(X = x) = p^x (1 - p)^{1-x}, \quad x \in \{0, 1\}\]
  • 均值:\(E[X] = p\)。方差:\(\text{Var}(X) = p(1-p)\)

  • 每一次抛硬币、每一次是/否分类、每一个二元结果都是一个伯努利试验。在机器学习中,sigmoid函数的输出正是伯努利分布的参数 \(p\)

  • 二项分布:统计 \(n\) 次独立伯努利试验中成功的次数,每次成功概率相同为 \(p\)

\[P(X = k) = \binom{n}{k} p^k (1-p)^{n-k}, \quad k = 0, 1, \ldots, n\]
  • 文件01中的二项式系数 \(\binom{n}{k}\) 统计了在 \(n\) 次试验中安排 \(k\) 次成功的方式数。

  • 均值:\(E[X] = np\)。方差:\(\text{Var}(X) = np(1-p)\)

伯努利为单一条形图 vs 二项为计数上的分布

  • 示例:抛一枚有偏硬币(\(p = 0.7\))八次。恰好得到6次正面的概率是 \(\binom{8}{6}(0.7)^6(0.3)^2 = 28 \times 0.1176 \times 0.09 \approx 0.296\)

  • 泊松分布:在固定的时间或空间区间内,给定已知的平均发生率 \(\lambda\),统计事件发生的次数。当事件罕见且独立时很有用。

\[P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}, \quad k = 0, 1, 2, \ldots\]
  • 均值:\(E[X] = \lambda\)。方差:\(\text{Var}(X) = \lambda\)。均值等于方差,这是一个标志性性质。

  • 示例:每小时电子邮件数量(\(\lambda = 5\)),每页拼写错误数,每秒服务器请求数。在机器学习中,泊松回归对计数数据建模,而线性模型会预测出负数。

  • \(n \to \infty\)\(p \to 0\) 且保持 \(np = \lambda\) 常数时,二项分布 \((n,p)\) 收敛于泊松分布 \((\lambda)\)。这就是为什么泊松分布在大总体中罕见事件上表现良好。

  • 几何分布:统计直到首次成功所需的试验次数。“我需要抛多少次硬币才能得到第一个正面?”

\[P(X = k) = (1-p)^{k-1} p, \quad k = 1, 2, 3, \ldots\]
  • 均值:\(E[X] = 1/p\)。方差:\(\text{Var}(X) = (1-p)/p^2\)

  • 几何分布是无记忆的:再等待 \(k\) 次试验才成功的概率与你已经等待了多少次试验无关。这使其在离散分布中具有特殊性。

  • 负二项分布:通过统计直到第 \(r\) 次成功所需的试验次数来推广几何分布(几何分布是 \(r=1\) 的特例)。

\[P(X = k) = \binom{k-1}{r-1} p^r (1-p)^{k-r}, \quad k = r, r+1, r+2, \ldots\]
  • 均值:\(E[X] = r/p\)。方差:\(\text{Var}(X) = r(1-p)/p^2\)

  • 负二项分布在实践中也用于对过度离散的计数数据(方差超过均值)建模,这是泊松分布无法处理的。

  • 现在我们转向连续分布。

  • 均匀分布:区间 \([a, b]\) 内的所有值等可能。PDF是一个平坦的矩形。

\[f(x) = \frac{1}{b - a}, \quad a \le x \le b\]
  • 均值:\(E[X] = \frac{a+b}{2}\)。方差:\(\text{Var}(X) = \frac{(b-a)^2}{12}\)

  • 随机数生成器以生成 Uniform(0,1) 样本作为起点。其他分布通过对这些均匀样本进行变换得到。

  • 正态(高斯)分布:统计学中最重要的分布。它由中心极限定理(见第4章)自然产生:许多独立随机变量的平均值趋向于正态分布,无论原始分布是什么。

\[f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\!\left(-\frac{(x - \mu)^2}{2\sigma^2}\right)\]
  • 均值:\(E[X] = \mu\)。方差:\(\text{Var}(X) = \sigma^2\)

  • 标准正态具有 \(\mu = 0\)\(\sigma = 1\)。任何正态变量 \(X\) 可以通过 \(Z = (X - \mu)/\sigma\) 标准化为标准正态 \(Z\)

带有68-95-99.7经验法则区域阴影的钟形曲线

  • 经验法则(68-95-99.7法则)说明:

    • 大约68%的数据落在均值的 \(\pm 1\sigma\) 范围内
    • 大约95%落在 \(\pm 2\sigma\) 范围内
    • 大约99.7%落在 \(\pm 3\sigma\) 范围内
  • 在机器学习中,正态分布无处不在:权重初始化、数据增强中的噪声、MSE损失背后的假设(它隐含地假设高斯误差)以及变分自编码器中的重参数化技巧。

  • 指数分布:对泊松过程中事件之间的时间建模。如果事件以速率 \(\lambda\) 到达,则它们之间的等待时间服从指数分布 \((\lambda)\)

\[f(x) = \lambda e^{-\lambda x}, \quad x \ge 0\]
  • 均值:\(E[X] = 1/\lambda\)。方差:\(\text{Var}(X) = 1/\lambda^2\)

  • 与离散变量的几何分布类似,指数分布是无记忆的\(P(X > s + t | X > s) = P(X > t)\)。再等待 \(t\) 时间的概率与你已经等待了多长时间无关。

  • 伽马分布:推广了指数分布。它对泊松过程中第 \(\alpha\) 个事件的时间建模(指数分布对应 \(\alpha = 1\))。

\[f(x) = \frac{\beta^\alpha}{\Gamma(\alpha)} x^{\alpha - 1} e^{-\beta x}, \quad x > 0\]
  • 这里 \(\alpha\)(形状)控制形状,\(\beta\)(比率)控制尺度。\(\Gamma(\alpha)\) 是伽马函数,它将阶乘扩展到实数:对于正整数 \(n\)\(\Gamma(n) = (n-1)!\)

  • 均值:\(E[X] = \alpha/\beta\)。方差:\(\text{Var}(X) = \alpha/\beta^2\)

  • 贝塔分布:定义在区间 \([0, 1]\) 上,非常适合对概率、比例和比率建模。

\[f(x) = \frac{x^{\alpha - 1}(1 - x)^{\beta - 1}}{B(\alpha, \beta)}, \quad 0 \le x \le 1\]
  • 分母 \(B(\alpha, \beta) = \frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha + \beta)}\) 是贝塔函数,一个归一化常数。

  • 均值:\(E[X] = \frac{\alpha}{\alpha + \beta}\)。方差:\(\text{Var}(X) = \frac{\alpha\beta}{(\alpha+\beta)^2(\alpha+\beta+1)}\)

  • 贝塔分布是伯努利和二项似然的共轭先验。这意味着如果你的先验是贝塔分布,数据是伯努利分布,那么后验也是贝塔分布,这使得贝叶斯更新在解析上易于处理。我们将在文件04中使用它。

四种常见分布形状:均匀、指数、贝塔、泊松

  • 卡方分布\(\chi^2\)):如果你取 \(k\) 个独立的标准正态随机变量并平方求和,结果服从自由度为 \(k\)\(\chi^2\) 分布。
\[f(x) = \frac{1}{2^{k/2}\Gamma(k/2)} x^{k/2 - 1} e^{-x/2}, \quad x > 0\]
  • 均值:\(E[X] = k\)。方差:\(\text{Var}(X) = 2k\)

  • \(\chi^2\) 分布实际上是伽马分布的特例,其中 \(\alpha = k/2\)\(\beta = 1/2\)。它出现在假设检验(第4章的卡方检验)、拟合优度检验以及计算方差的置信区间中。

  • 学生t分布:看起来像正态分布,但具有更重的尾部。当你使用小样本估计正态分布总体的均值且总体方差未知时,它会自然出现。

\[f(x) = \frac{\Gamma\!\left(\frac{\nu+1}{2}\right)}{\sqrt{\nu\pi}\,\Gamma\!\left(\frac{\nu}{2}\right)} \left(1 + \frac{x^2}{\nu}\right)^{-(\nu+1)/2}\]
  • 参数 \(\nu\) 是自由度。当 \(\nu \to \infty\) 时,t分布收敛到标准正态分布。在小 \(\nu\) 时,更重的尾部赋予极端值更大的概率,反映了小样本带来的额外不确定性。

  • 均值:\(E[X] = 0\)(当 \(\nu > 1\))。方差:\(\text{Var}(X) = \frac{\nu}{\nu - 2}\)(当 \(\nu > 2\))。

  • t分布用于t检验(第4章),并在贝叶斯推断中作为对未知方差积分时的边缘分布出现。

  • 关键分布总结:

分布 类型 支撑集 均值 方差
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)

  1. 绘制 \(n=20\) 时不同 \(p\) 值的二项分布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()
    

  2. 验证泊松对二项的近似。取 \(n = 1000\)\(p = 0.003\),比较二项分布 \((n, p)\) 和泊松分布 \((\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("泊松近似二项")
    plt.legend()
    plt.show()
    

  3. 从正态分布中采样并验证经验法则。统计落在1、2、3个标准差内的样本比例。

    import jax
    import jax.numpy as jnp
    
    key = jax.random.PRNGKey(42)
    mu, sigma = 5.0, 2.0
    samples = mu + sigma * jax.random.normal(key, shape=(100_000,))
    
    for k in [1, 2, 3]:
        within = jnp.abs(samples - mu) <= k * sigma
        print(f"{k}σ 内:{within.mean():.4f}(预期:{[0.6827, 0.9545, 0.9973][k-1]:.4f})")
    

  4. 通过改变 \(\alpha\)\(\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("贝塔分布形状")
    plt.legend()
    plt.grid(alpha=0.3)
    plt.show()