机器学习 × 土木工程|期中作业·20 min 浓缩版
1/9
20-MIN BRIEF · WHAT'S NEW · WHY THIS MODEL

期中作业 · 两道题的"新东西"

已学的模型不再重讲——只讲怎么选一个新模型 NGBoost

题 1 · 混凝土强度(4 min) 60 秒概率入门 题 2 · 板柱冲切(10 min) 收尾 · 3 min

🚫 不讲(你们已经学过)

决策树 随机森林 Bagging Boosting / AdaBoost 神经网络 梯度下降

这些在前两次互动课件里讲过;今天默认你们已经会。

✅ 重点讲(新东西)

概率分布 (60 秒入门) 点预测 vs 概率预测 XGBoost → NGBoost 自然梯度 SHAP 分析与用途

这是论文 2 的核心创新,也是讲解的重头戏。

整堂课只有一条主线:给定一个工程问题,已学的模型够不够用?不够的话,缺什么样的能力?NGBoost 恰好补上了什么?
题目 1 · 4 分钟版≈ 4 min
题目 1:已学模型直接拿来用
这道题没有"新模型",关键是论文为什么选这两个,以及做作业时该怎么排兵布阵。

📊 数据集(UCI Concrete · 一眼看完)

水泥 矿渣 粉煤灰 减水剂 粗骨料 细骨料 龄期 8 个输入 ML 模型 抗压强度 fc (MPa) 1 个输出
  • 1030 条试验记录;输入全部是数值,可直接喂进模型。
  • 关键非线性:水灰比 $W/C$ · 龄期饱和 · 掺合料交互。
所以:线性模型 $R^2\approx 0.61$,集成学习能上 $0.93$。

🎯 两篇论文怎么选模型?

论文方法为什么用它
论文 1AdaBoost串行 boost 专攻"难样本"(高强 / 长龄期),$R^2$ 比 RF 再涨 0.02–0.04
论文 2ANN (MLP)1998 经典工作;证明神经网络在小数据上也能逼近

你们做作业的建议路线(一路到 $R^2\approx 0.93$)

  1. 线性回归打基线 → $R^2\approx 0.61$,证明非线性必须
  2. 随机森林 → $\approx 0.91$,集成的威力。
  3. AdaBoost / XGBoost → 对齐论文 1,$\approx 0.93$。
  4. MLP → 致敬论文 2,做对比。
  5. 延伸:加 $W/C$ 衍生特征、SHAP 可解释性、PSO 配比优化(下一页单独讲)。
一句话:题 1 所有模型你们都会。真正的训练点是"在同一份数据上跑 4 个模型对比"——这是科研演练的标准动作。
题 1 延伸 · 看一个真正"有用"的应用≈ 2 min
逆向设计:把 ML 模型当成"代理实验员"
正向我们已经会了 —— 配比 → 强度。能不能反过来:给我目标强度,自动找最便宜的配比?

① 正向 vs 逆向:信息流方向反过来

正向(已会): 已知配比 → 算强度 8 个配比数值 水泥 / 水 / 龄期… ML 模型 f (AdaBoost 等) 强度预测 35 MPa 逆向(新): 给目标 + 约束 → 反推最优配比 目标: ≥ 40 MPa + 总成本最低 PSO 搜索器 (粒子群优化) 最优配比 (8 个数字)

💡 关键观察:逆向问题的输出(配比)正是正向问题的输入;逆向问题反复调用训练好的正向模型来评估候选配比 —— 不是反着训练一个模型,而是用正向模型在配比空间里搜最优。

② PSO 怎么搜?(粒子群优化)

想象一群"小鸟"在 8 维配比空间飞,每只鸟身上带一个候选配比。它们边飞边互相通报"我这里成本最低/强度达标",整群慢慢汇聚到最优点。

最优区域 (便宜+达标) t=0 随机撒点 t=T 收敛到最优
  • 每次评估一个候选配比 → 调 ML 模型瞬间预测强度,不用做 28 天试验!
  • 跑几百到几千次迭代 → 全队鸟群聚到全局最优。
  • ML 模型在这里扮演"便宜的代理"(surrogate)角色。

③ 为什么要做?工程价值有多大?

  • 降本:水泥占混凝土成本大头;少用 10% 水泥 = 节约几十万 / 千吨。
  • 减碳:水泥生产占全球 CO₂ 排放约 8%(仅次于钢铁)。少用水泥就是大幅减排。
  • 加速研发:每个候选配比要做 28 天养护才知强度。ML 当代理把"月级"压缩到"秒级"
  • 多目标平衡:同时考虑强度、成本、碳排、和易性…… PSO 天然支持多约束多目标。
核心思路:ML 模型 = "便宜的代理实验员";PSO = "聪明的搜索器"。 二者合起来把 ML 从"看数据"升级到"做设计" —— 这就是 AI4Science / AI for 材料设计的入门级应用。
题 2 之前 · 必备直觉≈ 2 min
先补 4 个概率名词(60 秒)
你们还没正式学概率论——这页给你图解版,足够听懂后面的内容。

① 分布 = 一座"山"

承载力 山顶 = 最常见 山脚:很少出现 山脚:很少出现

横轴 = 可能的取值,纵轴 = 这个值出现的"密度"。 山顶高 → 这附近的值最容易出现;山脚矮 → 几乎不会出现。
自然界一大堆东西的"分布"形状都是这种钟形山 → 叫正态分布

② $\mu$ (均值) = 山的中心位置

μ=600 μ=850 中心可以左右"挪"

$\mu$ 就是山的正中央位置,也是最可能出现的值
模型说"预测承载力 = 850 kN"——说的就是 $\mu = 850$。

③ $\sigma$ (标准差) = 山的"胖瘦"

σ 小: 瘦高 → 很有把握 σ 大: 矮胖 → 飘忽不定 μ 相同

$\sigma$ 衡量"散得多开"。两座山中心一样:
$\sigma$ 小: 瘦高 → 模型很有信心,值几乎都靠近 $\mu$。
$\sigma$ 大: 矮胖 → 模型心里没底,值可能离 $\mu$ 很远。

④ 面积 = 概率 ⭐

设计荷载 S = 700 Pf 阴影面积

问"承载力小于设计荷载的概率有多大?" → 就是山左边的阴影面积。整座山总面积 = 1(100%),阴影占多少,概率就多少。
这块阴影 = 失效概率 $P_f$ — 工程上最关心的数字。

30 秒口诀:$\mu$ = 山顶在哪儿 | $\sigma$ = 山多胖 | 阴影面积 = 概率。

🏗️ 工程为什么必须用概率?— 结构可靠度 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$。

荷载 S (作用在结构上) 承载力 R (结构能扛多少) Pf = 重叠面积
这就是为什么必须用概率:只能给"均值"的模型(XGBoost、RF 等)算不出 $P_f$ —— 因为它根本不告诉你 $R$ 这座"山"长什么样。 下一页讲:所以我们需要一个同时给 $\mu$ 和 $\sigma$ 的模型,叫 NGBoost。
题目 2 · 工程痛点≈ 3 min
同样的数据,为什么不能停在 XGBoost?
板柱节点冲切 = 安全关键 → 工程师要的是失效概率,不是均值。
XGBoost 的输出 PU 850 只有一个数
NGBoost 的输出 PU 一座山: μ=850, σ=80
Q.设计荷载 700 kN,模型预测某节点承载力 850 kN —— 能放心通过验收吗?

🎛️ 互动 · 看 $\sigma$ 怎么决定 $P_f$

假设 NGBoost 预测 $\mu = 850$ kN(和 XGBoost 一样准)。拖动 $\sigma$ 与设计荷载,看红色阴影面积($=P_f$)。

80 kN
700 kN
--
失效概率 $P_f$
--
可靠度指标 $\beta$

点预测的盲区

  • 没有 $\sigma$ → 拿不到 $P_f$ → 工程审批环节直接卡住
  • 规范里设计验算用的就是 $R - S \geq 0$ 的概率。
  • 同样的"850 kN",$\sigma = 20$ 时基本必过;$\sigma = 200$ 时几乎一半概率会失效——决策天差地别。
这就是为什么论文不停在 XGBoost——它"准",但缺一条腿
NGBoost · 一个改造≈ 5 min
NGBoost:让"一群树"画出一座山
骨架还是你们学过的 Boosting + 树。只改两件事:每棵树吐什么 + 怎么打分
已经知道:NGBoost 想要给一座($\mu$ 山顶 + $\sigma$ 山宽),而不是只给一个数。 问题:怎么用"一群弱树"凑出这座山?模型又怎么知道自己画对了

① 一群树合伙"画"一座山

回忆 XGBoost:每棵树吐一个小数字,全加起来 = 最终预测 $\hat y$。
NGBoost 只多做一件事:每棵树吐两个小数字—— 一个调"中心"($\mu$),一个调"胖瘦"($\sigma$)。

输入 x 树 1 中心微调 +0.30 胖瘦微调 +0.05 树 2 中心微调 −0.12 胖瘦微调 +0.03 T 中心微调 +0.08 胖瘦微调 −0.02 把所有树的修正都加起来 全部"中心" → 山顶 μ = 850 全部"胖瘦" → 山宽 σ = 80 → 一对数字 (μ, σ) 输出: 一座钟形山 (μ=850, σ=80)

这是 NGBoost 跟 XGBoost 唯一的结构差别。骨架(boosting + 树)一模一样。

② 怎么知道"画对了"?—— 把真值想成一支箭 🎯

XGBoost 简单:只猜一个数,离真值多远就扣多少分(MSE)。 NGBoost 给了一座山,怎么打分?看真值这支箭"落在你画的山上"时,落点有多高。

❌ 又瘦又偏 "自信地错了" → 重罚 真值 山在这≈0 ⚠️ 太胖太宽 "啥都可能 = 啥也没说" → 扣分 真值 山很矮 ✅ 又准又合适 山顶对准真值 → 满分 真值 山顶就在真值!

打分规则:箭落点处山越高 → 模型分数越高("我早就说真值在这附近")。 山高需要两件事都做对:山顶对准真值 + 胖瘦合适。

数学上这种打分叫负对数似然 (NLL),名字拗口,但你只要记住一句话: 它逼模型同时把 $\mu$ 和 $\sigma$ 都学准
❓ 这里学生一定会想:"那把山预测成一根无限细的针($\sigma=0$)扎在猜测点上,岂不是命中率最高?"

关键答:训练时模型事先不知道真值在哪!如果赌 $\sigma=0$ 但山顶偏了一丁点 → 箭落在针外 → 山高 = 0 → 罚分 = $-\log 0 = +\infty$ → 直接训崩。
所以损失函数会自动模型给出"老实"的 $\sigma$:
  • 对"心里有数"的样本(模型反复见过类似的)→ 敢让 $\sigma$ 小(窄而尖的山)
  • 对"心里没底"的样本(外推 / 罕见样本)→ 自动让 $\sigma$ 大(矮而宽的山,避免被罚爆)
$\sigma$ 不是模型乱猜的,是损失函数"挤"出来的诚实自评。
那它具体怎么"挤"? → 这就是下一页"自然梯度"要解决的——怎么正确地更新 $\sigma$。

③ 实测效果(论文 test set)

模型RMSE$R^2$给 $\sigma$ 吗?
SVR0.04300.918
RF0.03390.949
XGBoost0.03260.953
NGBoost0.03070.958

NGBoost 点估计不输 XGBoost($R^2$ 还略高),却额外送你一个 $\sigma$ —— 这就是论文选它的全部理由。

NGBoost 的训练难题≈ 3 min
"自然"梯度:调 $\sigma$ 该迈多大步?
NGBoost 比 XGBoost 多了一件事 — 同时更新 $\sigma$。新的麻烦来了。
从上一页接过来:每棵树输出一对修正量 $(\Delta\mu,\ \Delta\log\sigma)$。 其中 $\Delta\mu$ 怎么算 —— 和 XGBoost 完全一样,普通梯度下降即可。 但 $\Delta\sigma$ 的"步子"该迈多大? 这是 NGBoost 必须额外回答的问题。
Q.同样的"$+1$",在窄分布宽分布里,"实际改变了多少"差几十倍。固定步长肯定不行——那该怎么自动调?

直觉:同样地 $\Delta\sigma=+1$,效果天差地别

下面两组都是"把当前 $\sigma$ 加 1"。 = 改之前, = 改之后。山顶 ($\mu$) 不动,只动 $\sigma$。

σ 区域: σ: 1 → 2 分布形状 大变样! "+1"步太大 σ 区域: σ: 5 → 6 几乎看不出 差别 "+1"步太小
  • 上图: 当前 $\sigma$ 小(1), 加 1 已经让山变成完全不同的样子 → 步太大、训练震荡。
  • 下图: 当前 $\sigma$ 大(5), 加 1 几乎什么也没改 → 步太小、训练走不动。
  • 同样动作 $\Delta\sigma=+1$ 在不同地方根本不是一件事 —— 模型不能用统一步长调 $\sigma$。

那"自然梯度"做了什么?

🚗 想一个生活例子 · 开车踩油门:同样地"多踩油门 1 cm"——
  • 平直高速上 → 时速 +30 km/h(太猛了,要飞出去)
  • 泥泞山路上 → 时速 +0.5 km/h(几乎没动)
"踩油门 1 cm" 是动作大小;你真正关心的是车速变化有多大。
聪明的司机会根据路况自动调整该踩多少,让每次"车速变化"差不多 —— 不论高速还是山路,开起来都稳。

回到 NGBoost。"把 σ 改 1 个单位"是参数动作; 但真正决定训练好坏的,是这一步让分布形状变化了多少。这两件事不是一回事!

普通梯度自然梯度(NGBoost 用)
用什么定步长参数差分布变化的大小
窄分布上步太大 → 训崩自动变小
宽分布上步太小 → 训不动自动变大

📐 数学公式:$\tilde\nabla\mathcal{L} = \mathcal{I}(\theta)^{-1}\,\nabla\mathcal{L}$,其中 $\mathcal{I}$ (Fisher 信息矩阵) 就是那个"换算器"。具体细节不用管,记住直觉就够。

一句话:普通梯度按"参数刻度"走;自然梯度按"分布实际变化"走 —— 所以无论窄分布还是宽分布,NGBoost 都能稳稳地把 σ 调到对的位置
最后一站 · 可解释性≈ 3 min
SHAP:让模型告诉你"它在想什么"
训完一个高精度模型不够 —— 我们还得知道它依据哪些特征做决定。这正是 SHAP 解决的问题。

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。

解读 Summary Plot≈ 3 min
SHAP Summary Plot:4 层信息叠在一张图
这张图初看眼花,是因为它同时编码了 4 种东西。一层一层加上去就好懂了。
SHAP = 0 ← 拉低预测 推高预测 → +50 kN

第 1 层 · 一个样本 + 一个特征 = 一个 SHAP 值

假设第 47 号试件预测承载力 850 kN。SHAP 把这个 850 分摊到每个特征: $d_{\text{avg}}$ 贡献了 +50(推高),$f'_c$ 贡献了 −20(拉低)…… 一个特征对一条样本,就是图上的一个点。点在右边 → 这个特征推高了预测;在左边 → 拉低。

SHAP = 0 ← 拉低预测 推高预测 → davg 这一行:

第 2 层 · 把所有样本的同一特征都画上 = 一行散点

把测试集的每一条样本对应到一个点,画出 $d_{\text{avg}}$ 的 SHAP 值。 于是这一行有 100+ 个点,告诉我们 $d_{\text{avg}}$ 在不同样本上推或拉的范围有多大。 但这一步还看不出"什么时候推、什么时候拉"。

SHAP = 0 值大 值小

第 3 层 · 给每个点染色编码原始值 → 看出方向

再加一层信息:把每个点染色。颜色代表这条样本本身的 $d_{\text{avg}}$ 数值:红 = 值大蓝 = 值小

⚠️ 学生最容易混淆,请务必区分:
  • 横坐标 = SHAP 值:这个特征给这条样本的预测推了多少(推高 / 拉低)。
    → 这是模型给出的影响,可能正可能负。
  • 颜色 = 原始特征值:这条样本本身的 $d_{\text{avg}}$ 到底有多大(比如 100 mm 还是 300 mm)。
    → 这是样本本身的属性,跟模型无关。
每个点身上携带两条独立信息。它们的关系才是我们想看的:原始值大小 vs 影响方向 → 是否一致。

这张图里 "红都在右、蓝都在左" → "原始值大" 和 "把预测推高" 完全对上 → $d_{\text{avg}}$ 与承载力正相关、单调(板越厚承载力越大)。

SHAP = 0 davg ravg f'c b1

第 4 层 · 多个特征从上到下按重要性堆起来 → Summary Plot

这就是论文里那张图。一张图同时回答四个问题:

  • 谁重要?—— 越上面越重要(行的"宽度"也越大)。
  • 往哪推?—— 点在 0 右边推高,左边拉低。
  • 是否单调?—— 颜色和位置是否对齐(红右蓝左 = 正相关)。
  • 个体怎样?—— 任何一个点就是一条具体样本的贡献。
读图小技巧:看每一行的颜色排列,立刻判断"特征 vs 预测"的关系:

① 红右蓝左 → 正相关

特征值越大 → 预测越大
例:$d_{\text{avg}}$ 越大 → 承载力越大

② 红左蓝右 → 负相关

特征值越大 → 预测越小
例:剪跨比 $a/d_{\text{avg}}$ 越大 → 承载力越小

③ 红蓝混合 → 非单调/交互

看不出明显规律
说明效果取决于其他变量(交互效应)

⏱ 20 分钟总结

题 1 用已学模型即可;题 2 真正的新东西只有四件: 点 → 一座山 普通梯度 → 自然梯度 NGBoost = XGBoost 改预测目标 SHAP + Summary Plot 解释模型

切换 · 顶部 tab 跳转