3. 验证数据集的构建原则
ROM(降阶模型)的精度验证,本质上是在回答一个问题:这个模型在它“没见过”的工况下,还能不能保持可信的预测能力。因此,验证数据集不是随手从仿真结果里切一块出来,而是需要围绕参数空间、工况覆盖和独立性三个维度进行有意识的设计。本节将围绕训练集、验证集与测试集的划分策略展开,重点讲清楚“怎么分、为什么这样分、分完之后如何检查”。
三个数据集的角色分工
在ROM建模流程中,三个数据集承担着不同的职责,混淆它们的角色是导致精度评估失真的常见原因。
- 训练集(Training Set):用于构建降阶基、拟合回归关系或训练代理模型。它决定了ROM“学到什么”。
- 验证集(Validation Set):用于超参数选择、基阶数截断、正则化强度调整等模型选择决策。它参与调参,因此不能用于最终精度报告。
- 测试集(Test Set):仅在模型完全确定后使用一次,用于给出无偏的泛化误差估计。它不参与任何训练或调参决策。
一个常见的错误是:用验证集反复调参后,直接把验证误差当作最终精度。这样得到的数字会偏乐观,因为验证集已经间接“泄漏”到了模型选择过程中。正确的做法是,当模型结构、超参数、基阶数全部锁定后,再在测试集上跑一次,得到最终报告值。
参数空间采样:让训练集“铺得开”
ROM的输入通常是若干物理参数,例如几何尺寸、材料属性、边界条件幅值等。训练集的采样策略直接决定了降阶基能否覆盖整个参数空间。
最朴素的做法是均匀网格采样。假设有两个参数:入口速度 v ∈ [1, 5] m/s,壁面温度 T ∈ [300, 500] K。如果每个方向取5个水平,就得到25个样本点。均匀网格的优点是覆盖均匀、易于实现;缺点是当参数维度升高时,样本数呈指数增长,即“维数灾难”。
更实用的替代方案是拉丁超立方采样(LHS)。LHS将每个参数区间等分为N份,在每个小区间内随机取一点,并保证每个参数的每个小区间恰好被命中一次。对于同样25个样本,LHS在二维平面上的投影比均匀网格更分散,能更好地填充参数空间。在工程实践中,LHS配合最大化最小距离准则(maximin)是训练集采样的常用起点。
如果已知某些参数方向对输出影响更大,还可以采用自适应采样:先粗采样建立初始ROM,再在误差较大的区域加密采样。这种方式适合参数空间较大、计算资源有限的场景。
工况覆盖:不只是参数点,更是物理状态
参数空间采样解决的是“点选在哪里”,工况覆盖解决的是“这些点是否代表了真实会遇到的物理状态”。两者不能互相替代。
以热-流耦合问题为例,即使参数点在空间上分布均匀,如果所有样本都处于层流状态,那么训练出的ROM在湍流工况下必然失效。因此,在划分数据集之前,需要先识别关键工况分区。例如:
- 雷诺数范围:层流区、过渡区、湍流区;
- 热边界条件:等温壁面、等热流壁面、对流换热壁面;
- 几何构型:不同长宽比、不同曲率、不同粗糙度。
一个可操作的检查方法是:把训练集样本按工况标签分组,确认每个工况分区内都有足够数量的样本。如果某个分区样本数为零或极少,就需要补充采样,或者明确声明ROM的适用范围不包含该工况。
独立测试设计:测试集必须“真的独立”
测试集的独立性体现在两个层面:参数独立和工况独立。
参数独立意味着测试集的参数点不能与训练集重合或过于接近。如果训练集用了 v=3.0 m/s,测试集再用 v=3.01 m/s,这本质上是在插值,无法检验外推能力。合理的做法是留出参数空间中的“空白带”,例如训练集覆盖 v ∈ [1, 4],测试集取 v ∈ (4, 5],专门检验外推精度。
工况独立意味着测试集应包含训练集中未出现的工况组合。例如训练集只有等温壁面,测试集加入等热流壁面;训练集只有单相流,测试集加入含相变工况。这种设计能暴露ROM在工况迁移时的失效模式。
下面这张图展示了训练集、验证集与测试集在参数空间中的典型划分关系,以及独立测试设计中的“留白带”概念。
图中训练集覆盖 v ∈ [1, 3.5],验证集取 v ∈ (3.5, 4],测试集取 v ∈ (4, 5]。验证集与测试集之间、训练集与验证集之间都保留了过渡带,避免样本点过于接近导致“伪独立”。测试集位于参数空间的最右端,专门用于检验ROM的外推能力。
划分比例与实操建议
对于ROM精度验证,常见的划分比例是训练集60%~70%、验证集15%~20%、测试集15%~20%。但这个比例不是硬性规定,需要根据样本总量和参数空间维度调整。
当样本总量较少(例如少于50个)时,可以采用k折交叉验证来替代固定验证集。具体做法是:将训练集分为k份(通常k=5或10),每次用k-1份训练、1份验证,循环k次后取平均验证误差。这样能更充分地利用有限样本,但计算成本会成倍增加。测试集仍然需要单独留出,不参与交叉验证。
当参数维度较高(例如超过5维)时,固定比例划分可能导致某些区域样本过少。此时可以考虑分层采样:先按工况分区,再在每个分区内按比例分配训练、验证、测试样本,确保每个工况分区在三个数据集中都有代表。
- 训练集参数范围是否覆盖了目标应用的主要区间?
- 验证集与训练集之间是否存在明显的参数间隙?
- 测试集是否包含至少一种训练集中未出现的工况?
- 三个数据集的样本是否来自同一次仿真批次?如果是,需确认没有共享中间状态。
- 测试集是否在模型锁定之前从未被使用过?
数据泄漏的常见来源
即使划分比例正确,数据泄漏仍可能悄悄发生。最常见的泄漏来源包括:
- 归一化泄漏:用全体数据的均值和方差做归一化,导致测试集信息进入训练过程。正确做法是只用训练集的统计量做归一化,再应用到验证集和测试集。
- 时间泄漏:如果样本来自瞬态仿真,训练集和测试集的时间步有重叠,会导致模型“记住”了测试时刻的状态。应按时间窗口整体划分,而不是随机打乱时间步。
- 工况泄漏:训练集和测试集共享了相同的边界条件文件或网格文件,导致模型间接接触了测试工况的几何信息。
检查数据泄漏的一个实用方法是:在训练完成后,观察训练误差与测试误差的差距。如果测试误差异常地低,甚至低于验证误差,就需要警惕是否存在泄漏。正常的泛化误差通常略高于验证误差,且随参数外推距离增加而增大。
小结与操作要点
验证数据集的构建不是一次性的划分动作,而是一个需要反复检查的设计过程。核心原则可以归纳为三点:训练集要“铺得开”,验证集要“调得准”,测试集要“隔得远”。参数空间采样保证覆盖均匀,工况覆盖保证物理代表性,独立测试设计保证评估无偏。在实际操作中,建议先画出参数空间分布图,标注训练、验证、测试区域,再检查是否存在留白带和工况缺口,最后确认归一化和时间划分没有引入泄漏。只有这三个环节都做到位,ROM的精度报告才具有可信度。