☰
最小二乘法全解析:从原理到工程实战避坑指南
2026/10/15 11:51:49 网站建设 项目流程

很多工程师一看到“最小二乘法”,第一反应是大学课堂里的旧账,觉得离产线调试、设备标定很远。但我在现场用它的感受恰恰相反:这可能是工程里性价比最高的参数估计工具。传感器校准要找电压和温度的直线关系,电机转速测量需要从脉冲频率里反推转速,设备老化后要重新标定零点增益,这些场景背后都是同一件事——给一堆带着噪声的测量点,找一条最合理的拟合曲线。最小二乘法就是干这个的,而且它给出来的结果不只是一个公式,还有一套衡量“拟合得好不好”的标准。这篇文章就围绕它展开,适合用过公式但没深究过原理、以及正在做数据拟合但总被异常点坑一把的工程师。

1. 最小二乘法的核心直觉与现实场景

1.1 为什么工程计算偏爱“最小二乘”

先别急着看公式,理解它解决什么问题更重要。工程里大量关系本质上可以写成这样:

输出 = 系数 × 输入 + 偏差

可实际测量时,每个点的输出都带噪声,五个点、十个点测下来,没有一个点能精确落在同一条直线上。如果随手取两个点画一条线,另外几个点就被抛弃了,这种拟合结果没有任何防御力。如果取多组点反复试着画,又太依赖手感和经验,换个数据就要重新折腾。

最小二乘的思维方式很直接:先定义“拟合误差”为每个测量点到拟合曲线的垂直偏差,把这些偏差全部平方相加,得到一个总代价,然后寻找让这个总代价最小的那条曲线。为什么是平方而不是取绝对值?因为平方函数可导,能让“求最优”变成纯粹的数学计算;同时它对较大的偏差惩罚更重,相当于强迫拟合结果不要轻易放过误差很大的点。

这个代价函数的选择,决定了最小二乘特别适合处理高斯噪声环境下的测量问题。现实中热噪声、量化噪声、环境抖动叠加起来,误差分布常常近似正态,平方和最小化恰好能给出接近最优的参数估计。这也是为什么它在自动控制、仪表校准、信号处理里几乎是默认选项。

1.2 几个典型的工程触发场景

我在实际项目里用到最小二乘最多的场景可以分成三类:

第一类是标定。设备出厂前免不了要做输入输出特性校准,最典型的是温度传感器:用标准温度源给出一组温度,同时记录传感器输出的电压或数字量,两者之间存在明显的线性关系,但每个点都偏离理论线。这时拟合出的斜率和截距就是标定系数,写进固件后设备才能给出可信测量值。

第二类是间接测量。很多物理量不能直接测,需要通过关联量去推算。比如通过电机编码器的脉冲频率估算转速,频率和转速有线性关系,但脉冲计数存在量化误差,多采几组数据拟合后得到的转速换算系数,比只用额定值可靠得多。

第三类是参数辨识的入门。一个简单一阶系统的阶跃响应,如果能取到多组时间与输出数据,用最小二乘拟合指数响应曲线,就能反推出时间常数和稳态增益。这比拿秒表掐上升沿凭经验估算要严谨得多。

可以说,凡是“一堆带噪声的数据点,需要压缩成少数几个参数”的时候,最小二乘都应该出现在备选方案的第一梯队。

2. 从二次代价到正规方程:把公式彻底拆明白

2.1 两个变量时的解析解

先从最简单的一元线性拟合说起。假设有一组数据点 (x₁,y₁), (x₂,y₂), …, (xₙ,yₙ),想用一条直线去拟合:

y = ax + b

其中 a 是斜率,b 是截距。对每一个观测点,拟合残差是:

eᵢ = yᵢ - (a·xᵢ + b)

代价函数定义为:

J(a,b) = Σ(yᵢ - a·xᵢ - b)²

要让 J 最小,对 a 和 b 分别求偏导并令其等于零。整理之后会得到一个二元一次方程组,解出来就是教科书里的公式:

a = (n·Σxy - Σx·Σy) / (n·Σx² - (Σx)²)

b = (Σy - a·Σx) / n

这套公式从推导到实现都不复杂,但很少有人真的逐项推导过。其实推一遍很快:把 J 展开,对 a 求导时 b 当作常数,对 b 求导时 a 当作常数,联立解方程即可。关键要理解的是,这个最优解不是随意定的,而是“让所有残差平方和最小”这个目标函数的唯一极值点。

2.2 矩阵形式的普适写法

一元直线只是最小二乘最浅的应用。真实工业场景里输入往往不止一个,要拟合的模型也可能是多项式、高维曲面,这时用标量公式写起来非常痛苦。把问题写成矩阵形式,才能发挥最小二乘的真正威力。

设 X 为设计矩阵,每一行对应一个样本的所有输入特征,外加一列常数 1 用来表达截距;y 为所有观测输出组成的列向量;β 为待求参数列向量。模型写作:

y = Xβ + e

代价函数写作:

J(β) = eᵀe = (y - Xβ)ᵀ(y - Xβ)

对 β 求导并令梯度为零,得到著名的正规方程:

XᵀXβ = Xᵀy

若 XᵀX 可逆,则最优解为:

β = (XᵀX)⁻¹ Xᵀy

这里的 (XᵀX)⁻¹Xᵀ 就是矩阵 X 的伪逆在满秩情形下的形式。工程实现里直接用伪逆求解往往更稳妥,因为它不要求严格满秩,数值稳定性也更好。

2.3 从几何投影理解最小二乘的本质

公式之外我推荐工程人都建立一种几何直觉:把 y 看成多维空间里的一个列向量,把 X 的各列看成撑起一个平面的“基向量”。由于测量噪声,y 往往不在这个平面里,而最小二乘所做的,就是寻找平面里离 y 最近的那个点,也就是 y 在平面上的正交投影。

投影有一个重要性质:残差向量 y - Xβ 与平面垂直,也就是与 X 的每一列都正交。数学上写成:

Xᵀ(y - Xβ) = 0

这个式子其实就是正规方程。所以快速记住正规方程的关键,不是背公式,而是理解“残差应该与所有输入特征都不相关”。如果残差里还残留着和输入相关的信息,说明模型还没有把信息榨干,拟合还能继续改进。

3. 工程代码里的落地方式:手工推导与数值实现

3.1 走一遍真实标定数据

光讲公式不够,拿一组我处理过的标定数据走一遍。假设某温度传感器模块在标准温度源下,分别给定 1 到 5 毫伏的激励电压,读到的输出温度如下:

x(电压,mV)y(温度,℃)
120.1
221.5
323.0
424.2
525.6

数据很接近一条直线,但有少量噪声。按一元公式计算:

n=5,Σx=15,Σy=114.4,Σxy=356.9,Σx²=55

斜率 a = (5×356.9 - 15×114.4) / (5×55 - 225) = 68.5 / 50 = 1.37 ℃/mV

截距 b = (114.4 - 1.37×15) / 5 = 18.77 ℃

所以拟合曲线为:

y = 1.37x + 18.77

把每个点的拟合值算出来,残差分别约为 -0.04、-0.01、0.12、-0.05、-0.02 ℃,残差平方和只有 0.019 左右。从残差分布来看,既有正也有负,没有明显单侧趋势,说明线性模型对这批数据的描述是合理的。这个斜率单位是“摄氏度每毫伏”,写固件时千万别丢掉单位,否则换算系数会直接错一个量级。

3.2 三种比手写公式更稳的代码策略

工程上我建议不要用上面那套标量公式直接写代码,原因有两个:一是数据量大时标量公式容易出错且难以维护;二是直接用 XᵀX 求逆在数值上不够稳。更推荐的方案是把问题组织成设计矩阵,交给数值库求解。

import numpy as np x = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) y = np.array([20.1, 21.5, 23.0, 24.2, 25.6]) A = np.vstack([x, np.ones_like(x)]).T beta, residuals, rank, s = np.linalg.lstsq(A, y, rcond=None) a, b = beta print(f"斜率 a = {a:.3f}, 截距 b = {b:.3f}")

lstsq 内部通过奇异值分解求解,比直接求 XᵀX 再求逆稳健得多。即使设计矩阵不满秩,它也能返回最小范数解而不是直接崩溃。

第二个策略是计算前做数据中心化。把 x 减去均值再参与拟合,可以显著降低 XᵀX 的条件数,对数值稳定性很有帮助。做完后别忘了截距要还原到原始坐标。这一招在自变量数量级很大、比如振动幅值达到上万时特别有效。

第三个策略是永远同时输出拟合参数和残差。只打印一条拟合公式等于没干活,残差的分布才是判断模型是否可信的关键。做自动化标定时,我会把残差的最大绝对值、平方和、以及残差序列的极性反转次数都记录下来,任何一个异常都会触发告警。

3.3 加权最小二乘:当每个点的可信度不同时

实际测量中,不同点的噪声方差往往不一致。比如量程末端的传感器输出波动明显更大,或者某些数据点来自多次测量平均值、可信度更高。这时给每个样本分配权重 wᵢ 更合理,代价函数变成:

J(β) = Σwᵢ(yᵢ - xᵢᵀβ)²

矩阵形式的解为:

β = (XᵀWX)⁻¹ XᵀWy

其中 W 是对角权重矩阵。代码实现上,只要把普通最小二乘的 A 和 y 各自“加权”一下即可:

w = np.array([1.0, 1.0, 1.5, 1.5, 2.0]) Aw = A * np.sqrt(w)[:, None] yw = y * np.sqrt(w) beta_w, _, _, _ = np.linalg.lstsq(Aw, yw, rcond=None)

为什么可以直接把权重开根号乘进去?因为加权最小二乘等价于对每个样本除以各自标准差后,再做一次普通最小二乘。这个视角可以帮助理解:加权只是在改变每个样本在代价函数里的“话语权”。

4. 工程应用里躲不开的坑:过拟合、异常点与病态矩阵

4.1 高阶多项式不是越高越好

刚接触拟合的工程师最容易犯的一个错误,是把多项式阶数越加越高,看到曲线穿过了每一个点就以为模型完美。事实上,当多项式阶数接近样本数量时,拟合曲线会在数据点之间剧烈振荡,完全失去物理意义。比如用 10 阶多项式去拟合 5 个点,每个点都精确落在曲线上,但曲线在区间内扭得乱七八糟,任何一个中间插值都会给出离谱结果。

工程上判断模型是否过拟合,最简单的方法是看残差形态:如果低阶模型残差在零点两侧均匀分布,说明已经提取了主要信息,没必要再加阶数。如果残差存在明显的“拱形”走势,比如前半段全为正、后半段全为负,那才说明模型缺少某个关键项。另一个实用经验是数据点数量至少要比参数数量多一倍以上,且绝不让多项式阶数超过数据点数量的一半。

4.2 异常值会把拟合“拐走”

最小二乘对异常点极其敏感,因为误差平方放大了大偏差的惩罚。一个离群点哪怕只有一个,也可能把拟合直线硬生生拉向自己,让大多数正常点反而偏离拟合结果。我在处理现场数据时,遇到过 100 个点里混入 1 个传感器短路产生的尖峰,拟合斜率偏移近 15% 的情况。

要避免这种问题,不能把最小二乘当成黑盒直接吞数据。常规做法是先做一次普通拟合,算出每个点的残差,把残差绝对值超过 3 倍标准差的点标记出来,结合现场记录判断是真异常还是正常波动。如果是异常就剔除后重新拟合。更稳健的做法是使用带鲁棒权重的迭代重加权最小二乘,让远离拟合曲线的点自动降低权重,但这个方法的工程复杂度更高,一般只在数据质量较差的场景下使用。

4.3 病态矩阵和特征尺度问题

多变量拟合时,如果两个输入特征高度相关,或者某个输入的量纲远大于其他输入,XᵀX 会变得接近奇异,参数解对数据扰动非常敏感。一个微小的测量噪声,可能导致参数发生巨大跳变。

解决路径有两个方向。一是对输入特征做标准化,让每个维度均值归零、方差归一到同一尺度;二是当特征确实存在强相关时,考虑减少特征数量。如果不想删特征,也可以在正规方程中加入一个很小的对角惩罚项:

β = (XᵀX + λI)⁻¹ Xᵀy

这就变成了岭回归,用一点点偏差换取数值稳定性和参数可解释性。λ 的确定通常通过网格搜索配合交叉验证来完成,工程现场则可以直接看拟合残差随 λ 的变化曲线,选最大残差开始显著上升之前的 λ。

4.4 外推是风险的放大器

最小二乘拟合出的模型只在数据覆盖的区间内有资格被信任。用 0 到 100℃ 标定的传感器模型去预测 150℃ 的输出,纯属赌博。曾经有现场工程师拿标定线往外推,测出负值后怀疑传感器坏了,其实是模型根本没有能力覆盖那个区间。

工程上碰到这种情况,要么补充标定数据把量程扩展,要么在固件里增加超量程判定标志。对外推要保持高度警惕,这是最小二乘使用中的一条硬约束。

5. 从最小二乘继续往前走:三个值得掌握的变体

5.1 岭回归:把病态问题从根上处理

前面提到的岭回归是正则化思路的典型代表。它的代价函数多了一项对参数长度的惩罚:

J(β) = (y - Xβ)ᵀ(y - Xβ) + λ‖β‖²

惩罚项迫使参数不要取太大数值,这在数据噪声明显、特征相关性强时非常有用。工程上常见的应用是建立多变量回归模型时,某些变量之间本身有物理耦合,不加以约束得到的系数可能一个巨大正数、一个巨大负数相互抵消,模型外推立刻崩溃。加入 λ 后参数被限制在合理范围内,模型稳定性明显提升。

5.2 迭代重加权最小二乘:对异常点不再害怕

前面提到的鲁棒拟合,常用方法就是迭代重加权最小二乘。它的思路是交替执行两步:用当前权重做一次加权最小二乘,得到残差;再根据残差大小重新计算权重,残差大的样本权重调低,残差小的样本权重调高。迭代几次后,异常点对拟合结果的影响会被显著削弱。

工程上我会在自动化产线数据清洗环节用这个思路,它比硬性剔除数据更平滑,不会因为阈值设置不当把正常点误删。不过要注意的是,它不能保证收敛到全局最优,实际使用时要设定最大迭代次数和收敛阈值。

5.3 正交回归:当 x 轴也有噪声时

常规最小二乘假设 x 轴测量是准确无误的,只是 y 轴带噪声。但实际工程中,输入量的测量同样可能不准确。比如用位移传感器和力传感器同时记录数据,两者都有噪声,这时最小化“y 方向残差”就不是唯一合理的标准,更公平的做法是最小化每个点到拟合直线的垂直距离,这就是正交回归,也叫全最小二乘。

正交回归对数据预处理要求更高,参数求解也要用到奇异值分解,不能直接套用标量公式。但它能给出更真实的标定关系,尤其适合两个方向噪声量级相近的测量系统。我的建议是:只有当你明确知道 x 方向引入的噪声不可忽略时再上正交回归,否则普通最小二乘依然是更稳健、更易解释的选择。

最后分享一个我自己的使用习惯:无论用哪种拟合方法,拿到参数后先别急着上线,把拟合曲线和原始数据画在同一张图里看一眼,再顺手把残差序列也画出来。这一步只要两分钟,但能挡住八成以上的拟合事故。最小二乘是个好工具,但好工具也得知道它的边界在哪里,把它放在合理的区间内使用,它才能真正变成你手里最稳的那个“标定尺”。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询