本节摘要:定义先行——数据驱动分析是"方程未知、数据在手"场景下的一套流程:延迟嵌入把一维时间序列重构出吸引子(塔肯斯定理担保),不变量算法(维数、李雅普诺夫指数)给系统定性,稀疏回归(SINDy 一类)甚至能把方程逐项"读"回来。本节给出三级流程与一段二十行代码:从洛伦兹数据反推出 dx/dt = 10(y−x) 的正确系数。
本节是方法学的收官,视角与前几节相反:以前是"方程 → 数据",现在"数据 → 方程"。对照轴一如既往:机理第一的建模对数据第一的重构——两条路最终在同一个相空间里会师。
实际工程里大量系统拿不到方程:脑电、地脉动、设备振动、市场指数。但只要它由确定性的低维动力学生成,就有三级递进的读法:
第一级:重构吸引子。 延迟嵌入定理(塔肯斯,1981)保证:把标量序列 x(t) 拼成高维向量 X(t) = [x(t), x(t+τ), x(t+2τ), …, x(t+(m−1)τ)],只要嵌入维 m 足够大(经验上大于吸引子维数的两倍取整),重构向量集与真实吸引子微分同胚——形状一样、维数一样、李雅普诺夫指数一样。τ 取互信息函数的第一个极小值,m 用"伪最近邻"法确定:维数不够时,本是分开的点在投影里假性贴在一起,逐级升维直到伪邻居消失。
第二级:算不变量。 对重构后的点集跑 4.1 节的盒计数与 5.3 节的贝内坦算法——维数与指数是不变量的好处就在这里:重构不完美也基本算得准。
第三级:反推方程。 数值微分拿到导数估计后,"找方程"变成一个回归问题:dx/dt = Θ(X)·Ξ,其中 Θ 是候选函数库(常数、线性项、平方项、交叉项……),Ξ 是待定系数。真正的方程在 Θ 里是稀疏的——大多数候选系数为零——所以用带阈值淘汰的稀疏回归(序贯阈值最小二乘)而不是普通最小二乘,方能从噪声里挑出真项。
| 维度 | 机理第一(建模) | 数据第一(重构) |
|---|---|---|
| 起点 | 守恒律、机理清单 | 时间序列 |
| 产出 | 参数待定的方程 | 吸引子、不变量、稀疏方程 |
| 风险 | 机理漏项(4.4 节时延教训) | 噪声、欠采样、伪轨道 |
| 检验手段 | 数值实验对照实测 | 换数据段复测、短程预测检验 |
| 最佳战场 | 结构清楚的系统 | 黑箱但低维的系统 |
两行的末格合起来读,就是本章的结论:黑箱能重构的前提是"低维",而确认低维恰恰要靠重构本身——所以数据驱动不是机理建模的替代品,是它的侦察兵。
背景:假装不知道洛伦兹方程,只拿到状态 (x, y, z) 的采样序列(间隔 0.1,共约 250 点)。
操作:数值微分估计导数,建十列候选库,最小二乘回归 dx/dt,再按阈值淘汰小系数:
import numpy as np from scipy.integrate import solve_ivp sol = solve_ivp(lambda t, s: [10 * (s[1] - s[0]), s[0] * (28 - s[2]) - s[1], s[0] * s[1] - 8 * s[2] / 3], [0, 25], [1.0, 1.0, 1.0], rtol=1e-10, dense_output=True) X = sol.y[:, ::10].T # 当作未知系统的采样 dX = np.gradient(X, 0.1, axis=0) # 数值微分 Theta = np.column_stack([np.ones(len(X)), X[:, 0], X[:, 1], X[:, 2], X[:, 0]**2, X[:, 0] * X[:, 1], X[:, 0] * X[:, 2], X[:, 1]**2, X[:, 1] * X[:, 2], X[:, 2]**2]) labels = ["1", "x", "y", "z", "x^2", "xy", "xz", "y^2", "yz", "z^2"] coef = np.linalg.lstsq(Theta, dX[:, 0], rcond=None)[0] coef[np.abs(coef) < 0.5] = 0 # 稀疏化: 淘汰小系数 for l, c in zip(labels, coef): if c != 0: print(f"dx/dt 含 {l} 项, 系数 {c:+.2f}")
结果(典型输出):只剩 y 项 +10.00 与 x 项 −10.00——洛伦兹第一条方程原样奉还;对 dX 的另两列重复回归,会把 +28、−1、−8/3 全部读出。
解读:稀疏化一步是灵魂。不做阈值淘汰时,十列系数全部非零、全是错的;阈值一卡,真项毫发无损、假项归零——"物理方程是稀疏的"这条先验,比任何回归技巧都值钱。变式:给数据加百分之一的噪声再跑,数值微分成为短板,需要先平滑或改用积分形式(把回归写成对积分量的拟合);噪声与采样正是数据驱动方法的两条命门。
⚠️ 常见坑:嵌入维不足时重构出的"吸引子"是投影假象——自交叉的轨道看起来像混沌,实为降维损失。判据是伪最近邻曲线:不升到拐点就下结论,等于拿影子当本人。
💡 关键直觉:数据驱动的尽头仍是机理。SINDy 读回方程后,每一项都该问"它对应什么物理"——读得出方程是本事,解释得了方程才是理解。
分两级使用。用作"假设生成器"——读出的稀疏方程是候选机理,后续走第七章的四步验证,这是它的正确身份。用作"直接生产工具"——在已验证的工况范围内做插值预测,也可接受。危险的是第三种用法:拿拟合优度高当机理正确,在训练工况之外外推。判别信号看系数的物理合理性:读回的系数若与已知守恒律、量纲、对称性冲突,先怀疑数据与候选库,别急着宣布发现新物理。数据驱动的谦逊守则一句话:它扩大假设的来源,不缩短验证的流程。
方法齐了。下一章把整套工具箱搬进现场:物理、生物、经济与气候,每个战场都先摆一对"线性对非线性"的靶子。