3. 最小二乘法入门:线性最小二乘、加权最小二乘、递推最小二乘
各位同学好,我是你们的老朋友。今天咱们来聊聊最小二乘法。说实话,这玩意儿在动力学参数辨识里,就像炒菜用的盐——少了它,菜就没味儿。
我记得刚入行那会儿,带我的老工程师跟我说:“小子,你把最小二乘法搞明白了,参数辨识你就入门了。”当时我还不信,后来踩了无数坑才明白,这话一点不假。
好,咱们直接进入正题。
3.1 线性最小二乘:最朴素的解法
先问大家一个问题:给你一堆数据点,让你画一条直线穿过它们,怎么画?
你可能会说:“让所有点到直线的距离之和最小呗。”没错,这就是最小二乘法的核心思想。
数学上,我们通常写成这样:
y = Xθ + ε
其中 y 是观测值,X 是回归矩阵,θ 是待估计的参数,ε 是误差项。
我们的目标就是找到 θ,让误差的平方和最小。说白了就是:
J = (y - Xθ)ᵀ(y - Xθ) → min
对 θ 求导,令导数为零,得到传说中的正规方程:
θ̂ = (XᵀX)⁻¹Xᵀy
嗯,就这么简单。但我在项目中遇到过一个问题——当 XᵀX 接近奇异时,求逆会非常不稳定。你想想看,一个接近零的数做分母,结果能靠谱吗?
3.2 加权最小二乘:给数据点打分
线性最小二乘有个隐含假设——所有观测值的精度是一样的。但实际工程中,这几乎不可能。
举个例子。我在调试六轴机器人时,关节 1 的扭矩传感器精度是 0.1 Nm,关节 6 的精度是 0.01 Nm。如果还用普通最小二乘,高精度的数据就被浪费了。
这时候,加权最小二乘就派上用场了。
它的思想很简单:给每个数据点分配一个权重。精度高的,权重大;精度低的,权重小。
J = (y - Xθ)ᵀW(y - Xθ) → min
其中 W 是对角权重矩阵。解出来就是:
θ̂ = (XᵀWX)⁻¹XᵀWy
你看,和普通最小二乘长得差不多,就是多了个 W。
3.3 递推最小二乘:在线更新的利器
前面两种方法都是“批处理”——把所有数据攒齐了,一次性算。但实际控制中,数据是源源不断来的。你总不能每来一个新数据,就把所有历史数据重新算一遍吧?
递推最小二乘(RLS)就是解决这个问题的。
它的核心思想是:用上一时刻的估计值,加上新数据带来的修正量,得到新的估计值。
公式长这样:
K(k) = P(k-1)X(k)ᵀ / (λ + X(k)P(k-1)X(k)ᵀ)
θ̂(k) = θ̂(k-1) + K(k)(y(k) - X(k)θ̂(k-1))
P(k) = (I - K(k)X(k))P(k-1) / λ
其中 λ 是遗忘因子,取值范围一般在 0.95 到 1 之间。
我曾经在调试一个打磨机器人时,用了 RLS 在线辨识摩擦参数。刚开始效果不错,但运行半小时后参数开始剧烈抖动。查了半天才发现——遗忘因子设得太小了(0.9),导致旧数据被快速遗忘,参数失去了稳定性。
避坑指南: 我曾经把遗忘因子设成 0.98,结果参数收敛太慢,跟不上系统变化。后来调到 0.95,效果刚刚好。记住:λ 越接近 1,算法越稳定但响应越慢;λ 越小,响应越快但越容易震荡。
3.4 三种方法的对比
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 线性最小二乘 | 离线批处理,数据质量好 | 实现简单,理论成熟 | 不能在线更新,对异常值敏感 |
| 加权最小二乘 | 传感器精度不一致 | 充分利用高精度数据 | 权重需要先验知识 |
| 递推最小二乘 | 在线实时辨识 | 计算量小,可在线更新 | 遗忘因子需要调参 |
3.5 知识体系总览
下面这张图,是我自己画的最小二乘法知识框架。你看一眼,心里就有数了。
好了,今天的内容就到这里。最小二乘法看着简单,但真正用好它,需要你对数据、对系统有深刻的理解。下次咱们聊怎么设计激励轨迹,让 XᵀX 矩阵乖乖听话。