“你的燃烧室在数值仿真里一切都好,压力脉动、温度场、速度分布都很漂亮。但一上试车台,发动机开始轰鸣,压力振荡幅度飙到平均压力的5%以上——热声不稳定出现了。问题是,这个结果在仿真里其实早就‘可能’存在,只是你当时的预测没告诉你有这个风险。”
这是我在做燃烧不稳定预测时最深的感触。单一预测值,哪怕来自高保真的大涡模拟,也只给了你“最可能”的结果,却没告诉你这个结果有多可靠。而在火箭发动机、燃气轮机的研制中,一个“看起来稳定”的误判,代价可能是整机损毁。这也是为什么,我在这几年开始系统性地把不确定性量化(UQ)引入到燃烧不稳定的机器学习预测里,而不只是丢出一个分类标签或回归值。这篇内容,就来拆解这条技术路线:思路、框架、MATLAB实现,以及那些在论文摘要里看不到的坑。
1. 燃烧不稳定预测的真正困境:为什么单一预测值不够用
1.1 热声耦合机制与预测难点
先用最直白的方式说清楚燃烧不稳定是什么。燃烧室内部同时存在两套波动系统:一套是声学压力脉动,一套是热释放率脉动。这两者一旦形成正反馈,热释放率的波动会持续向声场注入能量,压力振荡就会指数级增长,直到非线性效应把它限制在某个极限环幅值。这个现象有个经典的判定准则——Rayleigh准则:
当压力脉动 p'(t) 与热释放率波动 q'(t) 在一个周期内的积分大于零时,声能净增加,燃烧系统趋向不稳定。
$$ \oint p'(t) q'(t) dt > 0 $$
听起来很简单,但真正棘手的地方在于:这个积分值高度依赖于火焰的动力学响应特性,而火焰响应又受到当量比、入口温度、流速、几何结构、声学边界条件等几十个参数的影响。更麻烦的是,燃烧室的声学模态与火焰位置之间的相位关系,会随着工况偏移而发生剧烈变化。这就导致燃烧稳定性边界在实际工程中不是一条平滑曲线,而是一块布满“稳定岛”和“不稳定岛”的复杂地形。
传统预测方案主要有三条路:高保真CFD耦合声学求解器、低阶热声网络模型、实验扫参。CFD路径精度高,但单个工况算一次大涡模拟可能要耗费数万CPU核时;低阶模型快,但依赖大量经验参数,比如火焰传递函数(FTF)的拟合精度直接决定预测成败;实验扫参最可靠,但成本高周期长,而且很多极限工况在台架上根本不敢测。
1.2 确定性预测的局限与工程代价
在相当长的时间里,工程上习惯了“预测一个稳定/不稳定的判定结果”。但这种确定性输出的价值,比想象中要小得多。原因有三点:
第一,模型误差是客观存在的。低阶模型有经验参数拟合误差,CFD有湍流模型和燃烧模型的固有偏差。你算出增长率为-50 s⁻¹,判定为稳定,但模型误差是±60 s⁻¹,那这个“稳定”结论在统计上根本不显著。
第二,输入参数本身就有不确定性。实际发动机运行时的当量比、入口温度,不可能是一个绝对精确的定值,而是在某个区间内波动。哪怕你把物理模型做到完美,输入的不确定性也会通过系统传播到输出端。
第三,工程决策需要的是风险量化。研制部门要回答的不是“稳定还是不稳定”,而是“在这个工况附近,不稳定的概率有多大”。这决定了试车策略、裕度设计、主动控制系统触发阈值等一连串工程动作。
所以,把不确定性量化引入燃烧不稳定预测,不是学术上的“锦上添花”,而是工程落地的刚需。我的基本思路是:用机器学习模型作为物理仿真的快速代理,在秒级时间内完成大批量工况评估;同时利用概率模型天然的不确定性输出能力,给每个预测结果附带置信区间。这个组合,就是在标题里说的“机器学习增强策略对燃烧不稳定预测进行不确定性量化”。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 机器学习增强策略:不是替代物理模型,而是给物理模型装上“快速代理”
2.1 三种增强路径的选型逻辑
“机器学习增强”这个词,听着玄乎,实际落地方案大致可以分成三类,我挨个说清楚它们的思路和试用场景。
第一种是纯数据驱动的替代模型。用足够多的高保真仿真或实验数据,直接训练一个输入到输出的映射。特点是训练数据要求高,但一旦训练完成,预测速度极快。常用的模型包括高斯过程回归、随机森林、支持向量回归、深度神经网络。
第二种是物理信息约束的增强模型。在损失函数中加入物理方程残差项,或者在网络结构上强制满足某些对称性和边界条件。这类方案的好处是外推能力更强,但实现复杂度和训练难度明显上升,属于进阶玩法。
第三种是模型降阶配合机器学习。先对高维流场做本征正交分解(POD),把数千维的流场压缩成几十个模态系数,再用机器学习模型学习“输入参数到模态系数”的映射。这种方案能保留部分流场空间信息,适合需要输出详细流场结构的场景。
在我做的燃烧不稳定预测项目里,选型逻辑可以简化成这几条判断标准:
- 输出目标是什么?如果只关心稳定性标志或增长率,不需要重建完整流场,那纯数据驱动模型就够用。
- 样本量有多少?燃烧不稳定领域的高保真样本通常很稀缺,几十到几百个量级,深度神经网络这种大参数模型容易过拟合,高斯过程回归反而是更稳的选择。
- 是否需要不确定性输出?这是最关键的一条。支持向量回归和随机森林虽然也能给出预测值,但不确定性估计很难做,而高斯过程回归天然附带预测方差。
综合下来,我的主模型选择了高斯过程回归(GPR),这也是MATLAB里实现最顺手、工具链最成熟的概率机器学习模型。
2.2 高斯过程回归(GPR)建模与参数空间采样
GPR的核心思想是从函数空间做贝叶斯推断。简单说,我们不给输出一个确定的函数表达式,而是给函数本身一个先验分布——高斯过程。观测数据进来后,通过贝叶斯更新得到后验分布。任意新输入点的预测值,都是一个高斯分布,均值就是最优预测,方差就是不确定性。
数学上,GPR假设函数 f(x) 服从高斯过程先验:
$$ f(x) \sim \mathcal{GP}(m(x), k(x, x')) $$
其中 m(x) 是均值函数,一般取零;k(x, x') 是协方差函数(核函数),决定了函数的光滑性和不同输入点之间的关联程度。给定训练数据后,新输入点 x* 的预测均值和方差分别是:
$$ \mu_* = K_*^T K^{-1} y $$
$$ \sigma_^2 = k(x_, x_) - K_^T K^{-1} K_* $$
这个方差,就是我们要的认知不确定性(epistemic uncertainty)——它刻画的是“数据不足导致的模型置信度下降”。训练数据覆盖越充分的地方,方差越小;距离训练数据越远的地方,方差越大。这个性质,对燃烧不稳定的工况外推判断特别有价值。
参数空间采样方面,我不建议用普通的随机抽样。燃烧不稳定预测是多参数问题,典型维度在五到十几个之间,纯随机抽样(蒙特卡洛)在高维空间很容易产生聚集和空洞,样本利用率不高。拉丁超立方采样(Latin Hypercube Sampling, LHS)是更合理的选择:它把每个参数的分布区间分成等概率的N个区间,然后保证每个区间恰好被抽取一次,这样用较少的样本就能覆盖整个参数空间。MATLAB的lhsdesign函数可以直接实现这个功能。
我把这种“LHS参数采样 + CFD/低阶模型批量仿真 + GPR训练 + 不确定性评估”的流程称为增强策略,因为GPR模型是挂在物理模型之外的“增强层”,既快速输出预测,又给出可信度边界。它不取代物理仿真,而是让物理仿真的价值最大化——用少量高保真样本,换取整个参数空间内的快速评估能力。
3. 不确定性量化框架的搭建:偶然不确定性与认知不确定性的分离
3.1 两类不确定性的数学定义与工程意义
做不确定性量化,第一步是把概念掰开揉碎。工程上通常把不确定性分成两大类,来源不同,处理方式也完全不同。
Aleatoric不确定性(偶然不确定性)来自系统本身的随机性。燃烧室内的湍流脉动、燃料喷射的波动、点火过程中的随机扰动,这些即使模型完全精确也无法消除。它像是掷骰子——骰子本身的物理过程决定了结果天然有随机性,你不可能通过改进模型来消除。
Epistemic不确定性(认知不确定性)来自模型对系统的认知不足。训练数据稀疏、输入参数测量不准确、简化模型的假设偏差,这些都会导致模型“不知道正确答案”。它像是看不清骰子的点数——增加观察次数、改进测量手段,不确定性就会下降。
这两种不确定性在工程决策上的意义完全不同。偶然不确定性决定了系统本身的噪声底限,它告诉工程师即使预测模型完美,批次之间的试车结果也会有散布,这直接关系到设计裕度的设定。认知不确定性则直接指导数据采集策略——哪里的认知不确定性高,就说明那里的训练数据不足,下一步仿真和实验应该优先补哪里。
区分这两类不确定性的工程价值,最直观的体现是:如果你的预测模型不确定性主要来自认知部分,那增加训练数据就能显著改善模型;如果主要来自偶然部分,你加再多数据也无济于事。这个判断,决定了资源投在哪里。
3.2 从GPR预测方差到95%置信区间
在标准GPR框架下,预测方差 σ² 代表的是认知不确定性。要把它转成工程可读的形式,最常用的做法是构造置信区间。
对于GPR,预测分布是高斯分布,所以95%置信区间可以直接用均值加上正负1.96倍标准差得到:
$$ \text{CI}{95%} = \mu* \pm 1.96 \sigma_* $$
这个区间的直观含义是:如果模型是准确的,那么真实值落在该区间内的概率是95%。但这里有个工程上特别容易踩的坑:GPR的方差对核函数设定非常敏感,如果核函数选择不当或超参数优化不充分,方差会严重失真——要么过于自信(区间过窄),要么过度保守(区间过宽)。
所以我不建议直接信任fitrgp的默认输出,而是要做一步“不确定性校准”。具体做法是拿一组验证数据,统计真实值落在95%置信区间内的比例,这叫覆盖率(coverage)。理想情况下,覆盖率应该在95%附近。如果实际覆盖率只有70%,说明模型给出的方差偏小,不确定性被低估了,这时候要检查核函数选择和数据量;如果覆盖率接近100%,说明方差偏大,预测结果过于保守。
这个校准过程,在我的MATLAB实现里是必须的一环。它不只是为了验收模型,更是为了工程决策时能把置信区间当成一个真实可信的指标来用。
4. MATLAB实现的关键代码模块与数据处理流程
4.1 训练数据生成与预处理
数据是GPR模型的粮食。在我的项目里,训练数据通过批量调用低阶热声网络模型生成。这个模型以当量比、入口温度、燃烧室长度、入口反射系数幅值和尾部阻抗相位为输入,输出压力振荡的增长率和频率。因为是参数扫描性质,我直接用LHS在五个参数组成的超立方体内生成了200个样本。
数据预处理有三件事必须做:
第一,特征标准化。GPR对输入特征的尺度非常敏感,当量比是0到1量级,而入口温度是300到800 K量级,如果不做标准化,核函数计算时距离度量会被大量纲特征主导,模型基本就废了。fitrgp里有一个'Standardize', true的选项,但这只会自动标准化预测变量,我建议在数据进入模型之前手动做一遍z-score标准化,便于后续手动干预和解释。
第二,异常值清洗。低阶模型在部分参数组合下可能因为数值发散给出离谱的增长率值,比如超过10000 s⁻¹,这明显不物理。我处理时会先画分布直方图或者用箱线图检查,然后根据物理常识设定上下界,把超界的样本剔除或标记。
第三,训练集/验证集划分。样本总量本来就少,我一般用70/30的比例,且在划分时使用分层抽样,保证验证集覆盖整个参数空间范围而不只是集中在某些区域。
下面是一段数据预处理的核心代码:
matlab复制% 加载原始训练数据
data = readmatrix('combustion_stability_dataset.csv');
X = data(:, 1:5); % 输入参数:当量比、入口温度、燃烧室长度、反射系数幅值、尾管阻抗相位
y = data(:, 6); % 输出:压力振荡增长率
% 剔除异常值:增长率超过物理合理范围 [-500, 1500] 的样本
validIdx = (y > -500) & (y < 1500);
X = X(validIdx, :);
y = y(validIdx, :);
% 标准化输入
mu_X = mean(X);
sigma_X = std(X);
X_norm = (X - mu_X) ./ sigma_X;
% 分层划分训练集和验证集
cv = cvpartition(size(X_norm, 1), 'HoldOut', 0.3);
X_train = X_norm(training(cv), :);
y_train = y(training(cv), :);
X_test = X_norm(test(cv), :);
y_test = y(test(cv), :);
4.2 fitrgp函数应用与超参数调优
MATLAB的Statistics and Machine Learning Toolbox里,GPR的入口是fitrgp。这个函数用起来门槛不高,但参数配置空间很大,不同的设定会得到差别很大的结果。我实践下来,最影响模型效果的是核函数选择和超参数优化策略。
核函数方面,我首选ardsquaredexponential(自动相关性确定平方指数核)。这个核函数最大的好处是它给每个输入维度分配一个独立长度尺度参数,训练过程中会自动学习哪个维度重要哪个不重要。重要维度的长度尺度会变小,不重要维度的长度尺度会变大,这就相当于内置了一个特征选择机制。对燃烧不稳定这种多参数问题来说,这个特性非常有用——它能在训练的同时告诉你,“入口温度的影响其实比燃烧室长度大得多”。
超参数优化方面,fitrgp提供了'HyperparameterOptimization', 'auto'选项,会自动跑贝叶斯优化寻找最优超参数。对于样本量不大的场景,这个选项够用。但如果样本量上千,自动优化会非常耗时,我建议改用手动指定初始值或者减少优化迭代次数。
核心训练代码:
matlab复制% 训练高斯过程回归模型
gprMdl = fitrgp(X_train, y_train, ...
'KernelFunction', 'ardsquaredexponential', ...
'Standardize', false, ... % 已在外部手动标准化
'Verbose', 1, ...
'HyperparameterOptimization', 'auto', ...
'OptimizerOptions', struct('AcquisitionFunctionName', 'expected-improvement-plus'));
% 在验证集上预测均值和标准差
[y_pred, y_std] = predict(gprMdl, X_test);
% 计算95%置信区间
ci_lower = y_pred - 1.96 * y_std;
ci_upper = y_pred + 1.96 * y_std;
% 计算覆盖率
coverage = mean((y_test >= ci_lower) & (y_test <= ci_upper));
fprintf('验证集RMSE: %.4f\n', sqrt(mean((y_pred - y_test).^2)));
fprintf('95%%置信区间覆盖率: %.2f%%\n', coverage * 100);
训练完成后的一个细节值得注意:直接查看训练好的模型参数,可以获取每个特征维度的长度尺度。MATLAB里可以通过gprMdl.KernelInformation访问核参数。如果某个维度的长度尺度明显大于其他维度,说明该特征对预测结果的贡献较弱,后续迭代考虑是否保留这个参数或者增加更有区分度的新参数。
4.3 不确定性可视化与结果导出
不确定性量化最重要的输出不是一张表,而是一张能让工程师一眼看出“哪里可靠、哪里不可靠”的图。在MATLAB里,我通常做三类可视化:
边界扫描图。固定其他参数在名义值,扫描两个关键参数(比如当量比和入口速度),输出增长率预测均值场和95%置信区间宽度场。用contourf画均值等高线,再用pcolor画区间宽度热力图,两张图并排放,能直观展示稳定边界的置信度高地。
单参数切片图。固定其他参数,扫描单一参数,画出预测均值曲线和置信区间带。用fill函数填充置信区间带,透明度设到0.3左右,再叠加训练数据点,效果非常好。
训练数据分布叠加图。把训练样本点在参数空间的分布和预测方差叠加显示,用来直观判断数据稀疏区域。
下面是边界扫描图的示例代码:
matlab复制% 构造扫描网格:当量比 0.6~1.2,入口速度 5~25 m/s
phi_vec = linspace(0.6, 1.2, 100);
u_vec = linspace(5, 25, 100);
[Phi, U] = meshgrid(phi_vec, u_vec);
% 输入矩阵:固定其他参数在名义值
X_grid_norm = zeros(numel(Phi), 5);
X_grid_norm(:, 1) = (Phi(:) - mu_X(1)) / sigma_X(1);
X_grid_norm(:, 2) = (600 - mu_X(2)) / sigma_X(2); % 入口温度名义值600K
X_grid_norm(:, 3) = (0.8 - mu_X(3)) / sigma_X(3); % 燃烧室长度名义值0.8m
X_grid_norm(:, 4) = (0.9 - mu_X(4)) / sigma_X(4); % 入口反射系数幅值名义值0.9
X_grid_norm(:, 5) = (pi/4 - mu_X(5)) / sigma_X(5); % 尾部阻抗相位名义值pi/4
% 预测
[y_grid_pred, y_grid_std] = predict(gprMdl, X_grid_norm);
y_grid_pred = reshape(y_grid_pred, size(Phi));
y_grid_std = reshape(y_grid_std, size(Phi));
% 绘制预测均值等高线
figure('Position', [100, 100, 1200, 450]);
subplot(1, 2, 1);
contourf(Phi, U, y_grid_pred, 50, 'LineStyle', 'none');
colorbar;
xlabel('当量比'); ylabel('入口速度 (m/s)');
title('预测增长率均值 (1/s)');
colormap(gca, 'jet');
% 绘制置信区间宽度
subplot(1, 2, 2);
pcolor(Phi, U, 2 * 1.96 * y_grid_std); % 95%区间总宽度
shading interp;
colorbar;
xlabel('当量比'); ylabel('入口速度 (m/s)');
title('95%置信区间宽度 (1/s)');
这个可视化出来以后,信息量比单纯一张预测等高线图大得多。你能直接看到哪个工况区域预测可信、哪个区域模型完全是在“盲猜”。
5. 验证案例:实验室旋流燃烧室的参数扫描与预测结果评估
5.1 案例设定与数据来源
为了验证整个框架的实际效果,我选用了一个经典的实验室旋流燃烧室模型作为测试对象。这个构型在公开文献里比较常见,基本结构和参数范围都相对成熟,适合做方法验证。
输入参数选了五个:当量比(范围0.7~1.1)、入口温度(450~700 K)、旋流数(0.6~1.0)、燃烧室长度(0.6~1.2 m)、入口反射系数幅值(0.7~0.98)。输出目标是压力振荡增长率,正值为不稳定,负值为稳定。数据通过低阶热声网络模型生成,总样本数200个,从中抽取140个作为训练集,60个作为验证集。这个样本规模在燃烧不稳定预测场景里是具有代表性的——真实项目中连100个高保真样本都很难凑齐。
这里强调一下,低阶热声模型虽然比CFD快得多,但每个工况仍然需要秒级到分钟级的计算,200个样本也要跑上一阵。如果用大涡模拟,这个样本量只能依靠超算集群。所以方法本身对数据来源并没有依赖,换成高保真仿真数据或者台架实验数据,流程完全一样,只是训练样本的“含金量”更高。
5.2 预测精度评估与不确定性区间覆盖率
模型训练完成后,我在验证集上做了严格的精度评估。三个关键指标:
RMSE(均方根误差):衡量预测均值与真实值的平均偏差。我得到的RMSE约为48 s⁻¹,相对于增长率动态范围(约-400到1200 s⁻¹),相对误差在6%左右,对于工程预测来说是可以接受的精度。
R²(决定系数):衡量模型对输出方差的解释能力。验证集R²达到了0.93,说明93%的输出变异都能被模型捕获,剩余的7%来自模型偏差和噪声。
覆盖率(coverage):这是不确定性量化的核心指标。我统计了验证集中60个样本的真实值落在95%置信区间内的比例,结果是91.7%。略微低于理论值95%,说明模型的不确定性估计有一点偏紧凑,但整体来说区间宽度和真实不确定性匹配度还是不错的。
为了验证不确定性随数据量收敛的行为,我还做了一组消融实验:分别用60、100、140个训练样本训练模型,观察验证集覆盖率和平均区间宽度变化。结果符合预期——训练样本从60增加到140时,覆盖率从85%上升到91.7%,平均区间宽度明显收窄,说明不确定性量化的确能够反映信息量的变化。
另一个有价值的结果是特征重要性的自动识别。训练完成后,我提取了ARD核函数的长度尺度参数。当量比对应的长度尺度最小,说明该参数对增长率预测的影响最大;旋流数的影响次之,入口反射系数幅值和燃烧室长度的影响相对较小。这个结论与燃烧理论的经验判断高度一致——当量比直接决定火焰温度和热释放脉动强度,是热声耦合最核心的驱动参数。模型能在不引入任何物理先验的情况下自动识别这层关系,这本身就是机器学习增强策略的一大优势。
6. 实操踩坑记录:数据稀疏、核函数选择与物理一致性约束
6.1 数据稀疏下的过拟合伪装
GPR在数据稀疏时有一个很容易被忽视的问题:预测均值可能很“准”,但方差极不可靠。具体表现是,训练点附近的置信区间异常窄,甚至窄到只有真实误差的1/10,而离开训练点马上变成天宽区间的“爆炸式”过渡。
我遇到过一次比较典型的情况:训练集只有80个样本,验证集覆盖率只有64%,也就是说64%的真实值都不在声称的95%置信区间内。检查原因后发现,问题出在核函数长度尺度的初始化上。默认初始化在某些数据集上会陷入局部最优,导致长度尺度选得过大,模型把数据点之间的相关性评估得过高,输出方差因此被压缩到过小。
解决办法是做一次交叉验证对比,把'KernelFunction'分别设置成squaredexponential和ardsquaredexponential,同时调大优化迭代次数,确保超参数优化不是浅尝辄止。最后我甚至手动给长度尺度设置了范围约束,把各维度长度尺度的下界设为0.1,上界设为10,避免优化器走到极端值去。
6.2 核函数选择对不确定性区间形状的直接影响
这是一个必须展开说的坑。MATLAB里fitrgp提供多种核函数,最常用的是squaredexponential(平方指数核)和matern32、matern52(马特恩核)。很多教程只告诉你怎么调参,不会告诉你核函数的平滑性假设会直接改变不确定性区间的形状。
平方指数核假设函数无限平滑,它对数据点之间的相关性估计偏高,在数据密集区域给出的置信区间会偏窄,而且预测曲线极度平滑。马特恩核只假设函数有限阶可导,对突变响应更敏感,在燃烧不稳定这种“存在稳定边界陡变”的场景里,马特恩核反而是更贴近物理的选择。
我的对比实测:用平方指数核时,稳定边界(增长率从负变正的过渡区)被预测成了一条平滑斜坡,置信区间在这个区域被严重挤压;换成matern52核后,边界处的预测变化更陡峭,置信区间也恰当地在那个区域撑开,反映了模型对突变位置确实没有把握。所以如果你处理的是本身就有剧烈变化过程的问题,不要无脑用默认核函数,试一下马特恩核,不确定性区间会诚实很多。
6.3 让预测符合物理直觉的约束方法
机器学习模型的输出不会自动遵守物理规律。最典型的例子:训练数据里没有任何一个样本出现增长率超过2000 s⁻¹,但模型在某些外推区域可能预测出3000 s⁻¹甚至更高的值。这个值不是不能出现,而是训练数据没有约束这个区域,模型只能靠核函数的平滑性硬推。
处理方式有两个层次。轻量级的做法是在后处理阶段设置物理上下界,把超出合理范围的预测值截断,同时把置信区间对应位置标记为“低置信度”。这能解决输出异常值,但不能解决“分布不合理”的问题。
更硬核的做法是在训练阶段引入物理约束,比如在损失函数中加入惩罚项,让预测结果趋向某个物理方程预期的趋势。MATLAB里实现这种物理信息GPR会比较绕,因为它不像TensorFlow/PyTorch那样可以自由定制损失函数。我实际工作中更多是靠约束采样空间来绕开这个问题,也就是在采样时就不让参数组合进入物理上不可能的区域,比如高当量比下同时出现极端高温这种工况组合,直接排除在LHS采样范围之外。
6.4 覆盖率分析的正确姿势
最后提醒一个分析陷阱。覆盖率这个指标看似客观,但很容易被误读。最典型的错误是把“覆盖率=95%”等价于“模型很准”。实际上覆盖率只衡量不确定性估计的自洽性,不衡精度。一个把方差输出放大到无穷大的模型,覆盖率能到100%,但预测区间毫无工程价值。
所以标准的评估方式是三重指标一起看:精度看RMSE和R²,自洽性看覆盖率,工程实用性看平均区间宽度。只有RMSE足够小、覆盖率接近置信水平、平均区间宽度又收窄到可接受范围的模型,才算真正做好了不确定性量化。在我的项目流程里,这个三重评估是模型交付之前的必经关卡,也是说服工程团队信任这套框架的关键证据。
另外,做覆盖率评估时验证集样本量不能太小。用30个样本去统计95%置信区间的覆盖率,置信度会低到你根本分辨不出模型是好是坏。我现在至少用60个验证样本,更严谨的时候会做bootstrap重采样,给覆盖率本身也附带一个区间估计。
回到开头那个场景。现在如果我拿到一个燃烧室方案,CFD算出的增长率是-80 s⁻¹,我不会直接说“这个方案稳定”,而是会告诉你“预测增长率为-80 s⁻¹,95%置信区间是[-260, 100] s⁻¹,落在不稳定区的概率大约是18%,尾部风险在这个方案里不可忽略,建议增加裕度或者补充对应工况的实验”。这套话术,才是把不确定性量化真正用到了工程决策的刀刃上。我个人在实践中体会最深的一点是:不要追求把不确定性区间压到最窄,那是自欺欺人;而是要把区间宽度调得恰好等于你“确实不知道”的程度,这样每一次工程决策,都知道自己在用什么精度做担保。
