DeepSORT(目标跟踪算法)卡尔曼滤波中的贝叶斯定理

DeepSORT(目标跟踪算法)卡尔曼滤波中的贝叶斯定理

flyfish

从例子中介绍名词

假设我们有一个袋子,里面有5个红球和3个蓝球。我们从袋子里随机抽取一个球。

概率 (Probability)

我们想计算从袋子里抽到红球的概率 P ( R ) P(R) P(R)。

红球的数量是5,球的总数量是8,所以抽到红球的概率是:
P ( R ) = 5 8 P(R) = \frac{5}{8} P(R)=85

条件概率 (Conditional Probability)

条件概率是指在已知某事件 B B B 发生的情况下,另一个事件 A A A 发生的概率。用符号 P ( A ∣ B ) P(A \mid B) P(A∣B) 表示。

公式

条件概率的公式为:
P ( A ∣ B ) = P ( A ∩ B ) P ( B ) P(A \mid B) = \frac{P(A \cap B)}{P(B)} P(A∣B)=P(B)P(A∩B)

前提是 P ( B ) > 0 P(B)> 0 P(B)>0。

这里:

  • P ( A ∣ B ) P(A \mid B) P(A∣B) 是在 B B B 发生的情况下 A A A 发生的概率。
  • P ( A ∩ B ) P(A \cap B) P(A∩B) 是事件 A A A 和 B B B 同时发生的概率。
  • P ( B ) P(B) P(B) 是事件 B B B 发生的概率。

联合概率 (Joint Probability)

联合概率是指两个或多个事件同时发生的概率。用符号 P ( A ∩ B ) P(A \cap B) P(A∩B) 或 P ( A , B ) P(A, B) P(A,B) 表示。

公式

联合概率可以用条件概率和边缘概率的乘积表示:
P ( A ∩ B ) = P ( A ∣ B ) ⋅ P ( B ) P(A \cap B) = P(A \mid B) \cdot P(B) P(A∩B)=P(A∣B)⋅P(B)


P ( A ∩ B ) = P ( B ∣ A ) ⋅ P ( A ) P(A \cap B) = P(B \mid A) \cdot P(A) P(A∩B)=P(B∣A)⋅P(A)

示例

假设我们有一个包含红球和蓝球的袋子。已知袋子中有5个红球和3个蓝球。我们从袋子里随机抽取两个球,并且不放回。

联合概率

我们要计算第一次抽到红球 A A A 和第二次也抽到红球 B B B 的联合概率。

  1. 第一次抽到红球 P ( A ) P(A) P(A):
    P ( A ) = 5 8 P(A) = \frac{5}{8} P(A)=85
  2. 在第一次已经抽到红球的情况下,第二次再抽到红球的条件概率 P ( B ∣ A ) P(B \mid A) P(B∣A):
    P ( B ∣ A ) = 4 7 P(B \mid A) = \frac{4}{7} P(B∣A)=74
    因此,联合概率 P ( A ∩ B ) P(A \cap B) P(A∩B) 为:
    P ( A ∩ B ) = P ( A ) ⋅ P ( B ∣ A ) = 5 8 ⋅ 4 7 = 20 56 = 5 14 P(A \cap B) = P(A) \cdot P(B \mid A) = \frac{5}{8} \cdot \frac{4}{7} = \frac{20}{56} = \frac{5}{14} P(A∩B)=P(A)⋅P(B∣A)=85⋅74=5620=145
条件概率

假设我们知道第一次抽到了红球 A A A,我们想知道在这种情况下第二次也抽到红球 B B B 的概率:
P ( B ∣ A ) = P ( A ∩ B ) P ( A ) = 5 14 5 8 = 4 7 P(B \mid A) = \frac{P(A \cap B)}{P(A)} = \frac{\frac{5}{14}}{\frac{5}{8}} = \frac{4}{7} P(B∣A)=P(A)P(A∩B)=85145=74

似然 (Likelihood)

假设我们做了一次试验,从袋子里抽到了一个红球。我们想知道这个观察结果在给定红球数量为5、蓝球数量为3的情况下的似然。

在这个简单例子中,似然实际上就是红球的概率,即:
L ( θ ∣ Red observed ) = P ( Red observed ∣ θ ) = P ( R ) = 5 8 L(\theta \mid \text{Red observed}) = P(\text{Red observed} \mid \theta) = P(R) = \frac{5}{8} L(θ∣Red observed)=P(Red observed∣θ)=P(R)=85

在这个例子中,观测数据是 "抽到红球",模型参数是 θ = { 5 个红球 , 3 个蓝球 } \theta = \{5 \text{个红球}, 3 \text{个蓝球}\} θ={5个红球,3个蓝球}。因此:
L ( θ ∣ Red observed ) = P ( Red ∣ θ ) = 5 8 L(\theta \mid \text{Red observed}) = P(\text{Red} \mid \theta) = \frac{5}{8} L(θ∣Red observed)=P(Red∣θ)=85

所以,似然函数的值在这个具体例子中等于抽到红球的概率。直观地讲,我们在已知袋子里球的分布情况下,观测到红球的可能性就是从袋子里抽到红球的概率。这个例子中的似然实际上就是红球的概率,因为我们已经知道袋子里球的数量和类型。

更复杂的情况

在更复杂的情况下,似然函数用于评估不同模型参数的好坏。例如,如果我们不知道袋子里红球和蓝球的数量,通过多次抽取球的结果(观测数据),我们可以估计袋子里红球和蓝球的比例。在这种情况下,似然函数帮助我们找到最适合观测数据的模型参数。

通过一个具体的例子来演示如何使用似然函数来估计模型参数。

示例场景

假设我们有一个袋子,但不知道里面红球和蓝球的具体数量。我们随机从袋子里抽取了10次球,并记录了结果。假设我们观察到以下数据:

  • 红球:7次
  • 蓝球:3次
    我们的目标是估计袋子里红球的比例 p p p(红球占总球数的比例)。

似然函数

设袋子中红球的比例为 p p p,蓝球的比例为 1 − p 1 - p 1−p。根据二项分布,抽到 k k k 次红球的概率为:
P ( Red = k ∣ p ) = ( n k ) p k ( 1 − p ) n − k P(\text{Red}=k \mid p) = \binom{n}{k} p^k (1-p)^{n-k} P(Red=k∣p)=(kn)pk(1−p)n−k

其中:

  • n n n 是抽取的总次数(这里 n = 10 n = 10 n=10)
  • k k k 是红球的次数(这里 k = 7 k = 7 k=7)

计算似然

我们要计算在不同 p p p 值下观测到7次红球的似然。

似然函数 L ( p ∣ data ) L(p \mid \text{data}) L(p∣data) 定义为:
L ( p ∣ data ) = P ( data ∣ p ) = ( 10 7 ) p 7 ( 1 − p ) 3 L(p \mid \text{data}) = P(\text{data} \mid p) = \binom{10}{7} p^7 (1-p)^3 L(p∣data)=P(data∣p)=(710)p7(1−p)3

具体计算

  1. 计算组合数:
    ( 10 7 ) = 10 ! 7 ! ( 10 − 7 ) ! = 10 × 9 × 8 3 × 2 × 1 = 120 \binom{10}{7} = \frac{10!}{7!(10-7)!} = \frac{10 \times 9 \times 8}{3 \times 2 \times 1} = 120 (710)=7!(10−7)!10!=3×2×110×9×8=120
  2. 似然函数:
    L ( p ∣ data ) = 120 ⋅ p 7 ⋅ ( 1 − p ) 3 L(p \mid \text{data}) = 120 \cdot p^7 \cdot (1-p)^3 L(p∣data)=120⋅p7⋅(1−p)3

找到最大似然估计 (Maximum Likelihood Estimation, MLE)

为了找到最适合观测数据的 p p p,我们需要最大化似然函数。我们可以通过求导数并找到极值点来实现这一目标。

  1. 似然函数的对数形式(对数似然)更方便处理:
    log ⁡ L ( p ∣ data ) = log ⁡ ( 120 ) + 7 log ⁡ ( p ) + 3 log ⁡ ( 1 − p ) \log L(p \mid \text{data}) = \log(120) + 7 \log(p) + 3 \log(1-p) logL(p∣data)=log(120)+7log(p)+3log(1−p)
  2. 对对数似然函数求导并求解使导数为0的 p p p 值:
    d d p log ⁡ L ( p ∣ data ) = 7 p − 3 1 − p \frac{d}{dp} \log L(p \mid \text{data}) = \frac{7}{p} - \frac{3}{1-p} dpdlogL(p∣data)=p7−1−p3
    设置导数为0并求解:
    7 p = 3 1 − p \frac{7}{p} = \frac{3}{1-p} p7=1−p3
    7 ( 1 − p ) = 3 p 7(1-p) = 3p 7(1−p)=3p
    7 − 7 p = 3 p 7 - 7p = 3p 7−7p=3p
    7 = 10 p 7 = 10p 7=10p
    p = 7 10 = 0.7 p = \frac{7}{10} = 0.7 p=107=0.7

因此,观测到7次红球和3次蓝球的数据下,红球比例 p p p 的最大似然估计为0.7。

不发生的概率

符号 ¬ \neg ¬ 表示逻辑上的"非"或"否定",即取反的意思。
P ( ¬ A ) P(\neg A) P(¬A) 表示事件 A A A 不发生的概率。如果 A A A 是某个事件,那么 ¬ A \neg A ¬A 就是 A A A 的补事件,或者说 A A A 不发生的事件。

具体解释

  • P ( A ) P(A) P(A):事件 A A A 发生的概率。
  • P ( ¬ A ) P(\neg A) P(¬A):事件 A A A 不发生的概率。
    在概率论中,如果事件 A A A 和事件 ¬ A \neg A ¬A 是互斥且穷尽的(即两者覆盖了所有可能性),则它们的概率和为 1:

P ( A ) + P ( ¬ A ) = 1 P(A) + P(\neg A) = 1 P(A)+P(¬A)=1

因此,如果你知道事件 A A A 发生的概率 P ( A ) P(A) P(A),你可以很容易地计算出事件 A A A 不发生的概率 P ( ¬ A ) P(\neg A) P(¬A):

P ( ¬ A ) = 1 − P ( A ) P(\neg A) = 1 - P(A) P(¬A)=1−P(A)

先验估计是预测阶段的估计,而后验估计是更新阶段的估计。

  1. 先验估计(Prior Estimate)
  • 定义:先验估计是指在当前时刻没有结合最新观测数据前的系统状态估计。它是基于上一时刻的后验估计和系统的状态转移模型得到的。
  • 符号 :通常用 x ^ k ∣ k − 1 \hat{x}_{k|k-1} x^k∣k−1 表示,其中 k k k 表示当前时刻, k − 1 k-1 k−1 表示上一时刻。
  • 计算 :根据系统的状态转移方程进行预测,即:
    x ^ k ∣ k − 1 = A k − 1 x ^ k − 1 ∣ k − 1 + B k − 1 u k − 1 \hat{x}{k|k-1} = A{k-1} \hat{x}{k-1|k-1} + B{k-1} u_{k-1} x^k∣k−1=Ak−1x^k−1∣k−1+Bk−1uk−1
    其中, x ^ k − 1 ∣ k − 1 \hat{x}{k-1|k-1} x^k−1∣k−1 是上一时刻的后验估计, A k − 1 A{k-1} Ak−1 是状态转移矩阵, B k − 1 B_{k-1} Bk−1 是控制输入矩阵, u k − 1 u_{k-1} uk−1 是控制输入。
  1. 后验估计(Posterior Estimate)
  • 定义:后验估计是指在结合当前时刻的观测数据后,对系统状态的更新估计。它是对先验估计进行修正得到的。
  • 符号 :通常用 x ^ k ∣ k \hat{x}_{k|k} x^k∣k 表示,表示结合了第 k k k 时刻的观测数据后的状态估计。
  • 计算 :根据卡尔曼增益(Kalman Gain)和观测更新方程进行修正,即:
    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)
    其中, K k K_k Kk 是卡尔曼增益, z k z_k zk 是当前时刻的观测数据, H k H_k Hk 是观测矩阵。
    通过上述过程,卡尔曼滤波器能够不断地利用新观测数据修正系统状态估计,从而提供一个更加准确的状态估计。

贝叶斯定理是概率论中的一个基本定理,用于描述在给定某些条件(证据)的情况下,如何更新对事件的概率估计。它的基本形式是:

P ( A ∣ B ) = P ( B ∣ A ) ⋅ P ( A ) P ( B ) P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)⋅P(A)

在这个公式中,每个符号都有特定的含义:

  • P ( A ∣ B ) P(A|B) P(A∣B):在条件 B B B 发生的情况下,事件 A A A 发生的概率。这被称为 后验概率(Posterior Probability)。
  • P ( B ∣ A ) P(B|A) P(B∣A):在条件 A A A 发生的情况下,事件 B B B 发生的概率。这被称为 似然(Likelihood)。
  • P ( A ) P(A) P(A):事件 A A A 发生的概率,不考虑任何条件。这被称为 先验概率(Prior Probability)。
  • P ( B ) P(B) P(B):事件 B B B 发生的概率,不考虑条件 A A A 是否发生。这被称为 边际概率(Marginal Probability),也可以看作是一个归一化常数,确保概率总和为 1。

通俗理解

假设你每天早晨都要预测一天的天气情况,你可以这样做:

  1. 先验估计(Prior Estimate)
  • 你看了昨晚的天气预报,预报说今天会晴天。于是,你一早起床就预测今天会是晴天。这就是你的先验估计,即基于已有的信息(昨天的预报)对今天天气的预测。
  1. 后验估计(Posterior Estimate)
  • 你打开窗户,看到了外面的实际天气。假如你看到天空阴云密布,显然今天的天气和昨晚的预报有差异。于是,你修正了你的天气预测,认为今天可能会下雨。这时,你结合了新的观测数据(看到的阴天)来更新你的预测。这就是你的后验估计,即结合新信息(实际观察)后对天气的更新预测。

贝叶斯定理的直观理解

贝叶斯定理可以帮助我们在得到新信息(证据)后,更新对某个事件发生概率的估计。简单来说,贝叶斯定理是如何利用现有的知识(先验概率)和新得到的信息(似然)来更新我们的认知(后验概率)。

贝叶斯定理的应用

贝叶斯定理的形式是:

P ( x k ∣ z 1 : k ) = P ( z k ∣ x k ) P ( x k ∣ z 1 : k − 1 ) P ( z k ∣ z 1 : k − 1 ) P(x_k | z_{1:k}) = \frac{P(z_k | x_k) P(x_k | z_{1:k-1})}{P(z_k | z_{1:k-1})} P(xk∣z1:k)=P(zk∣z1:k−1)P(zk∣xk)P(xk∣z1:k−1)

在卡尔曼滤波中,状态 x k x_k xk 和观测 z k z_k zk 都被假设为高斯分布。我们通过这个假设来简化贝叶斯定理的应用。

符号解释

  1. P ( x k ∣ z 1 : k ) P(x_k | z_{1:k}) P(xk∣z1:k)
  • 表示在时刻 k k k 观测到 z 1 : k z_{1:k} z1:k 后,状态 x k x_k xk 的后验概率分布。这个是我们希望计算和更新的目标,即根据所有观测数据(从时刻 1 到时刻 k k k)来更新当前状态的估计。
  1. P ( z k ∣ x k ) P(z_k | x_k) P(zk∣xk)
  • 表示在给定当前状态 x k x_k xk 的条件下,观测到 z k z_k zk 的概率(似然)。这反映了当前状态 x k x_k xk 如何生成观测值 z k z_k zk,通常由观测模型来描述。
  1. P ( x k ∣ z 1 : k − 1 ) P(x_k | z_{1:k-1}) P(xk∣z1:k−1)
  • 表示在给定之前所有观测数据 z 1 : k − 1 z_{1:k-1} z1:k−1 的条件下,当前状态 x k x_k xk 的先验概率分布。这个是通过状态转移模型从上一个时刻的后验概率分布预测得到的。
  1. P ( z k ∣ z 1 : k − 1 ) P(z_k | z_{1:k-1}) P(zk∣z1:k−1)
  • 表示在给定之前所有观测数据 z 1 : k − 1 z_{1:k-1} z1:k−1 的条件下,观测到 z k z_k zk 的概率(边际概率)。这个值用来归一化分子部分,使得后验概率分布的总概率为 1。

具体说明

先验概率 P ( x k ∣ z 1 : k − 1 ) P(x_k | z_{1:k-1}) P(xk∣z1:k−1)
  • 解释 :在时刻 k k k 之前的所有观测数据 z 1 : k − 1 z_{1:k-1} z1:k−1 已知的情况下,对时刻 k k k 的状态 x k x_k xk 进行预测。
  • 来源 :通常通过状态转移模型 f f f 预测得到:
    P ( x k ∣ z 1 : k − 1 ) ∼ N ( x ^ k ∣ k − 1 , P k ∣ k − 1 ) P(x_k | z_{1:k-1}) \sim \mathcal{N}(\hat{x}{k|k-1}, P{k|k-1}) P(xk∣z1:k−1)∼N(x^k∣k−1,Pk∣k−1)
    其中 x ^ k ∣ k − 1 \hat{x}{k|k-1} x^k∣k−1 和 P k ∣ k − 1 P{k|k-1} Pk∣k−1 是先验均值和协方差矩阵。
似然 P ( z k ∣ x k ) P(z_k | x_k) P(zk∣xk)
  • 解释 :在给定当前状态 x k x_k xk 的条件下,观测到 z k z_k zk 的概率。
  • 来源 :通常通过观测模型 h h h 得到:
    P ( z k ∣ x k ) ∼ N ( H x ^ k , R ) P(z_k | x_k) \sim \mathcal{N}(H \hat{x}_k, R) P(zk∣xk)∼N(Hx^k,R)
    其中 H H H 是观测矩阵, R R R 是观测噪声协方差矩阵。
边际概率 P ( z k ∣ z 1 : k − 1 ) P(z_k | z_{1:k-1}) P(zk∣z1:k−1)
  • 解释 :在给定之前所有观测数据 z 1 : k − 1 z_{1:k-1} z1:k−1 的情况下,观测到 z k z_k zk 的概率。这个概率确保分母是一个归一化常数,使得后验概率分布的总和为 1。
  • 来源 :通过积分计算得到:
    P ( z k ∣ z 1 : k − 1 ) = ∫ P ( z k ∣ x k ) P ( x k ∣ z 1 : k − 1 ) d x k P(z_k | z_{1:k-1}) = \int P(z_k | x_k) P(x_k | z_{1:k-1}) dx_k P(zk∣z1:k−1)=∫P(zk∣xk)P(xk∣z1:k−1)dxk
后验概率 P ( x k ∣ z 1 : k ) P(x_k | z_{1:k}) P(xk∣z1:k)
  • 解释 :在给定所有观测数据 z 1 : k z_{1:k} z1:k 的情况下,当前状态 x k x_k xk 的概率分布。
  • 来源 :利用贝叶斯定理,将先验概率和似然结合,并归一化:
    P ( x k ∣ z 1 : k ) ∼ N ( x ^ k ∣ k , P k ∣ k ) P(x_k | z_{1:k}) \sim \mathcal{N}(\hat{x}{k|k}, P{k|k}) P(xk∣z1:k)∼N(x^k∣k,Pk∣k)
    其中 x ^ k ∣ k \hat{x}{k|k} x^k∣k 和 P k ∣ k P{k|k} Pk∣k 是更新后的后验均值和协方差矩阵。

使用 Python 绘制贝叶斯更新过程

我们可以使用 Python 来模拟贝叶斯更新过程,并可视化后验分布的变化。以下是一个简单的 Python 代码示例:

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# 定义先验
mu_prior = 0
sigma_prior = 1
x = np.linspace(-5, 5, 1000)
prior = norm.pdf(x, mu_prior, sigma_prior)

# 定义观测模型(似然)
mu_likelihood = 1
sigma_likelihood = 0.5
likelihood = norm.pdf(x, mu_likelihood, sigma_likelihood)

# 计算后验(使用贝叶斯定理)
posterior = likelihood * prior
posterior /= np.trapz(posterior, x)  # 归一化

# 绘制结果
plt.figure(figsize=(10, 6))
plt.plot(x, prior, label='Prior')
plt.plot(x, likelihood, label='Likelihood')
plt.plot(x, posterior, label='Posterior')
plt.xlabel('State')
plt.ylabel('Probability Density')
plt.title('Bayesian Update of Probability Distribution')
plt.legend()
plt.grid(True)
plt.show()

解释

  • 先验分布(Prior):假设先验均值为 0,标准差为 1 的高斯分布。
  • 似然分布(Likelihood):假设似然均值为 1,标准差为 0.5 的高斯分布。
  • 后验分布(Posterior):通过贝叶斯定理将先验和似然结合,并归一化得到后验分布。

贝叶斯定理在卡尔曼滤波中的应用,通过高斯分布假设,先验和似然分布的联合分布也是高斯分布。后验分布的均值和协方差可以通过条件高斯分布的性质得到,最终简化为卡尔曼滤波的更新公式。卡尔曼增益 ( K_k ) 确定了先验估计和观测数据的加权比例,后验状态估计和协方差更新则通过结合先验和观测数据,反映了状态估计的不确定性减少。

相关推荐
无限进步_13 小时前
C语言单向链表实现详解:从基础操作到完整测试
c语言·开发语言·数据结构·c++·算法·链表·visual studio
初夏睡觉13 小时前
循环比赛日程表 题解
数据结构·c++·算法
袁庭新13 小时前
人人都能学AI,人人都要学AI
人工智能·aigc
Tzarevich13 小时前
前端调用大语言模型:基于 Vite 的工程化实践与 HTTP 请求详解
人工智能
Soonyang Zhang13 小时前
MoeDistributeDispatch算子代码阅读
人工智能·算子·ascendc
sanggou14 小时前
Windsurf AI IDE 完全使用指南
ide·人工智能
派大星爱吃鱼14 小时前
素数检验方法
算法
Greedy Alg14 小时前
LeetCode 72. 编辑距离(中等)
算法
xinxingrs14 小时前
贪心算法、动态规划以及相关应用(python)
笔记·python·学习·算法·贪心算法·动态规划