2. 拉丁超立方采样的基本原理
拉丁超立方采样(Latin Hypercube Sampling,LHS)是一种分层随机抽样方法,最早由McKay等人在1979年提出,用于计算机实验设计与不确定性分析。它的核心思想可以用一句话概括:把每个输入参数的取值范围等分成若干层,保证每一层恰好被采样一次,再将各维度的层随机配对。理解这句话,就理解了LHS的全部精髓。
分层采样思想:从"随机撒点"到"每层必到"
设想我们要在一个一维区间 [0, 1] 内抽取 n = 5 个样本点。简单随机采样(Simple Random Sampling,SRS)的做法是独立生成5个均匀随机数,结果可能全部落在 [0.2, 0.4] 区间,而 [0.8, 1.0] 区间一个点也没有——这种"扎堆"和"空洞"是随机性带来的固有缺陷。
LHS的做法则不同:先将 [0, 1] 等分为5个互不重叠的层:[0, 0.2)、[0.2, 0.4)、[0.4, 0.6)、[0.6, 0.8)、[0.8, 1.0]。然后强制规定每个层内必须且只能抽取一个样本点。具体操作是:在第 i 层内生成一个均匀随机数,即
x_i = (i - 1 + u_i) / n, i = 1, 2, ..., n, u_i ~ U(0, 1)
以 n = 5 为例,若随机生成的 u = [0.73, 0.21, 0.88, 0.45, 0.06],则样本点为 x = [0.146, 0.242, 0.576, 0.690, 0.812]。可以看到,每个0.2宽的层内恰好有一个点,样本在区间上的分布天然比SRS更均匀。这就是"分层"带来的确定性约束:随机性只保留在层内的具体位置,层与层之间的覆盖则由设计保证。
多维扩展:分层 + 随机配对
当输入参数不止一个时,LHS对每一维独立执行上述分层抽样,得到每维的 n 个层内样本值,然后将各维的样本值随机配对,形成 n 个多维样本点。例如二维情形下,x 维的5个值按随机排列与 y 维的5个值组合,每一对 (x_i, y_i) 构成一个样本点。
这里有一个关键性质需要强调:LHS保证的是每一维边缘分布上的分层均匀性,即"一维投影均匀性",但并不保证样本在二维或高维联合空间中的均匀散布。随机配对可能产生不理想的组合——比如x的最小层恰好与y的最小层配对,导致样本点聚集在角落。这正是后续章节要讨论的"正交拉丁超立方"和"最大化最小距离准则"等改进方法的出发点。
与简单随机采样、全因子设计的对比
把LHS放在SRS和全因子设计之间,能更清楚地看出它的定位。下表从几个关键维度进行对比(以 n 个样本、d 个参数为例):
| 对比维度 | 简单随机采样 SRS | 拉丁超立方 LHS | 全因子设计 |
|---|---|---|---|
| 样本量 | n(任意) | n(任意,通常取层数) | md(随维数指数增长) |
| 一维投影覆盖 | 随机,可能扎堆/空洞 | 每层恰好一个点,覆盖有保证 | 规则网格,覆盖确定 |
| 随机性 | 完全随机 | 层内随机,层间受约束 | 无随机性 |
| 高维适用性 | 好(但效率低) | 好(样本量不随维数爆炸) | 差(维数灾难) |
| 典型用途 | 蒙特卡洛积分基线 | 敏感性分析、不确定性量化 | 低维精确实验设计 |
从表中可以看出三者的本质差异:SRS用"纯随机"换取无偏性,但样本效率低;全因子设计用"完全规则"换取确定性覆盖,但样本量随维数指数增长;LHS则在两者之间取得平衡——用分层约束保证一维投影的均匀覆盖,同时保持样本量线性可控,且保留层内随机性以支持统计推断。
举个具体的量化例子:假设有 d = 6 个参数,每个参数取5个水平。全因子设计需要 56 = 15625 个样本点;而LHS只需 n = 5 个样本点就能保证每个参数的每一层都被覆盖一次。当然,5个样本点无法刻画6维联合空间的全部交互结构,但在筛选主要效应、估计参数边缘分布和进行方差分解时,LHS的性价比远高于全因子设计。
实际使用中的关键操作与判断
在工程实践中实施LHS,通常按以下要点操作。以Python的SciPy为例,核心调用为:
from scipy.stats import qmc
sampler = qmc.LatinHypercube(d=3, seed=42)
sample = sampler.random(n=20) # 生成 [0,1)^3 内的20个LHS点
scaled = qmc.scale(sample, [0, 0, 0], [10, 5, 100]) # 映射到实际参数范围
生成样本后,需要做两项基本检查。第一,一维投影检查:对每一维,将样本值排序后检查是否每个层区间内恰好有一个点——这是LHS正确性的直接验证。第二,空间填充性检查:计算样本点之间的最小欧氏距离,若发现某些点过于接近,说明随机配对产生了不利组合,可考虑使用 qmc.LatinHypercube(d, optimization="random-cd") 进行优化,或改用正交拉丁超立方。此外,若参数之间存在已知相关性,不能直接对独立LHS样本做线性变换,而应使用 qmc.LatinHypercube 配合Iman-Conover方法或高斯Copula来引入相关性,否则会破坏分层结构。
总结来说,LHS的原理并不复杂:分层保证覆盖,随机保留多样性,配对实现多维扩展。真正需要掌握的是它的适用边界——它擅长处理"每个参数都要被充分代表"的问题,而不擅长刻画高维联合分布中的精细结构。理解这一点,才能在后续的参数覆盖与敏感性分析中正确选择和使用它。