期中作业 · 两道题的"新东西"
已学的模型不再重讲——只讲怎么选和一个新模型 NGBoost。
🚫 不讲(你们已经学过)
决策树 随机森林 Bagging Boosting / AdaBoost 神经网络 梯度下降
这些在前两次互动课件里讲过;今天默认你们已经会。
✅ 重点讲(新东西)
概率分布 (60 秒入门) 点预测 vs 概率预测 XGBoost → NGBoost 自然梯度 SHAP 分析与用途
这是论文 2 的核心创新,也是讲解的重头戏。
📊 数据集(UCI Concrete · 一眼看完)
- 1030 条试验记录;输入全部是数值,可直接喂进模型。
- 关键非线性:水灰比 $W/C$ · 龄期饱和 · 掺合料交互。
🎯 两篇论文怎么选模型?
| 论文 | 方法 | 为什么用它 |
|---|---|---|
| 论文 1 | AdaBoost | 串行 boost 专攻"难样本"(高强 / 长龄期),$R^2$ 比 RF 再涨 0.02–0.04 |
| 论文 2 | ANN (MLP) | 1998 经典工作;证明神经网络在小数据上也能逼近 |
你们做作业的建议路线(一路到 $R^2\approx 0.93$):
- 线性回归打基线 → $R^2\approx 0.61$,证明非线性必须。
- 随机森林 → $\approx 0.91$,集成的威力。
- AdaBoost / XGBoost → 对齐论文 1,$\approx 0.93$。
- MLP → 致敬论文 2,做对比。
- 延伸:加 $W/C$ 衍生特征、SHAP 可解释性、PSO 配比优化(下一页单独讲)。
① 正向 vs 逆向:信息流方向反过来
💡 关键观察:逆向问题的输出(配比)正是正向问题的输入;逆向问题反复调用训练好的正向模型来评估候选配比 —— 不是反着训练一个模型,而是用正向模型在配比空间里搜最优。
② PSO 怎么搜?(粒子群优化)
想象一群"小鸟"在 8 维配比空间飞,每只鸟身上带一个候选配比。它们边飞边互相通报"我这里成本最低/强度达标",整群慢慢汇聚到最优点。
- 每次评估一个候选配比 → 调 ML 模型瞬间预测强度,不用做 28 天试验!
- 跑几百到几千次迭代 → 全队鸟群聚到全局最优。
- ML 模型在这里扮演"便宜的代理"(surrogate)角色。
③ 为什么要做?工程价值有多大?
- 降本:水泥占混凝土成本大头;少用 10% 水泥 = 节约几十万 / 千吨。
- 减碳:水泥生产占全球 CO₂ 排放约 8%(仅次于钢铁)。少用水泥就是大幅减排。
- 加速研发:每个候选配比要做 28 天养护才知强度。ML 当代理把"月级"压缩到"秒级"。
- 多目标平衡:同时考虑强度、成本、碳排、和易性…… PSO 天然支持多约束多目标。
① 分布 = 一座"山"
横轴 = 可能的取值,纵轴 = 这个值出现的"密度"。
山顶高 → 这附近的值最容易出现;山脚矮 → 几乎不会出现。
自然界一大堆东西的"分布"形状都是这种钟形山 → 叫正态分布。
② $\mu$ (均值) = 山的中心位置
$\mu$ 就是山的正中央位置,也是最可能出现的值。
模型说"预测承载力 = 850 kN"——说的就是 $\mu = 850$。
③ $\sigma$ (标准差) = 山的"胖瘦"
$\sigma$ 衡量"散得多开"。两座山中心一样:
$\sigma$ 小: 瘦高 → 模型很有信心,值几乎都靠近 $\mu$。
$\sigma$ 大: 矮胖 → 模型心里没底,值可能离 $\mu$ 很远。
④ 面积 = 概率 ⭐
问"承载力小于设计荷载的概率有多大?"
→ 就是山左边的阴影面积。整座山总面积 = 1(100%),阴影占多少,概率就多少。
这块阴影 = 失效概率 $P_f$ — 工程上最关心的数字。
🏗️ 工程为什么必须用概率?— 结构可靠度 30 秒入门
设计一根柱子时,工程师其实没法确定:
- 承载力 $R$ 是多少 —— 材料强度有波动、施工有差异、模型本身有误差;
- 荷载 $S$ 又是多少 —— 人流、家具、地震、风载… 全是随机的。
所以 $R$ 和 $S$ 都是分布(各一座"山")。安全条件不再是确定式 $R > S$,而是:
$$P_f = P(R < S) \leq \text{容许值}\ \ (\text{如 }10^{-3} \sim 10^{-5})$$
规范用可靠度指标 $\beta$ 统一描述: $\beta$ 越大 → $P_f$ 越小 → 越安全; 一般住宅 $\beta \approx 3.2$,重要桥梁 $\beta \geq 3.7$。
🎛️ 互动 · 看 $\sigma$ 怎么决定 $P_f$
假设 NGBoost 预测 $\mu = 850$ kN(和 XGBoost 一样准)。拖动 $\sigma$ 与设计荷载,看红色阴影面积($=P_f$)。
点预测的盲区
- 没有 $\sigma$ → 拿不到 $P_f$ → 工程审批环节直接卡住。
- 规范里设计验算用的就是 $R - S \geq 0$ 的概率。
- 同样的"850 kN",$\sigma = 20$ 时基本必过;$\sigma = 200$ 时几乎一半概率会失效——决策天差地别。
① 一群树合伙"画"一座山
回忆 XGBoost:每棵树吐一个小数字,全加起来 = 最终预测 $\hat y$。
NGBoost 只多做一件事:每棵树吐两个小数字—— 一个调"中心"($\mu$),一个调"胖瘦"($\sigma$)。
这是 NGBoost 跟 XGBoost 唯一的结构差别。骨架(boosting + 树)一模一样。
② 怎么知道"画对了"?—— 把真值想成一支箭 🎯
XGBoost 简单:只猜一个数,离真值多远就扣多少分(MSE)。 NGBoost 给了一座山,怎么打分?看真值这支箭"落在你画的山上"时,落点有多高。
打分规则:箭落点处山越高 → 模型分数越高("我早就说真值在这附近")。 山高需要两件事都做对:山顶对准真值 + 胖瘦合适。
关键答:训练时模型事先不知道真值在哪!如果赌 $\sigma=0$ 但山顶偏了一丁点 → 箭落在针外 → 山高 = 0 → 罚分 = $-\log 0 = +\infty$ → 直接训崩。
所以损失函数会自动逼模型给出"老实"的 $\sigma$:
- 对"心里有数"的样本(模型反复见过类似的)→ 敢让 $\sigma$ 小(窄而尖的山)
- 对"心里没底"的样本(外推 / 罕见样本)→ 自动让 $\sigma$ 大(矮而宽的山,避免被罚爆)
那它具体怎么"挤"? → 这就是下一页"自然梯度"要解决的——怎么正确地更新 $\sigma$。
③ 实测效果(论文 test set)
| 模型 | RMSE | $R^2$ | 给 $\sigma$ 吗? |
|---|---|---|---|
| SVR | 0.0430 | 0.918 | ✗ |
| RF | 0.0339 | 0.949 | ✗ |
| XGBoost | 0.0326 | 0.953 | ✗ |
| NGBoost | 0.0307 | 0.958 | ✓ |
NGBoost 点估计不输 XGBoost($R^2$ 还略高),却额外送你一个 $\sigma$ —— 这就是论文选它的全部理由。
直觉:同样地 $\Delta\sigma=+1$,效果天差地别
下面两组都是"把当前 $\sigma$ 加 1"。蓝 = 改之前,红 = 改之后。山顶 ($\mu$) 不动,只动 $\sigma$。
- 上图: 当前 $\sigma$ 小(1), 加 1 已经让山变成完全不同的样子 → 步太大、训练震荡。
- 下图: 当前 $\sigma$ 大(5), 加 1 几乎什么也没改 → 步太小、训练走不动。
- 同样动作 $\Delta\sigma=+1$ 在不同地方根本不是一件事 —— 模型不能用统一步长调 $\sigma$。
那"自然梯度"做了什么?
- 在平直高速上 → 时速 +30 km/h(太猛了,要飞出去)
- 在泥泞山路上 → 时速 +0.5 km/h(几乎没动)
聪明的司机会根据路况自动调整该踩多少,让每次"车速变化"差不多 —— 不论高速还是山路,开起来都稳。
回到 NGBoost。"把 σ 改 1 个单位"是参数动作; 但真正决定训练好坏的,是这一步让分布形状变化了多少。这两件事不是一回事!
| 普通梯度 | 自然梯度(NGBoost 用) | |
|---|---|---|
| 用什么定步长? | 参数差 | 分布变化的大小 |
| 窄分布上 | 步太大 → 训崩 | 自动变小 |
| 宽分布上 | 步太小 → 训不动 | 自动变大 |
📐 数学公式:$\tilde\nabla\mathcal{L} = \mathcal{I}(\theta)^{-1}\,\nabla\mathcal{L}$,其中 $\mathcal{I}$ (Fisher 信息矩阵) 就是那个"换算器"。具体细节不用管,记住直觉就够。
SHAP 是什么?
SHapley Additive exPlanations —— 一种事后解释(post-hoc) 工具, 来自经济学里的 Shapley 值(2012 年诺贝尔经济学奖相关)。
核心比喻:把模型预测看成"团队合作的产出",每个输入特征是"队员"。 SHAP 给每个队员算出今天贡献了多少分。
形式上,对每条预测 $\hat y$:
$$\hat y = \phi_0 + \sum_{j=1}^{d} \phi_j$$
- $\phi_0$ = 基准(所有样本预测的平均)
- $\phi_j$ = 第 $j$ 个特征的 SHAP 值,可正可负
- 正号 → 该特征把预测往上推;负号 → 往下拉
SHAP 的 4 大用途
- ① 特征重要性排序
平均 $|\phi_j|$ 越大 → 该特征越关键。回答:"哪个变量最影响输出?" - ② 单样本预测解释
看某条样本的 $\phi_j$ 正负条 → "为什么这条样本被预测成 850?" - ③ 模型调试
如果某个"不该重要"的特征出现在前列 → 数据泄漏或 bug 的信号。 - ④ 科学发现
在没有规范公式可参考的领域,SHAP 排序常常带来新的物理直觉(比如论文里 $d_{\text{avg}}$ 主导承载力、$r_{\text{avg}}$ 主导失效模式)。
典型可视化 · 特征重要性柱状图(最简单的一种)
横轴 = 平均 $|\phi_j|$。一目了然,最适合放答辩首图。 但只能回答"谁重要"——不能告诉你"往哪推、是否单调"。下一页讲信息量更大的 Summary Plot。
第 1 层 · 一个样本 + 一个特征 = 一个 SHAP 值
假设第 47 号试件预测承载力 850 kN。SHAP 把这个 850 分摊到每个特征: $d_{\text{avg}}$ 贡献了 +50(推高),$f'_c$ 贡献了 −20(拉低)…… 一个特征对一条样本,就是图上的一个点。点在右边 → 这个特征推高了预测;在左边 → 拉低。
第 2 层 · 把所有样本的同一特征都画上 = 一行散点
把测试集的每一条样本对应到一个点,画出 $d_{\text{avg}}$ 的 SHAP 值。 于是这一行有 100+ 个点,告诉我们 $d_{\text{avg}}$ 在不同样本上推或拉的范围有多大。 但这一步还看不出"什么时候推、什么时候拉"。
第 3 层 · 给每个点染色编码原始值 → 看出方向
再加一层信息:把每个点染色。颜色代表这条样本本身的 $d_{\text{avg}}$ 数值:红 = 值大,蓝 = 值小。
- 横坐标 = SHAP 值:这个特征给这条样本的预测推了多少(推高 / 拉低)。
→ 这是模型给出的影响,可能正可能负。 - 颜色 = 原始特征值:这条样本本身的 $d_{\text{avg}}$ 到底有多大(比如 100 mm 还是 300 mm)。
→ 这是样本本身的属性,跟模型无关。
这张图里 "红都在右、蓝都在左" → "原始值大" 和 "把预测推高" 完全对上 → $d_{\text{avg}}$ 与承载力正相关、单调(板越厚承载力越大)。
第 4 层 · 多个特征从上到下按重要性堆起来 → Summary Plot
这就是论文里那张图。一张图同时回答四个问题:
- 谁重要?—— 越上面越重要(行的"宽度"也越大)。
- 往哪推?—— 点在 0 右边推高,左边拉低。
- 是否单调?—— 颜色和位置是否对齐(红右蓝左 = 正相关)。
- 个体怎样?—— 任何一个点就是一条具体样本的贡献。
① 红右蓝左 → 正相关
特征值越大 → 预测越大
例:$d_{\text{avg}}$ 越大 → 承载力越大
② 红左蓝右 → 负相关
特征值越大 → 预测越小
例:剪跨比 $a/d_{\text{avg}}$ 越大 → 承载力越小
③ 红蓝混合 → 非单调/交互
看不出明显规律
说明效果取决于其他变量(交互效应)
⏱ 20 分钟总结
题 1 用已学模型即可;题 2 真正的新东西只有四件: 点 → 一座山 普通梯度 → 自然梯度 NGBoost = XGBoost 改预测目标 SHAP + Summary Plot 解释模型