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 的联合概率。
- 第一次抽到红球 P ( A ) P(A) P(A):
P ( A ) = 5 8 P(A) = \frac{5}{8} P(A)=85 - 在第一次已经抽到红球的情况下,第二次再抽到红球的条件概率 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
具体计算
- 计算组合数:
( 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 - 似然函数:
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,我们需要最大化似然函数。我们可以通过求导数并找到极值点来实现这一目标。
- 似然函数的对数形式(对数似然)更方便处理:
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) - 对对数似然函数求导并求解使导数为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)
先验估计是预测阶段的估计,而后验估计是更新阶段的估计。
- 先验估计(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 是控制输入。
- 后验估计(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。
通俗理解
假设你每天早晨都要预测一天的天气情况,你可以这样做:
- 先验估计(Prior Estimate):
- 你看了昨晚的天气预报,预报说今天会晴天。于是,你一早起床就预测今天会是晴天。这就是你的先验估计,即基于已有的信息(昨天的预报)对今天天气的预测。
- 后验估计(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 都被假设为高斯分布。我们通过这个假设来简化贝叶斯定理的应用。
符号解释
- 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)来更新当前状态的估计。
- 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,通常由观测模型来描述。
- 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 的先验概率分布。这个是通过状态转移模型从上一个时刻的后验概率分布预测得到的。
- 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 代码示例:
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 ) 确定了先验估计和观测数据的加权比例,后验状态估计和协方差更新则通过结合先验和观测数据,反映了状态估计的不确定性减少。