3. 采样矩阵的构造方法

拉丁超立方采样(LHS)的最终产物是一个 n × d 的样本矩阵:每一行是一个样本点,每一列是一个输入维度。理解这个矩阵如何从“分层”这一核心思想一步步构造出来,比记住某个库的调用方式更重要。本节把构造过程拆成三个可独立验证的环节:分层与排列矩阵、随机置换与坐标映射、维度与规模控制。

一、分层:把每个维度切成等概率区间

LHS 的第一条约束是“每个维度上每个小区间恰好被命中一次”。设样本数为 n,对第 j 个维度,把其累积分布函数 F_j 的值域 [0,1] 等分为 n 段,第 k 段为 [(k-1)/n, k/n)。在每个区间内取一个代表值,最常用的是区间中点:

u_k = (k - 0.5) / n ,  k = 1, 2, ..., n

这组 u_k 就是该维度在“标准均匀空间”中的分层坐标。若取 n = 5,则 u = [0.1, 0.3, 0.5, 0.7, 0.9]。注意此时还没有任何随机性——五个点均匀铺开,但顺序是固定的。真正的随机化发生在下一步:决定哪个样本点占用哪个区间。

二、排列矩阵:用置换决定“谁占哪个区间”

对每个维度独立生成一个 1..n 的随机排列 π_j,它规定了第 i 个样本在第 j 维上使用第几个区间。把所有维度的排列按列拼起来,就得到 n × d 的排列矩阵 P,其中 P[i][j] = π_j(i)。以 n = 5, d = 3 为例,一个可能的排列矩阵是:

P =
[ 3  1  5 ]
[ 1  4  2 ]
[ 5  2  4 ]
[ 2  5  1 ]
[ 4  3  3 ]

逐列检查:第 1 列是 {3,1,5,2,4},第 2 列是 {1,4,2,5,3},第 3 列是 {5,2,4,1,3},每列都恰好是 1 到 5 的一个排列。这正是 LHS 的“每维每层恰好一次”在离散形式下的体现。由于各列独立置换,不同维度之间的配对关系被打乱,从而获得类似随机的联合分布覆盖,而不是像全因子设计那样产生规则网格。

三、坐标映射:从区间序号回到物理量

排列矩阵给出的是区间序号,需要映射回标准均匀坐标,再经逆变换落到真实物理量。映射分两步:

  1. 序号 → 标准均匀值:u[i][j] = (P[i][j] - 0.5) / n。若希望区间内也有随机性,可改为 u = (P[i][j] - 1 + rand()) / n,即“随机 LHS”,但会牺牲严格的分层中点性质。
  2. 均匀值 → 物理值:x[i][j] = F_j^{-1}(u[i][j])。对均匀分布 [a,b],x = a + (b-a)u;对正态分布,x = μ + σ·Φ^{-1}(u);对对数正态,先取 Φ^{-1}(u) 再指数变换。

以第 1 行、第 1 维为例:P[1][1] = 3,u = (3-0.5)/5 = 0.5。若该维是 [10, 20] 的均匀参数,则 x = 10 + 10×0.5 = 15。若该维是 μ=100, σ=15 的正态参数,则 x = 100 + 15×Φ^{-1}(0.5) = 100。可见映射方式完全由该维的分布假设决定,排列矩阵本身与分布无关,这是 LHS 构造中“分层”与“分布”解耦的关键设计。

① 分层坐标 u_k=(k-0.5)/n, n=5 0.1 0.3 0.5 0.7 0.9 每维等概率区间 中点代表值 独立置换 ② 排列矩阵 P 每列是 1..n 的随机排列 维1 维2 维3 315 142 524 251 433 列内不重复 → 分层约束 列间独立 → 联合覆盖 映射 ③ 坐标映射 u=(P-0.5)/n x=F⁻¹(u) 均匀 [10,20] 正态 μ=100 对数正态 分布假设决定 物理量落点 ④ 样本矩阵 n×d x₁₁ x₁₂ x₁₃ x₂₁ x₂₂ x₂₃ x₃₁ x₃₂ x₃₃ x₄₁ x₄₂ x₄₃ x₅₁ x₅₂ x₅₃ 行=样本 列=维度

四、维度与规模控制:n 与 d 怎么定

样本矩阵的规模由两个数决定:样本数 n(行数)和维度数 d(列数)。d 通常由问题本身决定——有几个待扫描的输入参数就有几列,不能随意增减,但需要警惕“维度灾难”:当 d 较大时,即使 n 不小,样本在 d 维空间中也极其稀疏。经验上,若只关心一阶主效应,n 取 10d 到 20d 往往够用;若需要估计交互效应或做代理模型训练,n 应显著增大,常见做法是先跑 n = 10d 的筛选,再对敏感维度加密。

n 的选取还受两个工程约束影响。其一是可整除性:分层要求每个维度被切成 n 段,n 本身没有必须是 2 的幂之类的限制,但若后续要做交叉验证或分块并行,取便于分组的整数(如 20、50、100)更省事。其二是计算预算:每个样本点对应一次仿真或实验,n 直接等于运行次数,必须在精度与成本间折中。一个实用做法是先固定 d,用 n = 10d 起步,观察输出统计量的收敛情况,再决定是否加倍。

排列矩阵的生成只需一个随机数发生器,但要注意:不同维度的置换必须使用相互独立的随机流。若用同一个种子顺序生成各列,虽然结果仍是合法排列,但列间可能残留相关性,削弱 LHS 相对纯随机采样的优势。工程上可为每维分配独立子种子,或直接使用成熟的 LHS 库。

五、一个可复现的构造示例

下面用 Python 风格伪代码串起完整流程,参数为 n = 5, d = 3,三维分别为均匀 [10,20]、正态 μ=100, σ=15、均匀 [0,1]:

import numpy as np
n, d = 5, 3
P = np.column_stack([np.random.permutation(n) + 1 for _ in range(d)])
U = (P - 0.5) / n
X = np.empty((n, d))
X[:,0] = 10 + 10 * U[:,0]          # 均匀 [10,20]
X[:,1] = 100 + 15 * norm_ppf(U[:,1])  # 正态
X[:,2] = U[:,2]                     # 均匀 [0,1]

验证时只需检查两件事:每一列排序后是否恰好覆盖全部 n 个分层区间(即 U 的每列排序后等于 [0.1,0.3,0.5,0.7,0.9]),以及 X 的每列取值范围是否落在对应分布的支撑内。前者确认分层约束成立,后者确认映射没有写错。若把 U 的每列画成散点,应看到五个点均匀分布、无一区间空缺——这就是 LHS 区别于纯随机采样最直观的视觉特征。

最后需要强调:排列矩阵只保证边缘分层,不保证联合空间的最优填充。两个不同维度的置换可能偶然产生相近的配对,使样本在联合空间中局部聚集。若对空间填充性有更高要求,可在生成多个候选排列矩阵后,用最大最小距离等准则择优,这属于 LHS 的优化变体,其基础仍是本节这套“分层—置换—映射”的构造骨架。