本文主要是介绍从最小二乘法的角度来理解卡尔曼滤波(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
从最小二乘法的角度来理解卡尔曼滤波(1)
flyfish
假设你有一堆数据点,比如在一个二维平面上有很多点。你想找到一条直线,能够尽可能接近这些点。这条直线可以用一个方程来表示:y = mx + b,其中 m 是斜率,b 是截距。
但是这些数据点通常不会完美地在这条直线上,而是散布在它的周围。每个点与这条直线之间的距离称为误差(残差)。为了找到最佳的直线,我们希望所有这些误差的平方和最小。为什么是平方和?因为这样可以避免正负误差相互抵消。
最小二乘法就是通过调整 m 和 b 来使得所有点到直线的距离的平方和最小。
数学公式
假设我们有 n n n 个数据点 ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) (x_1, y_1), (x_2, y_2), ..., (x_n, y_n) (x1,y1),(x2,y2),...,(xn,yn),我们的目标是找到直线 y = m x + b y = mx + b y=mx+b 使得以下的平方和最小:
SSE = ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \text{SSE} = \sum_{i=1}^n (y_i - (mx_i + b))^2 SSE=i=1∑n(yi−(mxi+b))2
其中,SSE 是残差平方和(Sum of Squared Errors)。
演示下样子
import numpy as np
import matplotlib.pyplot as plt# 生成一些示例数据
np.random.seed(0)
x = np.linspace(0, 10, 100)
y = 2.5 * x + np.random.normal(size=x.size)# 最小二乘法计算斜率和截距
def least_squares(x, y):n = len(x)x_mean = np.mean(x)y_mean = np.mean(y)xy_mean = np.mean(x * y)xx_mean = np.mean(x * x)m = (xy_mean - x_mean * y_mean) / (xx_mean - x_mean * x_mean)b = y_mean - m * x_meanreturn m, bm, b = least_squares(x, y)# 绘制数据点和拟合直线
plt.scatter(x, y, label='Data Points')
plt.plot(x, m * x + b, color='red', label=f'Fitted Line: y = {m:.2f}x + {b:.2f}')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.title('Least Squares Fitting')
plt.show()
最小二乘法的解计算过程
我们通过最小化残差平方和 SSE = ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \text{SSE} = \sum_{i=1}^n (y_i - (mx_i + b))^2 SSE=∑i=1n(yi−(mxi+b))2 来求解最佳的直线拟合参数 m m m 和 b b b。下面是详细的计算步骤。
1. 残差平方和公式
首先,残差平方和的公式如下:
SSE = ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \text{SSE} = \sum_{i=1}^n (y_i - (mx_i + b))^2 SSE=i=1∑n(yi−(mxi+b))2
2. 对 b b b 和 m m m 求导并设导数为零
分别对 b b b 和 m m m 求导并设导数为零,得到两个方程:
∂ SSE ∂ b = − 2 ∑ i = 1 n ( y i − ( m x i + b ) ) = 0 \frac{\partial \text{SSE}}{\partial b} = -2 \sum_{i=1}^n (y_i - (mx_i + b)) = 0 ∂b∂SSE=−2i=1∑n(yi−(mxi+b))=0
∂ SSE ∂ m = − 2 ∑ i = 1 n x i ( y i − ( m x i + b ) ) = 0 \frac{\partial \text{SSE}}{\partial m} = -2 \sum_{i=1}^n x_i (y_i - (mx_i + b)) = 0 ∂m∂SSE=−2i=1∑nxi(yi−(mxi+b))=0
简化上面的两个方程,我们得到:
∑ i = 1 n y i = m ∑ i = 1 n x i + n b \sum_{i=1}^n y_i = m \sum_{i=1}^n x_i + nb ∑i=1nyi=m∑i=1nxi+nb
∑ i = 1 n x i y i = m ∑ i = 1 n x i 2 + b ∑ i = 1 n x i \sum_{i=1}^n x_i y_i = m \sum_{i=1}^n x_i^2 + b \sum_{i=1}^n x_i ∑i=1nxiyi=m∑i=1nxi2+b∑i=1nxi
3. 求解 m m m 和 b b b
首先,通过代数操作解出 b b b:
b = ∑ i = 1 n y i − m ∑ i = 1 n x i n b = \frac{\sum_{i=1}^n y_i - m \sum_{i=1}^n x_i}{n} b=n∑i=1nyi−m∑i=1nxi
然后,将 b b b 代入到第二个方程中,解出 m m m:
m = n ∑ i = 1 n x i y i − ∑ i = 1 n x i ∑ i = 1 n y i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 m = \frac{n\sum_{i=1}^n x_i y_i - \sum_{i=1}^n x_i \sum_{i=1}^n y_i}{n\sum_{i=1}^n x_i^2 - (\sum_{i=1}^n x_i)^2} m=n∑i=1nxi2−(∑i=1nxi)2n∑i=1nxiyi−∑i=1nxi∑i=1nyi
最后,通过计算 m m m 的值,可以求出 b b b 的值。
最小二乘法中的导数求解与简化过程
1. 残差平方和公式
首先,我们从残差平方和公式开始:
SSE = ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \text{SSE} = \sum_{i=1}^n (y_i - (mx_i + b))^2 SSE=i=1∑n(yi−(mxi+b))2
2. 对 b b b 和 m m m 求导并设导数为零
为了找到最小值,我们需要对 b b b 和 m m m 求导数,并将导数设为零。
对 b b b 求导:
∂ SSE ∂ b = ∂ ∂ b ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \frac{\partial \text{SSE}}{\partial b} = \frac{\partial}{\partial b} \sum_{i=1}^n (y_i - (mx_i + b))^2 ∂b∂SSE=∂b∂i=1∑n(yi−(mxi+b))2
我们将求导数的过程分步展开:
∂ SSE ∂ b = ∑ i = 1 n ∂ ∂ b ( y i − ( m x i + b ) ) 2 \frac{\partial \text{SSE}}{\partial b} = \sum_{i=1}^n \frac{\partial}{\partial b} (y_i - (mx_i + b))^2 ∂b∂SSE=i=1∑n∂b∂(yi−(mxi+b))2
使用链式法则:
∂ ∂ b ( y i − ( m x i + b ) ) 2 = 2 ( y i − ( m x i + b ) ) ⋅ ∂ ∂ b ( y i − ( m x i + b ) ) \frac{\partial}{\partial b} (y_i - (mx_i + b))^2 = 2(y_i - (mx_i + b)) \cdot \frac{\partial}{\partial b} (y_i - (mx_i + b)) ∂b∂(yi−(mxi+b))2=2(yi−(mxi+b))⋅∂b∂(yi−(mxi+b))
注意到 ∂ ∂ b ( y i − ( m x i + b ) ) = − 1 \frac{\partial}{\partial b} (y_i - (mx_i + b)) = -1 ∂b∂(yi−(mxi+b))=−1,所以:
∂ SSE ∂ b = ∑ i = 1 n 2 ( y i − ( m x i + b ) ) ( − 1 ) = − 2 ∑ i = 1 n ( y i − ( m x i + b ) ) \frac{\partial \text{SSE}}{\partial b} = \sum_{i=1}^n 2(y_i - (mx_i + b))(-1) = -2 \sum_{i=1}^n (y_i - (mx_i + b)) ∂b∂SSE=i=1∑n2(yi−(mxi+b))(−1)=−2i=1∑n(yi−(mxi+b))
令其为零:
− 2 ∑ i = 1 n ( y i − ( m x i + b ) ) = 0 -2 \sum_{i=1}^n (y_i - (mx_i + b)) = 0 −2i=1∑n(yi−(mxi+b))=0
简化得到:
∑ i = 1 n ( y i − m x i − b ) = 0 \sum_{i=1}^n (y_i - mx_i - b) = 0 i=1∑n(yi−mxi−b)=0
对 m m m 求导:
∂ SSE ∂ m = ∂ ∂ m ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \frac{\partial \text{SSE}}{\partial m} = \frac{\partial}{\partial m} \sum_{i=1}^n (y_i - (mx_i + b))^2 ∂m∂SSE=∂m∂i=1∑n(yi−(mxi+b))2
同样地,我们分步展开:
∂ SSE ∂ m = ∑ i = 1 n ∂ ∂ m ( y i − ( m x i + b ) ) 2 \frac{\partial \text{SSE}}{\partial m} = \sum_{i=1}^n \frac{\partial}{\partial m} (y_i - (mx_i + b))^2 ∂m∂SSE=i=1∑n∂m∂(yi−(mxi+b))2
使用链式法则:
∂ ∂ m ( y i − ( m x i + b ) ) 2 = 2 ( y i − ( m x i + b ) ) ⋅ ∂ ∂ m ( y i − ( m x i + b ) ) \frac{\partial}{\partial m} (y_i - (mx_i + b))^2 = 2(y_i - (mx_i + b)) \cdot \frac{\partial}{\partial m} (y_i - (mx_i + b)) ∂m∂(yi−(mxi+b))2=2(yi−(mxi+b))⋅∂m∂(yi−(mxi+b))
注意到 ∂ ∂ m ( y i − ( m x i + b ) ) = − x i \frac{\partial}{\partial m} (y_i - (mx_i + b)) = -x_i ∂m∂(yi−(mxi+b))=−xi,所以:
∂ SSE ∂ m = ∑ i = 1 n 2 ( y i − ( m x i + b ) ) ( − x i ) = − 2 ∑ i = 1 n x i ( y i − ( m x i + b ) ) \frac{\partial \text{SSE}}{\partial m} = \sum_{i=1}^n 2(y_i - (mx_i + b))(-x_i) = -2 \sum_{i=1}^n x_i (y_i - (mx_i + b)) ∂m∂SSE=∑i=1n2(yi−(mxi+b))(−xi)=−2∑i=1nxi(yi−(mxi+b))
令其为零:
− 2 ∑ i = 1 n x i ( y i − ( m x i + b ) ) = 0 -2 \sum_{i=1}^n x_i (y_i - (mx_i + b)) = 0 −2i=1∑nxi(yi−(mxi+b))=0
简化得到:
∑ i = 1 n x i ( y i − m x i − b ) = 0 \sum_{i=1}^n x_i (y_i - mx_i - b) = 0 i=1∑nxi(yi−mxi−b)=0
3. 简化方程
对 b b b 的方程:
∑ i = 1 n ( y i − m x i − b ) = 0 \sum_{i=1}^n (y_i - mx_i - b) = 0 i=1∑n(yi−mxi−b)=0
拆开括号:
∑ i = 1 n y i − m ∑ i = 1 n x i − n b = 0 \sum_{i=1}^n y_i - m \sum_{i=1}^n x_i - nb = 0 i=1∑nyi−mi=1∑nxi−nb=0
我们得到第一个方程:
∑ i = 1 n y i = m ∑ i = 1 n x i + n b (1) \sum_{i=1}^n y_i = m \sum_{i=1}^n x_i + nb \tag{1} i=1∑nyi=mi=1∑nxi+nb(1)
对 m m m 的方程:
∑ i = 1 n x i ( y i − m x i − b ) = 0 \sum_{i=1}^n x_i (y_i - mx_i - b) = 0 i=1∑nxi(yi−mxi−b)=0
拆开括号:
∑ i = 1 n x i y i − m ∑ i = 1 n x i 2 − b ∑ i = 1 n x i = 0 \sum_{i=1}^n x_i y_i - m \sum_{i=1}^n x_i^2 - b \sum_{i=1}^n x_i = 0 i=1∑nxiyi−mi=1∑nxi2−bi=1∑nxi=0
我们得到第二个方程:
∑ i = 1 n x i y i = m ∑ i = 1 n x i 2 + b ∑ i = 1 n x i (2) \sum_{i=1}^n x_i y_i = m \sum_{i=1}^n x_i^2 + b \sum_{i=1}^n x_i \tag{2} i=1∑nxiyi=mi=1∑nxi2+bi=1∑nxi(2)
4. 联立方程求解 m m m 和 b b b
从方程(1)中解出 b b b:
b = ∑ i = 1 n y i − m ∑ i = 1 n x i n b = \frac{\sum_{i=1}^n y_i - m \sum_{i=1}^n x_i}{n} b=n∑i=1nyi−m∑i=1nxi
将 b b b 代入方程(2):
∑ i = 1 n x i y i = m ∑ i = 1 n x i 2 + ( ∑ i = 1 n y i − m ∑ i = 1 n x i n ) ∑ i = 1 n x i \sum_{i=1}^n x_i y_i = m \sum_{i=1}^n x_i^2 + \left(\frac{\sum_{i=1}^n y_i - m \sum_{i=1}^n x_i}{n}\right) \sum_{i=1}^n x_i i=1∑nxiyi=mi=1∑nxi2+(n∑i=1nyi−m∑i=1nxi)i=1∑nxi
简化:
∑ i = 1 n x i y i = m ∑ i = 1 n x i 2 + ∑ i = 1 n y i ∑ i = 1 n x i − m ( ∑ i = 1 n x i ) 2 n \sum_{i=1}^n x_i y_i = m \sum_{i=1}^n x_i^2 + \frac{\sum_{i=1}^n y_i \sum_{i=1}^n x_i - m (\sum_{i=1}^n x_i)^2}{n} i=1∑nxiyi=mi=1∑nxi2+n∑i=1nyi∑i=1nxi−m(∑i=1nxi)2
乘以 n n n:
n ∑ i = 1 n x i y i = m n ∑ i = 1 n x i 2 + ∑ i = 1 n y i ∑ i = 1 n x i − m ( ∑ i = 1 n x i ) 2 n \sum_{i=1}^n x_i y_i = m n \sum_{i=1}^n x_i^2 + \sum_{i=1}^n y_i \sum_{i=1}^n x_i - m (\sum_{i=1}^n x_i)^2 ni=1∑nxiyi=mni=1∑nxi2+i=1∑nyii=1∑nxi−m(i=1∑nxi)2
合并含 m m m 的项:
n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i = m ( n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 ) n \sum_{i=1}^n x_i y_i - \sum_{i=1}^n y_i \sum_{i=1}^n x_i = m \left( n \sum_{i=1}^n x_i^2 - (\sum_{i=1}^n x_i)^2 \right) ni=1∑nxiyi−i=1∑nyii=1∑nxi=m(ni=1∑nxi2−(i=1∑nxi)2)
解出 m m m:
m = n ∑ i = 1 n x i y i − ∑ i = 1 n x i ∑ i = 1 n y i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 m = \frac{n\sum_{i=1}^n x_i y_i - \sum_{i=1}^n x_i \sum_{i=1}^n y_i}{n\sum_{i=1}^n x_i^2 - (\sum_{i=1}^n x_i)^2} m=n∑i=1nxi2−(∑i=1nxi)2n∑i=1nxiyi−∑i=1nxi∑i=1nyi
将 m m m 代入方程(1)求 b b b:
b = ∑ i = 1 n y i − m ∑ i = 1 n x i n b = \frac{\sum_{i=1}^n y_i - m \sum_{i=1}^n x_i}{n} b=n∑i=1nyi−m∑i=1nxi
链式法则(Chain Rule)
链式法则是微积分中的一个重要法则,它用于求复合函数的导数。复合函数是指一个函数的值依赖于另一个函数的值,例如 f ( g ( x ) ) f(g(x)) f(g(x))。链式法则允许我们将复合函数的导数分解为内部函数和外部函数的导数之积。
链式法则的数学表达
设 h ( x ) = f ( g ( x ) ) h(x) = f(g(x)) h(x)=f(g(x)),其中 y = g ( x ) y = g(x) y=g(x) 和 z = f ( y ) z = f(y) z=f(y)。那么,链式法则的数学表达为:
d d x h ( x ) = d d x f ( g ( x ) ) = f ′ ( g ( x ) ) ⋅ g ′ ( x ) \frac{d}{dx} h(x) = \frac{d}{dx} f(g(x)) = f'(g(x)) \cdot g'(x) dxdh(x)=dxdf(g(x))=f′(g(x))⋅g′(x)
即:
d z d x = d z d y ⋅ d y d x \frac{dz}{dx} = \frac{dz}{dy} \cdot \frac{dy}{dx} dxdz=dydz⋅dxdy
对 b b b 求导
我们有残差平方和的公式:
SSE = ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \text{SSE} = \sum_{i=1}^n (y_i - (mx_i + b))^2 SSE=∑i=1n(yi−(mxi+b))2
对 b b b 求导时,我们可以看到 ( y i − ( m x i + b ) ) 2 (y_i - (mx_i + b))^2 (yi−(mxi+b))2 是一个复合函数,其中 y i − ( m x i + b ) y_i - (mx_i + b) yi−(mxi+b) 是内部函数,平方是外部函数。应用链式法则:
∂ ∂ b ( y i − ( m x i + b ) ) 2 = 2 ( y i − ( m x i + b ) ) ⋅ ∂ ∂ b ( y i − ( m x i + b ) ) \frac{\partial}{\partial b} (y_i - (mx_i + b))^2 = 2(y_i - (mx_i + b)) \cdot \frac{\partial}{\partial b} (y_i - (mx_i + b)) ∂b∂(yi−(mxi+b))2=2(yi−(mxi+b))⋅∂b∂(yi−(mxi+b))
这里 ∂ ∂ b ( y i − ( m x i + b ) ) = − 1 \frac{\partial}{\partial b} (y_i - (mx_i + b)) = -1 ∂b∂(yi−(mxi+b))=−1,所以:
∂ ∂ b ( y i − ( m x i + b ) ) 2 = 2 ( y i − ( m x i + b ) ) ⋅ ( − 1 ) = − 2 ( y i − ( m x i + b ) ) \frac{\partial}{\partial b} (y_i - (mx_i + b))^2 = 2(y_i - (mx_i + b)) \cdot (-1) = -2(y_i - (mx_i + b)) ∂b∂(yi−(mxi+b))2=2(yi−(mxi+b))⋅(−1)=−2(yi−(mxi+b))
对 m m m 求导
同样地,对 m m m 求导时,我们处理的也是一个复合函数:
∂ ∂ m ( y i − ( m x i + b ) ) 2 = 2 ( y i − ( m x i + b ) ) ⋅ ∂ ∂ m ( y i − ( m x i + b ) ) \frac{\partial}{\partial m} (y_i - (mx_i + b))^2 = 2(y_i - (mx_i + b)) \cdot \frac{\partial}{\partial m} (y_i - (mx_i + b)) ∂m∂(yi−(mxi+b))2=2(yi−(mxi+b))⋅∂m∂(yi−(mxi+b))
这里 ∂ ∂ m ( y i − ( m x i + b ) ) = − x i \frac{\partial}{\partial m} (y_i - (mx_i + b)) = -x_i ∂m∂(yi−(mxi+b))=−xi,所以:
∂ ∂ m ( y i − ( m x i + b ) ) 2 = 2 ( y i − ( m x i + b ) ) ⋅ ( − x i ) = − 2 x i ( y i − ( m x i + b ) ) \frac{\partial}{\partial m} (y_i - (mx_i + b))^2 = 2(y_i - (mx_i + b)) \cdot (-x_i) = -2x_i(y_i - (mx_i + b)) ∂m∂(yi−(mxi+b))2=2(yi−(mxi+b))⋅(−xi)=−2xi(yi−(mxi+b))
对复合函数的导数求解上具体来说:
- 对 b b b 求导:
- 外部函数 ( y i − ( m x i + b ) ) 2 (y_i - (mx_i + b))^2 (yi−(mxi+b))2 导数为 2 ( y i − ( m x i + b ) ) 2(y_i - (mx_i + b)) 2(yi−(mxi+b))。
- 内部函数 y i − ( m x i + b ) y_i - (mx_i + b) yi−(mxi+b) 对 b b b 的导数为 − 1 -1 −1。
- 对 m m m 求导:
- 外部函数 ( y i − ( m x i + b ) ) 2 (y_i - (mx_i + b))^2 (yi−(mxi+b))2 导数为 2 ( y i − ( m x i + b ) ) 2(y_i - (mx_i + b)) 2(yi−(mxi+b))。
- 内部函数 y i − ( m x i + b ) y_i - (mx_i + b) yi−(mxi+b) 对 m m m 的导数为 − x i -x_i −xi。
最小二乘法的目标函数
最小二乘法的目标是最小化残差平方和(SSE),其形式为:
SSE = ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \text{SSE} = \sum_{i=1}^n (y_i - (mx_i + b))^2 SSE=∑i=1n(yi−(mxi+b))2
这个目标函数是针对线性回归问题的。我们试图找到参数 m m m 和 b b b 使得预测值 m x i + b mx_i + b mxi+b 与实际值 y i y_i yi 之间的平方误差和最小。
卡尔曼滤波中的目标函数
卡尔曼滤波的目标是递归地估计状态变量,使得估计值与实际值之间的误差最小化。卡尔曼滤波的更新步骤包含两个主要部分:预测和更新。在更新步骤中,我们更新估计的状态和协方差矩阵。
卡尔曼滤波的更新步骤
- 预测步骤:
- 预测状态: x ^ k ∣ k − 1 = F k x ^ k − 1 ∣ k − 1 + B k u k \hat{x}_{k|k-1} = F_k \hat{x}_{k-1|k-1} + B_k u_k x^k∣k−1=Fkx^k−1∣k−1+Bkuk
- 预测协方差: P k ∣ k − 1 = F k P k − 1 ∣ k − 1 F k T + Q k P_{k|k-1} = F_k P_{k-1|k-1} F_k^T + Q_k Pk∣k−1=FkPk−1∣k−1FkT+Qk
- 更新步骤:
- 卡尔曼增益: K k = P k ∣ k − 1 H k T ( H k P k ∣ k − 1 H k T + R k ) − 1 K_k = P_{k|k-1} H_k^T (H_k P_{k|k-1} H_k^T + R_k)^{-1} Kk=Pk∣k−1HkT(HkPk∣k−1HkT+Rk)−1
- 更新状态: x ^ k ∣ k = x ^ k ∣ k − 1 + K k ( z k − H k x ^ k ∣ k − 1 ) \hat{x}_{k|k} = \hat{x}_{k|k-1} + K_k (z_k - H_k \hat{x}_{k|k-1}) x^k∣k=x^k∣k−1+Kk(zk−Hkx^k∣k−1)
- 更新协方差: P k ∣ k = ( I − K k H k ) P k ∣ k − 1 P_{k|k} = (I - K_k H_k) P_{k|k-1} Pk∣k=(I−KkHk)Pk∣k−1
残差平方和与卡尔曼滤波的关系
在最小二乘法中,我们最小化的是残差平方和(SSE),即 ∑ ( y i − y ^ i ) 2 \sum (y_i - \hat{y}_i)^2 ∑(yi−y^i)2。在卡尔曼滤波中,我们最小化的是估计误差协方差矩阵 P P P,这也是一种残差的度量方式。
最小化目标函数的矩阵形式
最小二乘法的目标函数可以用矩阵形式表示。假设 X X X 是设计矩阵,包含所有输入变量(特征), y y y 是目标向量, β \beta β 是参数向量。目标函数的矩阵形式为:
J ( β ) = ( y − X β ) T ( y − X β ) J(\beta) = (y - X\beta)^T (y - X\beta) J(β)=(y−Xβ)T(y−Xβ)
卡尔曼滤波的目标函数的矩阵形式
卡尔曼滤波的更新步骤实际上是通过最小化预测和实际测量之间的加权误差平方和来进行的。这个加权误差平方和的目标函数是:
J ( x ^ ) = ( z k − H k x ^ ) T R k − 1 ( z k − H k x ^ ) + ( x ^ − x ^ k ∣ k − 1 ) T P k ∣ k − 1 − 1 ( x ^ − x ^ k ∣ k − 1 ) J(\hat{x}) = (z_k - H_k \hat{x})^T R_k^{-1} (z_k - H_k \hat{x}) + (\hat{x} - \hat{x}_{k|k-1})^T P_{k|k-1}^{-1} (\hat{x} - \hat{x}_{k|k-1}) J(x^)=(zk−Hkx^)TRk−1(zk−Hkx^)+(x^−x^k∣k−1)TPk∣k−1−1(x^−x^k∣k−1)
这里,
- z k z_k zk 是测量值,
- H k H_k Hk 是测量矩阵,
- R k R_k Rk 是测量噪声协方差,
- x ^ k ∣ k − 1 \hat{x}_{k|k-1} x^k∣k−1 是预测的状态,
- P k ∣ k − 1 P_{k|k-1} Pk∣k−1 是预测的协方差矩阵。
这个目标函数考虑了测量误差和状态预测误差的加权和。
目标函数与状态更新公式
在卡尔曼滤波中,状态更新的步骤实际上是最小化当前状态估计和新观测值之间的加权平方误差。这个过程可以看作是一个递归的最小二乘估计。具体来看,更新步骤中的公式和目标函数如下:
更新步骤中的公式:
x ^ k ∣ k = x ^ k ∣ k − 1 + K k ( y k − H x ^ k ∣ k − 1 ) \hat{\mathbf{x}}_{k|k} = \hat{\mathbf{x}}_{k|k-1} + \mathbf{K}_k(\mathbf{y}_k - \mathbf{H}\hat{\mathbf{x}}_{k|k-1}) x^k∣k=x^k∣k−1+Kk(yk−Hx^k∣k−1)
最小化的目标函数:
min x ^ k ∣ k ∥ y k − H x ^ k ∣ k ∥ 2 \min_{\hat{\mathbf{x}}_{k|k}} \| \mathbf{y}_k - \mathbf{H} \hat{\mathbf{x}}_{k|k} \|^2 minx^k∣k∥yk−Hx^k∣k∥2
各个符号的含义
更新步骤中的公式
- x ^ k ∣ k \hat{\mathbf{x}}_{k|k} x^k∣k:
- 当前时刻 k k k 的状态估计(后验估计)。这是我们希望找到的最优估计值。
- x ^ k ∣ k − 1 \hat{\mathbf{x}}_{k|k-1} x^k∣k−1:
- 当前时刻 k k k 的状态预测(先验估计)。这是根据之前时刻的状态和系统模型预测出来的。
- K k \mathbf{K}_k Kk:
- 卡尔曼增益。它决定了在预测和观测之间的加权比例,使得估计更准确。
- y k \mathbf{y}_k yk:
- 当前时刻 k k k 的观测值。它是通过测量得到的。
- H \mathbf{H} H:
- 观测矩阵。它描述了状态向量如何映射到观测空间。
- y k − H x ^ k ∣ k − 1 \mathbf{y}_k - \mathbf{H}\hat{\mathbf{x}}_{k|k-1} yk−Hx^k∣k−1:
- 观测残差或创新。它表示观测值和预测值之间的差异。
目标函数
min x ^ k ∣ k ∥ y k − H x ^ k ∣ k ∥ 2 \min_{\hat{\mathbf{x}}_{k|k}} \| \mathbf{y}_k - \mathbf{H} \hat{\mathbf{x}}_{k|k} \|^2 minx^k∣k∥yk−Hx^k∣k∥2
该目标函数中的每个符号与更新步骤中的符号意义相同,解释如下:
- y k \mathbf{y}_k yk:
- 当前时刻 k k k 的观测值。
- H x ^ k ∣ k \mathbf{H} \hat{\mathbf{x}}_{k|k} Hx^k∣k:
- 当前时刻 k k k 的状态估计在观测空间的映射。
- ∥ y k − H x ^ k ∣ k ∥ 2 \| \mathbf{y}_k - \mathbf{H} \hat{\mathbf{x}}_{k|k} \|^2 ∥yk−Hx^k∣k∥2:
- 观测残差的平方和。它表示观测值和状态估计在观测空间中的差异。
思路说明
- 预测阶段:
- 我们使用系统模型来预测当前时刻的状态( x ^ k ∣ k − 1 \hat{\mathbf{x}}_{k|k-1} x^k∣k−1)和误差协方差( P k ∣ k − 1 P_{k|k-1} Pk∣k−1)。
- 更新阶段:
- 计算卡尔曼增益( K k \mathbf{K}_k Kk),它平衡了预测和观测的不确定性。
- 更新状态估计( x ^ k ∣ k \hat{\mathbf{x}}_{k|k} x^k∣k),使其尽可能地靠近实际观测值。
- 更新误差协方差( P k ∣ k P_{k|k} Pk∣k),使其反映出新的不确定性。
关系
- 残差平方和:在最小二乘法中,我们最小化的是预测值与实际值之间的平方误差和。
- 最小化的目标函数:在卡尔曼滤波中,我们最小化的是测量误差和状态预测误差的加权和,通过更新步骤调整估计的状态和协方差矩阵。
核心思想都是通过最小化误差(或残差)来优化模型参数,从而得到更好的预测结果。
这篇关于从最小二乘法的角度来理解卡尔曼滤波(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!