从最小二乘法的角度来理解卡尔曼滤波(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=1n(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_mean

    return m, b

m, 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=1n(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 bSSE=2i=1n(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 mSSE=2i=1nxi(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=mi=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=mi=1nxi2+bi=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=ni=1nyimi=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=ni=1nxi2(i=1nxi)2ni=1nxiyii=1nxii=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=1n(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 bSSE=bi=1n(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 bSSE=i=1nb(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)) bSSE=i=1n2(yi(mxi+b))(1)=2i=1n(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=1n(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=1n(yimxib)=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 mSSE=mi=1n(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 mSSE=i=1nm(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)) mSSE=i=1n2(yi(mxi+b))(xi)=2i=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=1nxi(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=1nxi(yimxib)=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=1n(yimxib)=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=1nyimi=1nxinb=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=1nyi=mi=1nxi+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=1nxi(yimxib)=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=1nxiyimi=1nxi2bi=1nxi=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=1nxiyi=mi=1nxi2+bi=1nxi(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=ni=1nyimi=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=1nxiyi=mi=1nxi2+(ni=1nyimi=1nxi)i=1nxi

简化:

∑ 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=1nxiyi=mi=1nxi2+ni=1nyii=1nxim(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=1nxiyi=mni=1nxi2+i=1nyii=1nxim(i=1nxi)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=1nxiyii=1nyii=1nxi=m(ni=1nxi2(i=1nxi)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=ni=1nxi2(i=1nxi)2ni=1nxiyii=1nxii=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=ni=1nyimi=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=dydzdxdy

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))

对复合函数的导数求解上具体来说:

  1. 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
  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 之间的平方误差和最小。

卡尔曼滤波中的目标函数

卡尔曼滤波的目标是递归地估计状态变量,使得估计值与实际值之间的误差最小化。卡尔曼滤波的更新步骤包含两个主要部分:预测和更新。在更新步骤中,我们更新估计的状态和协方差矩阵。

卡尔曼滤波的更新步骤
  1. 预测步骤:
  • 预测状态: 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^kk1=Fkx^k1∣k1+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 Pkk1=FkPk1∣k1FkT+Qk
  1. 更新步骤:
  • 卡尔曼增益: 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=Pkk1HkT(HkPkk1HkT+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^kk=x^kk1+Kk(zkHkx^kk1)
  • 更新协方差: P k ∣ k = ( I − K k H k ) P k ∣ k − 1 P_{k|k} = (I - K_k H_k) P_{k|k-1} Pkk=(IKkHk)Pkk1

残差平方和与卡尔曼滤波的关系

在最小二乘法中,我们最小化的是残差平方和(SSE),即 ∑ ( y i − y ^ i ) 2 \sum (y_i - \hat{y}_i)^2 (yiy^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)T(y)

卡尔曼滤波的目标函数的矩阵形式

卡尔曼滤波的更新步骤实际上是通过最小化预测和实际测量之间的加权误差平方和来进行的。这个加权误差平方和的目标函数是:

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^)=(zkHkx^)TRk1(zkHkx^)+(x^x^kk1)TPkk11(x^x^kk1)

这里,

  • 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^kk1 是预测的状态,
  • P k ∣ k − 1 P_{k|k-1} Pkk1 是预测的协方差矩阵。
    这个目标函数考虑了测量误差和状态预测误差的加权和。

目标函数与状态更新公式

在卡尔曼滤波中,状态更新的步骤实际上是最小化当前状态估计和新观测值之间的加权平方误差。这个过程可以看作是一个递归的最小二乘估计。具体来看,更新步骤中的公式和目标函数如下:

更新步骤中的公式
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^kk=x^kk1+Kk(ykHx^kk1)
最小化的目标函数
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^kkykHx^kk2

各个符号的含义

更新步骤中的公式
  1. x ^ k ∣ k \hat{\mathbf{x}}_{k|k} x^kk
  • 当前时刻 k k k 的状态估计(后验估计)。这是我们希望找到的最优估计值。
  1. x ^ k ∣ k − 1 \hat{\mathbf{x}}_{k|k-1} x^kk1
  • 当前时刻 k k k 的状态预测(先验估计)。这是根据之前时刻的状态和系统模型预测出来的。
  1. K k \mathbf{K}_k Kk
  • 卡尔曼增益。它决定了在预测和观测之间的加权比例,使得估计更准确。
  1. y k \mathbf{y}_k yk
  • 当前时刻 k k k 的观测值。它是通过测量得到的。
  1. H \mathbf{H} H
  • 观测矩阵。它描述了状态向量如何映射到观测空间。
  1. y k − H x ^ k ∣ k − 1 \mathbf{y}_k - \mathbf{H}\hat{\mathbf{x}}_{k|k-1} ykHx^kk1
  • 观测残差或创新。它表示观测值和预测值之间的差异。
目标函数

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^kkykHx^kk2
该目标函数中的每个符号与更新步骤中的符号意义相同,解释如下:

  1. y k \mathbf{y}_k yk
  • 当前时刻 k k k 的观测值。
  1. H x ^ k ∣ k \mathbf{H} \hat{\mathbf{x}}_{k|k} Hx^kk
  • 当前时刻 k k k 的状态估计在观测空间的映射。
  1. ∥ y k − H x ^ k ∣ k ∥ 2 \| \mathbf{y}_k - \mathbf{H} \hat{\mathbf{x}}_{k|k} \|^2 ykHx^kk2
  • 观测残差的平方和。它表示观测值和状态估计在观测空间中的差异。

思路说明

  1. 预测阶段
  • 我们使用系统模型来预测当前时刻的状态( x ^ k ∣ k − 1 \hat{\mathbf{x}}_{k|k-1} x^kk1)和误差协方差( P k ∣ k − 1 P_{k|k-1} Pkk1)。
  1. 更新阶段
  • 计算卡尔曼增益( K k \mathbf{K}_k Kk),它平衡了预测和观测的不确定性。
  • 更新状态估计( x ^ k ∣ k \hat{\mathbf{x}}_{k|k} x^kk),使其尽可能地靠近实际观测值。
  • 更新误差协方差( P k ∣ k P_{k|k} Pkk),使其反映出新的不确定性。

关系

  • 残差平方和:在最小二乘法中,我们最小化的是预测值与实际值之间的平方误差和。
  • 最小化的目标函数:在卡尔曼滤波中,我们最小化的是测量误差和状态预测误差的加权和,通过更新步骤调整估计的状态和协方差矩阵。
    核心思想都是通过最小化误差(或残差)来优化模型参数,从而得到更好的预测结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/713171.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx - 反向代理、负载均衡、动静分离(案例实战分析)

目录 Nginx 开始 概述 安装(非 Docker) 配置环境变量 常用命令 配置文件概述 location 路径匹配方式 配置反向代理 实现效果 准备工作 具体配置 效果演示 配置负载均衡 实现效果 准备工作 具体配置 实现效果 其他负载均衡策略 配置动…

MATLAB直方图中bin中心与bin边界之间的转换

要将 bin 中心转换为 bin 边界,请计算 centers 中各连续值之间的中点。 d diff(centers)/2; edges [centers(1)-d(1), centers(1:end-1)d, centers(end)d(end)];要将 bin 边界转换为bin 中心 bincenters binedges(1:end-1)diff(binedges)/2;

16.大模型分布式训练框架 Microsoft DeepSpeed

微调、预训练显存对比占用 预训练LLaMA2-7B模型需要多少显存? 假设以bf16混合精度预训练 LLaMA2-7B模型,需要近120GB显存。即使A100/H100(80GB)单卡也无法支持。 为何比 QLoRA多了100GB?不妨展开计算下显存占用&…

文章MSM_metagenomics(五):共现分析

欢迎大家关注全网生信学习者系列: WX公zhong号:生信学习者Xiao hong书:生信学习者知hu:生信学习者CDSN:生信学习者2 介绍 本教程是使用一个Python脚本来分析多种微生物(即strains, species, genus等&…

维度建模中的事实表设计原则

维度建模是一种数据仓库设计方法,其核心是围绕业务过程建立事实表和维度表。事实表主要存储与业务过程相关的度量数据,而维度表则描述这些度量数据的属性。 以下是设计事实表时需要遵循的几个重要原则,来源于《维度建模》那本书上&#xff0…

13.docker registry(私有仓库)

docker registry(私有仓库) 1.从公有仓库中下载镜像比较慢 ,比如docker run执行一个命令假设本地不存在的镜像,则会去共有仓库进行下载。 2.如果要是2台机器之间进行拷贝,则拷贝的是完整的镜像更消耗空间。 3.如果1个…

python数据分析-糖尿病数据集数据分析预测

一、研究背景和意义 糖尿病是美国最普遍的慢性病之一,每年影响数百万美国人,并对经济造成重大的经济负担。糖尿病是一种严重的慢性疾病,其中个体失去有效调节血液中葡萄糖水平的能力,并可能导致生活质量和预期寿命下降。。。。 …

docker 简单在线安装教程

1、配置阿里镜像源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 2、指定版本安装docker 本次制定安装 docker 服务版本、客户端版本都为: 19.03.14-3.el7 yum -y install docker-ce-19.03.14-3.e…

【python】tkinter GUI开发: 多行文本Text,单选框Radiobutton,复选框Checkbutton,画布canvas的应用实战详解

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

【Spine学习06】之IK约束绑定,制作人物待机动画,图表贝塞尔曲线优化动作

引入IK约束的概念: 约束目标父级 被约束骨骼子集 这样理解更好,约束目标可以控制被约束的两个骨骼运作 IK约束绑定过程中呢,如果直接绑定最下面的脚掌骨骼会发生偏移,所以在开始处理IK之前,需要先设置一个ROOT结点下的…

采煤vr事故灾害应急模拟救援训练降低生命财产损失

在化工工地,设备繁多、环境复杂,潜藏着众多安全隐患,稍有不慎便可能引发安全事故。为了保障工地的安全,我们急需一套全面、高效的安全管理解决方案。web3d开发公司深圳华锐视点研发的工地安全3D模拟仿真隐患排查系统,正…

hugo-magic主题使用教程(一)

前提条件 以下教程以windows10为例操作终端使用git bash魔法上网的前提下 下载hugo https://github.com/gohugoio/hugo/releases/download/v0.127.0/hugo_extended_0.127.0_windows-amd64.zip解压到任意目录,然后将目录添加到系统环境变量 如图 (windows)打开cmd 输入 hugo …

Superset 二次开发之Git篇 git cherry-pick

Cherry-Pick 命令是 Git 中的一种功能,用于将特定的提交(commit)从一个分支应用到另一个分支。它允许你选择性地应用某些提交,而不是合并整个分支。Cherry-Pick 非常适合在需要将特定更改移植到其他分支时使用,例如从开…

为什么用SDE(随机微分方程)来描述扩散过程【论文精读】

为什么用SDE(随机微分方程)来描述扩散过程【论文精读】 B站视频:为什么用SDE(随机微分方程)来描述扩散过程 论文:Score-Based Generative Modeling through Stochastic Differential Equations 地址:https://doi.org/10.48550/arXiv.2011.13…

单调栈(续)、由斐波那契数列讲述矩阵快速降幂技巧

在这里先接上一篇文章单调栈,这里还有单调栈的一道题 题目一(单调栈续) 给定一个数组arr, 返回所有子数组最小值的累加和 就是一个数组,有很多的子数组,每个数组肯定有一个最小值,要把所有子…

享元和代理模式

文章目录 享元模式1.引出享元模式1.展示网站项目需求2.传统方案解决3.问题分析 2.享元模式1.基本介绍2.原理类图3.外部状态和内部状态4.类图5.代码实现1.AbsWebSite.java 抽象的网站2.ConcreteWebSite.java 具体的网站,type属性是内部状态3.WebSiteFactory.java 网站…

《C语言》动态内存管理

文章目录 一、动态内存分配二、关于动态内存开辟的函数1、malloc2、free3、calloc4、realloc 三、常见的动态内存的错误1、对NULL指针的解引用操作2、对动态开辟空间的越界访问3、对非动态开辟内存使用free释放4、释放free释放一块动态开辟的内存的一部分5、对同一块动态内存多…

Ubuntu基础-VirtualBox安装增强功能

目录 零. 前言 一. 安装 1.点击安装增强功能 2.点击光盘图标 3.复制到新文件夹 4.运行命令 5.重启系统 6.成果展示 二. 打开共享 1.共享粘贴 ​编辑2.共享文件夹 三.总结 安装步骤 打开共享粘贴功能: 打开共享文件夹功能: 零. 前言 在使用…

设计模式-代理模式Proxy(结构型)

代理模式(Proxy) 代理模式是一种结构型模式,它可以通过一个类代理另一个类的功能。代理类持有被代理类的引用地址,负责将请求转发给代理类,并且可以在转发前后做一些处理 图解 角色 抽象主题(Subject&…

upload-labs第九关教程

upload-labs第九关教程 一、源代码分析代码审计::$DATA介绍 二、绕过分析特殊字符::$data绕过上传eval.php使用burpsuite抓包进行修改放包,查看是否上传成功使用中国蚁剑进行连接 一、源代码分析 代码审计 $is_upload false; $msg null; if (isset($_POST[submi…