3. 最小二乘法入门:线性最小二乘、加权最小二乘、递推最小二乘

各位同学好,我是你们的老朋友。今天咱们来聊聊最小二乘法。说实话,这玩意儿在动力学参数辨识里,就像炒菜用的盐——少了它,菜就没味儿。

我记得刚入行那会儿,带我的老工程师跟我说:“小子,你把最小二乘法搞明白了,参数辨识你就入门了。”当时我还不信,后来踩了无数坑才明白,这话一点不假。

好,咱们直接进入正题。

3.1 线性最小二乘:最朴素的解法

先问大家一个问题:给你一堆数据点,让你画一条直线穿过它们,怎么画?

你可能会说:“让所有点到直线的距离之和最小呗。”没错,这就是最小二乘法的核心思想。

数学上,我们通常写成这样:

y = Xθ + ε

其中 y 是观测值,X 是回归矩阵,θ 是待估计的参数,ε 是误差项。

我们的目标就是找到 θ,让误差的平方和最小。说白了就是:

J = (y - Xθ)ᵀ(y - Xθ) → min

对 θ 求导,令导数为零,得到传说中的正规方程:

θ̂ = (XᵀX)⁻¹Xᵀy

嗯,就这么简单。但我在项目中遇到过一个问题——当 XᵀX 接近奇异时,求逆会非常不稳定。你想想看,一个接近零的数做分母,结果能靠谱吗?

⚠️ 注意: 如果 XᵀX 的条件数很大(比如超过 1000),求逆结果基本不可信。这时候需要检查你的激励轨迹是否充分。

3.2 加权最小二乘:给数据点打分

线性最小二乘有个隐含假设——所有观测值的精度是一样的。但实际工程中,这几乎不可能。

举个例子。我在调试六轴机器人时,关节 1 的扭矩传感器精度是 0.1 Nm,关节 6 的精度是 0.01 Nm。如果还用普通最小二乘,高精度的数据就被浪费了。

这时候,加权最小二乘就派上用场了。

它的思想很简单:给每个数据点分配一个权重。精度高的,权重大;精度低的,权重小。

J = (y - Xθ)ᵀW(y - Xθ) → min

其中 W 是对角权重矩阵。解出来就是:

θ̂ = (XᵀWX)⁻¹XᵀWy

你看,和普通最小二乘长得差不多,就是多了个 W。

💡 个人经验: 权重怎么选?我一般用测量噪声方差的倒数。比如传感器 A 的噪声方差是 0.01,传感器 B 是 0.04,那权重比就是 4:1。简单粗暴,但很有效。

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)⁻¹Xᵀy • 需要矩阵求逆 核心特性 • 引入权重矩阵 W • 处理异方差数据 • 权重 = 1/噪声方差 核心特性 • 在线实时更新 • 遗忘因子 λ ∈ [0.95,1] • 无需存储全部历史数据 选择哪种方法?看你的数据是离线还是在线,精度是否一致

好了,今天的内容就到这里。最小二乘法看着简单,但真正用好它,需要你对数据、对系统有深刻的理解。下次咱们聊怎么设计激励轨迹,让 XᵀX 矩阵乖乖听话。


专注资料整理