Py学习  »  机器学习算法

CICC科普栏目|机器学习在数学建模中的应用

中国指挥与控制学会 • 1 月前 • 151 次点击  

如果你参加过数学建模国赛,一定经历过这样的"灵魂拷问":
题目给了 5000 行数据,让我预测下个月的销量,可我翻完教材只看到一堆偏微分方程……
这时候,机器学习就是你的"外挂"。

这篇文章不打算罗列十几个模型名词让你头大,而是用一条主线把"机器学习在数学建模里到底怎么用"讲透:

  • 它和传统数学建模的本质区别在哪?
  • 三个核心公式(损失函数 / 梯度下降 / 神经网络前向传播)到底长什么样?
  • 用一段 ~60 行纯 Python 代码 真实训练,对比三种模型的效果;
  • 2026 年国赛 B 题(无线电干扰源)、C 题预测类题目里,机器学习具体怎么切入?

先用一个生活类比,让你 30 秒内抓住机器学习的"魂"。

类比 | 老中医把脉 vs 现代仪器体检
传统数学建模像老中医:通过物理定律、化学方程,把"病人"拆解成"阴阳虚实"——一旦机理清楚,预测极准。
机器学习像现代仪器体检:不问机理,直接给一台心电图机 + 一堆历史病例,让它自己"看"出心律不齐的规律。
所以当你的题目机理太复杂、变量太多、又恰好有数据时——机器学习就是顺手的工具。

一、机器学习的"三件套":数据、模型、损失

无论多复杂的机器学习模型,本质都只做一件事:在数据里找一个函数,把输入映射到输出。

把它拆成三件套:

  • 数据 (x, y)
     ——历史观测值,比如"过去 60 个月每月用电量";
  • 模型 ŷ = f(x; w)
     ——带参数 w 的函数,比如最简单的线性回归 ŷ = wx + b;
  • 损失 L(w)
     ——模型的预测值 ŷ 和真实值 y 之间的差距,用来衡量"模型猜得准不准"。

最常用的损失函数是均方误差 (MSE):

MSE  =  L(w)  =  1⁄n  ·  Σi=1n  (yi − ŷi)2

它的几何含义是:把所有数据点上的"预测误差的平方"取平均。
L 越小,模型越准;我们要做的事情只有一件——找到让 L 最小的 w。

① 原始数据② 清洗 & 特征③ 选模型④ 训练 & 调参⑤ 评估 & 上线机器学习建模的标准五步流程(这也是国赛论文里"模型建立"那一节的常用叙述顺序)

图 1 | 机器学习建模的标准五步流程,国赛论文的"模型建立"一节通常按这个顺序写

注意,这五步不是机器学习独有——传统数学建模也走这个流程。区别在第③步:传统建模是"人脑推导公式",机器学习是"算法自动搜索参数"。

二、梯度下降:机器学习是怎么"找到最优解"的

有了损失函数 L(w),剩下的问题就是:怎么把 w 调到让 L 最小?
答案是梯度下降——一个 19 世纪就存在的朴素想法。

类比 | 蒙眼下山
想象你被蒙上眼睛站在一座山上,你只想走到山谷最低点。
你唯一能做的就是:感受脚下的坡度,朝最陡的下坡方向迈一步;再感受,再迈一步……
每一步的"步长"叫学习率 η:太小下山太慢,太大会跨过谷底直接飞出去。

翻译成数学:

梯度下降    wk+1  =  wk − η · ∂L ⁄ ∂w

其中 ∂L/∂w 是损失函数对参数的偏导数(梯度),告诉我们"山坡的陡度和方向";η 是学习率,决定每一步迈多大。
重复这个公式几百到几千次,w 就会收敛到谷底——也就是机器学习里说的"训练完成"。

起点(随机)谷底(最优)-5-3-1135 -12-8-404812参数 w₁参数 w₂梯度下降:每一步都朝"最陡的下坡"走

图 2 | 红色箭头是梯度下降在 2D 损失曲面上的路径,从随机起点一路走到谷底

这里有一个反直觉但重要的细节:机器学习找到的"最优 w"是数值最优,不一定是物理最优。
所以国赛论文里,如果只用机器学习,评委会觉得"机理不清"。通常的做法是:先用物理/统计给出公式形式,再用机器学习去拟合参数——两者结合最稳。

三、三大经典模型:分别长什么样

这一节我们快速过三个在国赛里出场率最高的模型,看它们的"函数形式"和适用场景。

3.1 线性回归 ——"称体重"的最朴素工具

它假设 y 和 x 是直线关系:

ŷ  =  w1x + w0

两个参数 w₁(斜率)和 w₀(截距),可以用闭式解一步到位:

w1  =  Σ (xi − x̄)(yi − ȳ) ⁄ Σ (xi − x̄)2,     w0  =  ȳ − w1x̄

优点:可解释性极强(w₁ 就是"x 每增加 1,y 增加多少");训练快到毫秒级。
缺点:只能拟合直线,遇到曲线就拉胯。
适用:自变量只有 1~2 个、近似线性的场景(比如"广告费 vs 销量")。

3.2 决策树 ——"查户口"式层层筛选

决策树不做"加权打分",而是用 if-else 把空间切碎:

如果 x2 > 6.4 则 类 B;否则若 x1 > 3.2 则 类 A;否则 类 B …

它把特征空间切成长方形,每块贴一个标签。下图是 2 个特征的二维切分示例:

00224466881010特征 x₁特征 x₂类 A类 B决策树:把平面切成长方形,再贴标签

图 3 | 决策树把平面切成一块块矩形,再贴上类别标签

优点:完全不用归一化、可解释性极强(决策路径就是规则)、天然处理类别特征。
缺点:单棵树容易过拟合,深度太深就背答案。
国赛常见用法:随机森林(RF)/ XGBoost —— 把几百棵决策树打包,投票表决,既稳又准。

3.3 神经网络 ——"万能拟合器"

如果说线性回归是"用一根直线穿过云",神经网络就是"用一根橡皮筋穿过云"。
它由若干层"神经元"组成,每根连线都是一个可学习的权重 wᵢ:

输入层隐含层输出层wᵢ预测值x1x2x3神经网络结构:每根连线 wᵢ 都是一个可学习的参数

图 4 | 一个最简单的 MLP:3 输入 → 5 隐藏 → 1 输出,每条连线上都有一个权重 wᵢ

前向传播公式(一层):

hj  =  tanh(Σiwijxi + bj),     ŷ  =  Σjvjhj + c

tanh 是"激活函数",让网络能拟合非线性关系(如果不加激活函数,再多层的神经网络也只是个线性回归)。
权重 wᵢ 通过反向传播 + 梯度下降不断更新——公式还是上一节的 w := w - η · ∂L/∂w,只是 ∂L/∂w 要用链式法则一层层算回去。

优点:理论上可以逼近任意连续函数("万能近似定理"),处理图像、文本、时序都好用。
缺点:黑盒、训练慢、需要数据量、调参玄学。
国赛常见用法:MLP / CNN(图像)/ LSTM & Transformer(时序)。

四、实战对比:60 行纯 Python 真实训练

光看公式不够直观。我用一段真实可跑的代码(无需 numpy、sklearn),对比上面三个模型在同一份数据上的拟合效果。

任务设定:预测一个时间序列,数据生成规则是

y(t)  =  0.4 t  +  0.3 sin(4.4πt)  +  ε,     ε ∼ N(0, 0.062)

也就是"线性趋势 + 季节波动 + 高斯噪声"——这正是国赛里销量、用电量、客流量类预测题的典型形态。
注意下面这张图, 真实规律是带正弦起伏的曲线,并不是直线:

-0.6-0.30.00.30.60.90.00.20.50.81.0时间 t (归一化)指标值真实观测值(含噪声)

图 5 | 60 个带噪声的观测点,肉眼能看出"上升 + 起伏"两种趋势

接下来分别用三种模型去拟合:

  • 线性回归
     —— 只拟合一条直线,必然错过"起伏";
  • MLP (1-8-1)
     —— 一个 8 个隐藏神经元的两层网络,能拟合非线性;
  • KNN (k=5)
     —— 用最近 5 个点的平均值做预测,平滑但延迟。
-0.6-0.30.00.30.60.90.00.20.50.81.0时间 t (归一化)指标值真实数据点线性回归MLP 神经网络KNN (k=5)

图 6 | 三种模型在同一份数据上的拟合结果对比

从图上能直接看到三个现象:

  1. 线性回归(橙线)
    :只看到"上升趋势",把起伏全抹平了——MSE 最大;
  2. MLP(绿线)
    :弯弯绕绕地跟着数据起伏走,拟合得最贴合;
  3. KNN(紫线)
    :呈阶梯状,比 MLP 滞后,但比线性回归更接近真规律。

具体的 MSE 数值对比:

0.51.52.50.00.00.00.00.0MSE 误差模型0.0428线性回归0.0062MLP 神经网络0.0029KNN (k=5)

图 7 | 三种模型在训练集上的 MSE 对比(噪声 σ=0.06,理论 MSE 下界 ≈ 0.0036)

  • 线性回归 MSE = 0.04279
  • MLP MSE = 0.00616(接近噪声下界,说明几乎把规律学到家了)
  • KNN MSE = 0.00287

这是国赛里一个非常经典的教训:用错模型 = 把分数拱手让人。当数据有非线性结构时,硬上线性回归就是送命。

顺便看一下 MLP 训练时的损失下降曲线——梯度下降到底有没有在工作:

0.00.1 0.10.10.21.0500.01000.01500.02000.0训练轮次 (epoch)训练 MSE 损失训练集 MSE最终 MSE = 0.05104

图 8 | MLP 训练 2000 轮的 MSE 损失下降曲线,前 200 轮陡降,后面慢慢收敛

这条曲线是机器学习调参时最重要的"体检报告":
如果它陡降后趋平——恭喜,训练成功;
如果纹丝不动——学习率太小或代码有 bug;
如果震荡上飞——学习率太大,模型"飞过谷底"。

五、国赛真题里,机器学习怎么用?

最后落到实操,结合 2026 年国赛常见方向,说说机器学习的具体打法。

5.1 B 题类(机理复杂 + 有数据)——机器学习做"辅助定位"

以经典的"无线电干扰源定位"题为例:题目给了若干监测站接收到的信号强度 RSSI,要你反推干扰源位置。

传统建模路线:用对数距离路径损耗模型
    RSSI = A − 10n·log₁₀(d) + 噪声,列非线性方程组求解。
机器学习加成:把 (x, y) 网格化,在每个格点上让模型预测 RSSI,和实测值匹配最好的格点就是干扰源。
常见做法:先用 KNN 做粗定位,再用 XGBoost 精修,最后代入物理公式验证——机理 + 数据双保险。

5.2 C 题类(预测 / 优化)——机器学习挑大梁

C 题常是"给历史数据,预测未来 + 给出策略"。这一类几乎可以完全交给机器学习:

  • 时间序列预测
    :用 LSTM / Prophet / XGBoost 直接预测;
  • 聚类分析
    :K-means 把样本分成若干"画像"(比如把外贸上市公司按财务特征分成 3 类);
  • 因子分析
    :先用因子分析降维、剔除共线性,再用机器学习做预测——这是我硕士论文里的标准操作。

具体到我自己的研究:23 家 A 股外贸上市公司、9 个财务指标,
第一步:因子分析把 9 个指标压缩成 3 个公因子(盈利能力 / 偿债能力 / 营运能力);
第二步:用 K-means 把 23 家公司聚成 3 类(稳健型 / 成长型 / 风险型);
第三步:对每类分别用 ARIMA / LSTM 预测下一年走势。
这一套"因子分析 + 聚类 + 时序预测"几乎可以平移到任何 C 题。

5.3 避坑清单

国赛里用机器学习,最容易翻车的 5 个点:

  1. 不做数据归一化
     → MLP 训练不动;
  2. 不划分训练 / 验证 / 测试集
     → 评委一问"过拟合了吗"就答不上;
  3. 只报训练集精度
     → 必须报测试集(泛化)精度才有说服力;
  4. 机理解释完全缺失
     → 机器学习当辅助,物理 / 统计当主角;
  5. 把网格搜索 (Grid Search) 当调参的唯一手段
     → 调参记录表要展示过程,不是结果。

六、公式总结表(建议收藏)

最后把这篇文章出现过的所有核心公式汇总,方便复习和复制到国赛论文里。

概念
公式
一句话解释
均方误差 (MSE)
L = (1/n) · Σ (yᵢ − ŷᵢ)²
模型预测值与真实值的平均平方偏差,越小越好
梯度下降
wk+1 = wk − η · ∂L/∂w
沿损失最陡方向一步步逼近最优参数
线性回归
ŷ = w₁x + w₀
最朴素的"加权打分",闭式解一步到位
MLP 前向传播
hⱼ = tanh(Σ wᵢⱼxᵢ + bⱼ);ŷ = Σ vⱼhⱼ + c
带激活函数的两层网络,可拟合任意连续函数
反向传播链式法则
∂L/∂wᵢ = ∂L/∂ŷ · ∂ŷ/∂h · ∂h/∂wᵢ
把输出误差"层层分摊"回每个权重
KNN 预测
ŷ = (1/k) · Σ yⱼ,j ∈ top-k 最邻近
看最近 k 个邻居怎么说,取平均
万能近似定理
单隐层 + 足够神经元 ⇒ 可逼近任意 f(x)
神经网络的"理论后盾",但参数多 ≠ 一定好

写在最后

机器学习不是数学建模的"银弹",但它是一把非常顺手的瑞士军刀。
下次再遇到"机理不清、数据很多、要预测未来"的题目,记得拿出来用。

记住一句话:机理是骨,数据是肉,机器学习是把它们缝在一起的针线。
国赛拿奖的论文,三者缺一不可。

下一篇会写《LSTM 时间序列预测:从直觉到代码》,把上面那个 sin 数据集再用 LSTM 跑一遍,看更深的网络是不是真的能学到更长的记忆。敬请期待



本文来源:数学中国

 关注公众号了解更多

会员申请 请在公众号内回复“个人会员”或“单位会员


 欢迎关注中国指挥与控制学会媒体矩阵

指挥与控制学报


CICC官方抖音

CICC头条号

CICC微博号

CICC官方网站

CICC官方微信公众号

《指挥与控制学报》官网

国际无人系统大会官网

中国指挥控制大会官网

全国兵棋推演大赛

全国空中智能博弈大赛

搜狐号              

一点号              


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/201482