Polynomial SVD - 多项式奇异值分解
真实的 CFD 仿真跑一次动辄几小时:网格几百万,带湍流,还要等残差收敛。但优化往往要跑成千上万个设计——直接跑真实仿真,时间不可接受。
RSM(Response Surface Model,响应面模型)的思路:先跑少量真实设计(DOE,20~50 个),用这些点拟合出一个快速数学函数,然后用这个函数替代真实仿真做快速优化。
① 采样:DOE 跑少量真实设计,得到训练数据(输入 x → 输出 y)
② 拟合:用这些点训练出一个数学函数 y = f(x)(这就是 Polynomial SVD 干的事)
③ 预测:新输入代入 f(x),毫秒级得到预测输出,可跑成千上万次优化
重要前提:RSM 是"近似",不是"精确"。预测值和真实值之间永远有差距(叫 prediction error / residual)。
记住这条:用 RSM 找到的最优设计,一定要用真实仿真验证一次。
【Classical 经典统计】最简单、最省样本· Polynomial SVD · Stepwise Regression · Parametric Surfaces
【Statistical 统计插值】要求穿过每个训练点· Kriging· Anisotropic Kriging· DACE Kriging· Gaussian Processes · Shepard (k-Nearest) · SS-ANOVA
【Advanced 高级】 · RBF · Neural Networks · Evolutionary Design
Polynomial SVD 是 classical 类别中最简单、最省训练点、最适合"先摸清大致趋势" 的算法。
| Polynomial | ||
| SVD |
全称 = Polynomial Singular Value Decomposition(多项式奇异值分解)。
用一条多项式曲线,去"贴着"你 DOE 采样出来的一堆散点,让整体误差最小——然后这条曲线就能拿来快速预测新设计的输出。
三个关键指标:
approximating:(逼近型)—— 不是插值型
best fitting: 找"最贴合"的,不是"精确穿过"
minimizing squared error: 最小化平方误差(即最小二乘)
它的定位:Polynomial SVD 是"趋势探测器",不是"精密预测仪"。它帮你快速看清"响应是线性还是二次趋势、哪个输入影响大",而不是给你小数点后 6 位的精确预测。
| Interpolating 插值型 | |||
| Approximating 逼近型 | Polynomial SVD |
插值型:训练点上误差 = 0,精度高,但可能过拟合(曲线为了穿过每个噪声点而疯狂摆动)。适合做高精度优化代理。
逼近型(Polynomial SVD):训练点上有"残差"(允许偏差),但整体趋势最贴合。抗噪声、可读性强、训练点少也能用。
一个罕见例外:当训练点数恰好等于"多项式阶数 + 1"(单输入变量时),解唯一,此时 Polynomial SVD 变成插值型。但这在实际工程中几乎不会发生(输入变量通常多于 1 个)。
| 6 个 | 3 阶 | 84 项 |
d 阶、n 个输入变量的项数 = C(n+d, d) = (n+d)! / (n! × d!)
记住这个公式:项数 = 需要的最少训练点数。 6 个变量选 3 阶,你至少得有 84 个 DOE 设计,否则根本不够解这个方程组。
行本不够时会怎样:训练点不足时,modeFRONTIER 自动逐级降阶并在 Function Log 警告。看到警告 "degree lowered",说明你训练点不够。
从 2 阶(二次) 开始试。二次已经能拟合抛物线趋势,对大多数工程问题足够。不要一开始就选 4 阶,容易因训练点不足而降阶。
你有一堆训练点,想找一条直线(或曲线)去"代表"这些点。但点不在一条直线上,没有哪条直线能同时穿过所有点。所以问题变成:找一条"最接近"所有点的线——关键是怎么定义"最接近"。
| 残差 residual | |
| 平方 squares | |
| 最小 least |
一句话:最小二乘 = 调整拟合线,让“所有点误差的平方之和”最小。
3 个训练点,想拟合直线 y = a·x + b:
猜第一条线 y = 4.5·x:
平方和 = 25 + 0 + 25 = 50
猜第二条线 y = 4.8·x − 2:
平方和 = 16 + 16 + 4 = 36,比 50 小 → 这条线"更好"。
最小二乘就是自动地找让平方和最小的那条线——不需要你手工试。而 SVD 就是那个"自动求解"的数学工具,它又快又稳地解出最优系数。上述例子里只有三个点、2条线,看着简陋,但整个最小二乘说到底就是这一件事:找一组让平方和最小的系数。
为什么用 SVD? 拟合多项式本质是解"超定线性方程组"(方程数 > 未知系数数),无精确解。SVD 是解这种方程组数值上最稳定的方法,矩阵接近奇异时也能给出可靠解。
| RSS | ||
| Mean absolute error | ||
| Mean relative error | ||
| Mean normalized error |
R²(R-squared,决定系数) 是最重要的一个,回答"模型解释了数据波动的百分之多少"。
Adjusted R²(调整后 R²):惩罚多余项,防止"加项就变好"的假象,始终 ≤ R²。
只在"比较多个模型"时有意义,绝对数值无意义。规则:越小越好。
常见疑问
普通训练误差指的是最小二乘的误差吗?
解答
其实就是同一个东西。 最小二乘在后台拼命最小化的量 = RSS(残差平方和),它就是"训练误差"的本体。Function Log 里那一整组指标(MAE、MRE、MNE 等)都是基于同一个"残差"算出来的,只是口径不同:RSS 用"平方和",MAE 用"绝对值平均",MRE 用"占真实值的比例"。
R² = 1 − RSS / TSS
| TSS | ||
| RSS |
R² 的含义:1 − (剩下的 ÷ 总的) = "模型解释掉的那部分占了多少比例"。
4 个训练点:真实 y = [50, 90, 140],平均值 ȳ = 93.3。
TSS(每个点到平均值的距离平方):(50−93.3)² + (90−93.3)² + (140−93.3)² ≈ 1875 + 11 + 2178 = 4064
RSS(拟合线预测 [46, 94, 142],每个点到拟合线的距离平方):(50−46)² + (90−94)² + (140−142)² = 16 + 16 + 4 = 36
R² = 1 − 36/4064 = 1 − 0.0089 = 0.991
读作:模型解释了数据 99.1% 的波动,只剩 0.9% 没解释。 几乎完美。
R² 有个致命弱点:你往模型里多加一项(哪怕这项是纯噪声、毫无用处),R² 都会只增不减。
R²:加项 → 一定涨(被"无用项"骗)
Adjusted R²:加项 → 只有真有用才涨;加无用项反而跌
实用结论:想比较"2 阶 vs 3 阶多项式哪个更好"时,看 Adjusted R²,别看 R²。Adjusted R² 总是 ≤ R²。
| AIC | |||
| BIC |
R² 是"考试分数"(绝对高低);AIC/BIC 是"性价比"(既要分数高,又要别堆无用的项)。两个模型对比时,选 AIC/BIC 更小的那个。
| RSS | ||
| R² | ||
| Adjusted R² | ||
| AIC/BIC |
但这里有个陷阱:R² 高 ≠ 模型一定好。一个 5 阶多项式硬拟合 5 个点,R² 能到 1,但曲线会疯狂摆动、预测新点一塌糊涂。这就是过拟合。所以别只看 R²,要配合留一误差一起看。
核心问题:普通训练误差是"作弊"的——你用全部点拟合出模型,又拿同一批点去测误差,当然看起来很好(因为模型"见过"这些点,可能只是死记硬背,而非真的掌握了趋势)。留一法就是为了戳穿这种假象。说白了,留一法就是防作弊:不允许模型拿自己做过的题来考试。
① 扣下点 A,用剩下 7 个点重新拟合一条线
② 用这条线去预测点 A(A 没参与拟合,是"没见过的"),算出误差 e₁
③ 放回 A,扣下点 B,用剩下 7 个点再拟合,预测 B,得 e₂
④ ……重复 8 次,每个点都被扣过、被预测过一次
⑤ 把 e₁ 到 e₈ 取平均 = 平均留一误差(mean LOO error)
| 留一误差 ≈ 训练误差 | |
| 留一误差 >> 训练误差 |
注意:LOO 计算很费时间(每扣一个点就重新拟合一次,8 个点拟合 8 次,5000 个点就是 5000 次)。所以它是可选项,不是默认开。而且只有部分算法支持 LOO——好在 Polynomial SVD 支持。
| 最小二乘 | ||
| 训练指标 | ||
| 留一误差 |
一句话总结:最小二乘是造模型的方法,训练指标是看模型贴不贴数据,留一误差是看模型会不会只会背题、不会做新题。
| Polynomial degree | ||
| Variable normalization | 强烈建议开。把量纲差异大的变量缩放到同范围,避免大数值变量淹没小变量,防止数值不稳定 | |
| Term selection | ||
| Compute leave-one-out errors |
假设两个输入:x1 范围 [0, 30](进口流速 m/s),x2 范围 [0, 0.01](无量纲系数)。直接拟合,大数值变量会主导拟合过程,小数值变量的影响被淹没。归一化把所有变量缩放到相似范围(如 [0,1]),每个变量公平贡献。
Training set
Exclude error designs
Remove repeated designs
训练完成后,Function Log 会输出多项式公式、每项系数及统计量,以及一组性能指标。以下是初学者最该关注的几个:
| R² / Adjusted R² | ||
| Mean absolute / relative / normalized error | ||
| RSS(残差平方和) | ||
| AIC / BIC |
以上就是 Polynomial SVD 的完整纲要。
下一篇打算写Stepwise Regression——它就是 Polynomial SVD 的“自动档”,把手动勾项这件事交给算法自己判断。