2.5 常见连续分布
2.4 节按生成机制把离散分布串成一条线索:独立重复试验给出二项分布,稀有事件流给出泊松分布,停止规则的变化给出几何与负二项分布。连续分布的组织方式相同,区别在于取值充满区间,概率由密度函数在区间上的积分给出。生成机制的差别体现在密度的形状上:等可能的取值给出均匀分布,多个微小误差的叠加给出正态分布,等待若干次事件的时间给出伽马分布,乘性误差的累积给出对数正态分布。
本节沿用 2.4 节的叙述顺序,从最简单的生成机制出发逐步加入结构。每个分布给出生成机制、密度函数、期望与方差、典型场景与参数含义,并说明它与家族中其他分布的关系。末尾两节讨论指数族与最大熵分布,它们是把一大批分布统一起来的两种视角:指数族给出的是数学形式上的统一,最大熵给出的是信息论意义上的选择依据。这一条线索在 2.13 节的广义线性模型与后续的信息论章节中会再次出现。
2.5.1 连续分布的描述方式
密度、累积分布与分位数
连续型随机变量由概率密度函数(probability density function,PDF)
连续分布的密度函数必须满足
参数化约定
同一个分布可以用不同的参数组合表示,约定不一致是使用中的常见问题。指数分布既可以写成速率参数
不同软件包的默认约定不同。numpy.random.exponential 的参数是尺度 scipy.stats.expon 用 scale 表示尺度,而 scipy.stats.gamma 同时接受 a(形状)与 scale。读文档时先确认参数是速率还是尺度,再代入公式,可以避免大部分数值错误。
2.5.2 连续均匀分布
连续均匀分布(continuous uniform distribution)是最简单的连续分布:取值区间内任意等长的小区间概率相同。记作
期望与方差为
均匀分布的用途有两层。作为一种模型,它描述完全无信息的情形,参数的取值范围在没有额外知识时常用均匀分布作为先验(2.12 节)。作为计算工具,它是随机数生成的基础:2.2 节证明的概率积分变换
import numpy as np
from scipy import stats
rng = np.random.default_rng(2)
# 均匀分布的基本量
a, b = 2.0, 8.0
print(f"均值 = {stats.uniform(a, b - a).mean():.3f}") # 5.000
print(f"方差 = {stats.uniform(a, b - a).var():.3f}") # 3.000
# 用逆变换把均匀样本变成指数样本
u = rng.uniform(size=5)
print(f"均匀样本 = {np.round(u, 4)}")
print(f"指数样本 = {np.round(-np.log(1 - u) / 2.0, 4)}") # 速率 2 的指数分布2.5.3 正态分布
定义与标准化
正态分布(normal distribution)由两个参数确定,记作
密度曲线以
标准化把任意正态变量化为标准正态:
这一变换使所有正态分布的概率计算归结为一个函数。
数值计算中直接调用 scipy.stats.norm.cdf 即可。三条常用的经验值构成正态分布的经验法则:
线性组合的封闭性
正态分布对线性运算封闭。若
这条性质称为加法定理,它是正态分布在统计推断中地位突出的技术原因:均值是样本的线性组合,因此样本均值在正态总体下仍服从正态分布,区间估计与检验的分布可以精确写出。多维情形下正态分布对线性变换同样封闭,这一点在 2.6 节展开。
为什么正态分布普遍出现
正态分布出现在大量互不相关的场景中,原因有三条。中心极限定理(2.7 节)说明独立同分布随机变量之和的标准化形式依分布收敛到正态分布,只要单个变量的方差有限且对总和的贡献均匀,极限分布就是正态的。最大熵性质说明在给定均值与方差的前提下,正态分布是熵最大的分布,也就是说在所有满足这两个矩约束的分布中,它引入的额外假设最少。误差叠加的视角说明测量误差、制造偏差这类量由许多微小独立因素叠加而成,其和近似正态。
三条理由针对不同的问题,结论指向同一个分布。使用正态假设时需要注意它的前提:方差有限、尾部轻、单变量贡献不占主导。重尾数据的和收敛到稳定分布而非正态分布,这一点在 2.5.10 节的柯西分布处给出反例。
import numpy as np
from scipy import stats
# 正态分布的分位数与尾部概率
z = stats.norm.ppf(0.975)
print(f"z_0.975 = {z:.4f}") # 1.9600
print(f"P(|Z| > 2) = {2 * stats.norm.sf(2):.4f}") # 0.0455
# 加法定理验证:两个正态变量之和
rng = np.random.default_rng(4)
x = rng.normal(3, 2, size=200_000)
y = rng.normal(-1, 1, size=200_000)
s = 2 * x + 3 * y
print(f"和的样本均值 = {s.mean():.3f},理论值 = {2 * 3 + 3 * (-1):.3f}")
print(f"和的样本方差 = {s.var():.3f},理论值 = {2**2 * 2**2 + 3**2 * 1**2:.3f}")2.5.4 对数正态分布
若
期望与方差为
注意参数
适合对数正态的场景有一个共同特征:影响因素以比例方式起作用。收入受涨薪比例影响、股价受收益率影响、颗粒直径受增长速率影响,这些量的分布都是右偏且取正值,取对数后接近对称。判断数据是否适合对数正态的简单办法是对取值取对数后检查直方图与正态分位数图。
import numpy as np
from scipy import stats
# 对数正态的均值不等于 e^mu
mu, sigma = 0.0, 1.0
d = stats.lognorm(s=sigma, scale=np.exp(mu))
print(f"中位数 = {d.median():.4f},均值 = {d.mean():.4f}") # 1.0000,1.6487
print(f"P(X > 均值) = {d.sf(d.mean()):.4f}") # 0.3069,均值右侧的概率小于一半均值大于中位数是右偏分布的一般特征,对数正态中两者的差距随
2.5.5 指数分布与无记忆性
指数分布(exponential distribution)描述等待下一次事件的时间。记作
期望与方差为
指数分布最显著的性质是无记忆性(memorylessness):
已经等待了
指数分布还有一条便于计算的性质:多个独立指数变量的最小值仍服从指数分布,速率为各速率之和。
import numpy as np
from scipy import stats
lam = 0.5 # 速率参数,平均等待 2 个单位时间
print(f"均值 = {1 / lam:.3f},风险函数 = {stats.expon(scale=1/lam).pdf(0)/stats.expon(scale=1/lam).sf(0):.3f}")
# 无记忆性的模拟验证
rng = np.random.default_rng(9)
x = rng.exponential(scale=1 / lam, size=500_000)
cond = x[x > 3] # 已经等待超过 3 的样本
print(f"P(X > 3) = {(x > 3).mean():.4f}")
print(f"P(X > 5 | X > 3) = {np.mean(cond > 5):.4f},理论值 = {np.exp(-lam * 2):.4f}")2.5.6 伽马分布、厄兰分布与卡方分布
伽马分布
伽马分布(gamma distribution)是指数分布的推广,描述等待第
其中
期望与方差为
import numpy as np
from scipy import stats
rng = np.random.default_rng(13)
# k 个独立指数变量之和服从 Gamma(k, lambda)
k, lam = 3, 0.8
x = rng.exponential(scale=1 / lam, size=(200_000, k)).sum(axis=1)
print(f"样本均值 = {x.mean():.4f},Gamma 理论值 = {k / lam:.4f}")
print(f"样本方差 = {x.var():.4f},Gamma 理论值 = {k / lam**2:.4f}")
print(f"与 Gamma(k=3) 的分位数对照:{np.round(np.percentile(x, [25, 50, 75]), 3)}")
print(f" {np.round(stats.gamma(k, scale=1/lam).ppf([0.25, 0.5, 0.75]), 3)}")卡方分布
卡方分布(chi-squared distribution)是伽马分布的特例:
期望与方差为
import numpy as np
from scipy import stats
rng = np.random.default_rng(17)
k = 5
z = rng.normal(size=(100_000, k))
s = (z ** 2).sum(axis=1)
print(f"样本均值 = {s.mean():.4f},理论值 = {k}")
print(f"样本方差 = {s.var():.4f},理论值 = {2 * k}")
print(f"95% 分位数 = {np.percentile(s, 95):.4f},理论值 = {stats.chi2(k).ppf(0.95):.4f}")2.5.7 贝塔分布与狄利克雷分布
贝塔分布
贝塔分布(beta distribution)是定义在
其中
参数的直觉来自计数的类比。若某个成功概率的先验取
参数决定密度的形状:
import numpy as np
from scipy import stats
# 三种参数组合的贝塔分布
for a, b in [(1, 1), (2, 8), (0.5, 0.5)]:
d = stats.beta(a, b)
print(f"Beta({a}, {b}):均值 = {d.mean():.3f},方差 = {d.var():.4f},众数 = {d.mode() if a > 1 else float('nan'):.3f}")
# 二项观测后的后验更新
a_prior, b_prior = 2, 8
s, f = 7, 3
post = stats.beta(a_prior + s, b_prior + f)
print(f"后验均值 = {post.mean():.4f},先验均值 = {a_prior / (a_prior + b_prior):.3f}")狄利克雷分布
狄利克雷分布(Dirichlet distribution)是贝塔分布在多类别情形的推广,定义在概率单纯形上:
参数向量
狄利克雷分布是主题模型与多项分布贝叶斯建模的基础,也是贝叶斯非参数方法(狄利克雷过程)的出发点。
2.5.8 学生 t 分布与 F 分布
学生 t 分布
学生 t 分布(Student's t-distribution)由两个独立随机变量构造:
自由度
t 分布在统计推断中的位置来自参数未知这一现实。正态总体均值标准化时若
F 分布
F 分布(F-distribution)由两个独立的卡方变量之比构造:
它只取正值且右偏,期望在
| 分布 | 构造 | 主要用途 |
|---|---|---|
| 卡方 | 正态平方和 | 方差的推断、拟合优度检验 |
| t 分布 | 正态除以卡方平方根 | 均值在方差未知时的推断 |
| F 分布 | 两个卡方之比 | 方差比检验、方差分析 |
import numpy as np
from scipy import stats
# t 分布尾部的对比
for nu in [1, 5, 30, 200]:
d = stats.t(nu)
print(f"自由度 {nu:3d}:P(|T| > 3) = {2 * d.sf(3):.5f}")
print(f"标准正态:P(|Z| > 3) = {2 * stats.norm.sf(3):.5f}")
# 自由度小时尾部概率显著大于正态,自由度增大后靠近正态2.5.9 寿命分布:威布尔分布与瑞利分布
威布尔分布
威布尔分布(Weibull distribution)由形状参数
风险函数为
期望与方差可以写成伽马函数的形式
瑞利分布
瑞利分布(Rayleigh distribution)是威布尔分布在
它出现在两个独立同方差正态变量构成的向量模长上:若
import numpy as np
from scipy import stats
# 威布尔分布在不同形状参数下的风险走势
for k in [0.7, 1.0, 1.8]:
d = stats.weibull_min(k, scale=10)
h_at = lambda x: d.pdf(x) / d.sf(x)
print(f"k = {k:.1f}:风险函数 h(5) = {h_at(5):.4f},h(15) = {h_at(15):.4f}")
# k = 0.7 时风险随寿命下降,k = 1.8 时风险随寿命上升2.5.10 重尾分布:拉普拉斯、逻辑斯谛、柯西与帕累托
拉普拉斯分布
拉普拉斯分布(Laplace distribution)又称双指数分布,密度为
它关于
逻辑斯谛分布
逻辑斯谛分布(logistic distribution)的累积分布函数是逻辑斯谛函数(sigmoid),
逻辑斯谛函数把实数映射到
柯西分布
柯西分布(Cauchy distribution)的密度为
它是两个独立标准正态变量之比的分布,也是 t 分布在自由度为
柯西分布是检验统计方法假设的常用反例。看到重尾数据时先检查一阶矩是否合理存在,再决定能否使用基于均值的推断。比值的分布在尾部通常较重,用正态近似处理比值型统计量需要谨慎。
import numpy as np
from scipy import stats
rng = np.random.default_rng(29)
print("柯西分布的样本均值(样本量递增)")
for n in [10, 1000, 100_000, 1_000_000]:
s = rng.standard_cauchy(size=n).mean()
print(f" n = {n:>9,}:样本均值 = {s:8.3f}")
# 样本均值不随样本量增大而稳定,取值仍在正负几十之间跳动帕累托分布
帕累托分布(Pareto distribution)描述幂律衰减,密度为
2.5.11 极值分布
最大值的分布与单个观测的分布不同。设
三者的生存函数形式为
选择哪一型由原始分布的尾部决定:指数型尾部(正态、指数、伽马)对应冈贝尔型,幂律型尾部(帕累托、t 分布)对应弗雷歇型,有上界的分布对应韦布尔型。三型可以统一写成广义极值分布(generalized extreme value distribution,GEV)的形式,形状参数
极值分布的应用集中在极端事件的风险评估:一年中的最大降雨量、一批产品中的最大缺陷尺寸、金融市场中的最大单日损失。这些量的分布与平均水平的分布形态不同,用平均值的模型推断极端值会低估风险。极值定理的地位与中心极限定理相当:CLT 说明和的极限分布,极值定理说明最大值的极限分布。
2.5.12 矩阵分布与方向分布
Wishart 分布与逆 Wishart 分布
把卡方分布从一维推广到多维,得到协方差矩阵的分布。若
服从自由度为
冯·米塞斯分布与冯·米塞斯-费舍尔分布
角度、方向、周期数据不能直接用定义在实数轴上的分布建模。冯·米塞斯分布(von Mises distribution)把正态分布搬到圆周上,密度为
其中
2.5.13 指数族与自然参数
统一定义
前面介绍的分布在形式上差异很大,其中一大批可以写成统一的形式。若密度或概率质量函数可以表示为
则称该分布属于指数族(exponential family)。各个部件的含义如下:
| 记号 | 名称 | 作用 |
|---|---|---|
| 充分统计量 | 数据中承载参数信息的全部内容(2.9 节) | |
| 自然参数 | 参数的重参数化,使密度对参数呈线性指数形式 | |
| 对数配分函数 | 归一化常数,保证积分为 | |
| 基准测度 | 与参数无关的部分 |
正态、指数、伽马、贝塔、狄利克雷、泊松、二项、多项、几何、负二项分布都属于指数族。均匀分布(支撑依赖参数)与 t 分布(不属于正则指数族)是例外。用自然参数
对数配分函数与矩
第一式说明一阶导给出充分统计量的期望,第二式说明二阶导给出协方差矩阵,后者也是 Fisher 信息矩阵的来源(2.9 节)。这条性质把求期望与求导数联系起来,在需要重复计算矩的场合可以省去积分。
import numpy as np
from scipy import stats
# 正态分布的自然参数:eta1 = mu / sigma^2,eta2 = -1 / (2 sigma^2)
# 对数配分函数 A(eta) = -eta1^2 / (4 eta2) - 0.5 * log(-2 eta2)
def A(eta1, eta2):
return -eta1 ** 2 / (4 * eta2) - 0.5 * np.log(-2 * eta2)
mu, sigma = 2.0, 1.5
eta1, eta2 = mu / sigma ** 2, -1 / (2 * sigma ** 2)
# 数值求导与理论矩对照
h = 1e-6
dA_deta1 = (A(eta1 + h, eta2) - A(eta1 - h, eta2)) / (2 * h)
print(f"对 eta1 求导 = {dA_deta1:.4f},E[X] = {mu:.4f}")
print(f"二阶导近似 = {(A(eta1 + h, eta2) - 2 * A(eta1, eta2) + A(eta1 - h, eta2)) / h**2:.4f},Var(X) = {sigma**2:.4f}")为什么广义线性模型以指数族为基础
指数族的统一形式带来三项便利。充分统计量的维数固定,参数估计不需要存储全部数据;对数配分函数的导数给出矩,使期望与方差的关系可以写成简洁的形式;自然参数与线性预测子之间存在自然对应,广义线性模型把
2.5.14 最大熵分布
最大熵原理
同一个均值与方差可以对应无穷多个分布,选择哪一个需要一条准则。最大熵原理(maximum entropy principle)的准则是在满足已知约束的分布中选择熵最大的那一个。熵度量分布的不确定性(信息论章节将给出严格定义),熵最大的分布是在满足约束的前提下引入最少额外假设的分布。
三条典型结论:
| 约束条件 | 最大熵分布 |
|---|---|
| 支撑有限,无其他约束 | 均匀分布 |
| 支撑为 | 指数分布 |
| 支撑为 | 正态分布 |
前两条可以直接由变分法推出,第三条说明正态分布在给定前两阶矩的所有分布中引入的额外假设最少。这一结论为正态假设提供了信息论上的依据:使用正态分布的理由在于只知道均值与方差时它最保守,数据是否真的服从正态无须断言,只需要接受这两条矩约束。
与指数族的联系
最大熵分布在约束为矩约束时恰好属于指数族。约束
指数上的系数
2.5.15 本节小结
按生成机制组织的连续分布地图
本节按生成机制把连续分布组织成一条线索。均匀分布描述完全无信息的情形并充当随机数生成的基础;正态分布由微小误差的叠加产生,对线性组合封闭,是均值推断的默认模型;对数正态分布对应乘性误差的累积;指数分布描述首次事件等待时间,无记忆性使风险函数保持恒定;伽马分布是多个指数等待时间之和,卡方、指数都是它的特例;贝塔与狄利克雷分布描述比例与概率向量,参数的计数解释使它们成为共轭先验;t 与 F 分布分别由正态与卡方的组合构造,承担方差未知与方差比较的推断任务;威布尔与瑞利分布用形状参数刻画风险的走势;拉普拉斯、逻辑斯谛、柯西、帕累托构成重尾家族,其中柯西分布是均值不存在、大数定律失效的反例;极值分布刻画最大值的极限行为,与中心极限定理形成对照。指数族把大批分布写成统一形式,对数配分函数的导数给出矩;最大熵原理在矩约束下给出同一形式,为分布的选择提供依据。
连续分布是一维对象。实际的建模对象往往是多个变量的联合行为:图像是像素的联合分布,文本是词序列的联合分布,一次实验会同时记录多个指标。下一节把视角从单个随机变量扩展到随机向量,讨论联合分布、条件分布、协方差结构与多元正态分布的性质,为多元统计与降维方法提供语言。
练习题
第 1 题 概念推导
设
参考答案
无记忆性:由条件概率的定义与生存函数
最小值:对
这正是速率
第 2 题 计算推理
某设备的使用寿命(单位:千小时)服从形状参数
参考答案
超过 10 千小时的概率:
条件概率:
而
两个概率不相等的原因是威布尔分布在
第 3 题 代码验证
用模拟验证两条分布关系。第一条:伽马分布是多个独立指数变量之和,取形状参数
参考答案
import numpy as np
from scipy import stats
rng = np.random.default_rng(41)
# 第一条:指数之和的分布
k, lam = 4, 0.5
sim = rng.exponential(scale=1 / lam, size=(200_000, k)).sum(axis=1)
theory = stats.gamma(k, scale=1 / lam)
qs = [0.1, 0.5, 0.9]
print("模拟分位数:", np.round(np.percentile(sim, [q * 100 for q in qs]), 3))
print("理论分位数:", np.round(theory.ppf(qs), 3))
# 第二条:对数配分函数的导数给出矩
def A(eta1, eta2):
return -eta1 ** 2 / (4 * eta2) - 0.5 * np.log(-2 * eta2)
mu, sigma = 1.0, 2.0
e1, e2 = mu / sigma ** 2, -1 / (2 * sigma ** 2)
h = 1e-5
d1 = (A(e1 + h, e2) - A(e1 - h, e2)) / (2 * h)
d2 = (A(e1, e2 + h) - 2 * A(e1, e2) + A(e1, e2 - h)) / h ** 2
print(f"∂A/∂η₁ = {d1:.4f},E[X] = {mu:.4f}")
print(f"二阶导 = {d2:.4f},Var(X)·2 = {2 * sigma ** 2:.4f}") # 与 η₂ 对应的二阶导第一条验证中模拟分位数与伽马分布的理论分位数在三位小数上一致,说明独立指数和的分布就是伽马分布。第二条中
第 4 题 综合应用
某内容平台想估计某篇文章的点击率
参考答案
先验
共轭更新后,后验为
后验均值为
不加先验的极大似然估计为
可以看到先验的权重等于先验样本量占总样本量的比例,
常见错误
错误 1 · 混淆速率参数与尺度参数
原因:指数分布与伽马分布都有两套参数化,速率 scipy.stats.expon(scale=2) 的均值是 numpy.random.exponential(scale=2) 的均值同样为
解决:读文档确认参数含义,在代码中用变量名标明单位与角色,例如把参数命名为 rate 或 scale。手算与代码结果对照一次均值,可以及早发现参数方向的错误。
错误 2 · 把密度值当作概率
原因:连续分布的密度可以大于
解决:需要概率时对密度积分,或用累积分布函数求差。比较不同尺度变量的概率只需在同一尺度下比较累积分布函数,不必比较密度的高度。
错误 3 · 对重尾数据使用正态假设
原因:正态分布要求方差有限且尾部按指数速度衰减。柯西分布的均值为不存在,帕累托分布在尾部指数较小时方差不存在,这些数据上用样本均值与样本标准差做推断,结论没有意义:样本均值的波动不随样本量减小,置信区间与检验的近似全部失效。
解决:先检查数据的尾部。取对数后看直方图、计算超出若干倍标准差的观测比例、与正态分位数图对照,都是识别重尾的手段。确认重尾后改用基于分位数与秩的方法,或选择能容纳重尾的分布族。
错误 4 · 把小样本下的 t 分布与正态分布等同看待
原因:自由度较大时 t 分布与标准正态几乎没有差别,这一印象被带到小样本场景中。自由度取
解决:方差未知的均值推断统一使用 t 分布,让自由度自动处理尾部的补偿。判断差别是否可忽略时比较尾部分位数而不是中心的形状,