【机器学习】粒子滤波原理推导(二)

前言

上一篇【机器学习】粒子滤波原理推导(一),我们就如何去求解粒子滤波Filter问题的期望,得到了各种递推式。但是会产生权值退化的问题。这篇文章就解释一下什么是权值退化,又该如何去解决
数学基础:【概率论与数理统计知识复习-哔哩哔哩】

权值退化

我们知道,对于每个时刻,我们采样n个样本,那么就会的到n个样本值和对应的权重值。那么对于所有的时刻,就会有
t = 1 : w 1 1 , w 1 2 , w 1 3 , ⋯   , w 1 n t = 2 : w 2 1 , w 2 2 , w 2 3 , ⋯   , w 2 n t = 3 : w 3 1 , w 3 2 , w 3 3 , ⋯   , w 3 n ⋮ t = T : w T 1 , w T 2 , w T 3 , ⋯   , w T n \begin{equation}\begin{aligned} &t=1: \\&&w_1^1,w_1^2,w_1^3,\cdots,w_1^n \\&t=2: \\&&w_2^1,w_2^2,w_2^3,\cdots,w_2^n \\&t=3: \\&&w_3^1,w_3^2,w_3^3,\cdots,w_3^n \\&\vdots \\&t=T: \\&&w_T^1,w_T^2,w_T^3,\cdots,w_T^n \nonumber \end{aligned}\end{equation} t=1:t=2:t=3:t=T:w11,w12,w13,,w1nw21,w22,w23,,w2nw31,w32,w33,,w3nwT1,wT2,wT3,,wTn
我们前面计算得到过权重的递推式
w t ∝ P ( x t ∣ z t ) w t − 1 w_t\propto P(x_t|z_t)w_{t-1} wtP(xtzt)wt1
我们在应用的过程中,会产生权值退化的问题,什么意思呢?假如一开始,我们的权重初始全都是 1 n \frac{1}{n} n1,即对于时刻1,假设我们抽样得到0~9数值,得到权值都为0.1

在这里插入图片描述

也许在时刻i的时候,就会得到

在这里插入图片描述

就是会出现一家独大的情况。这是我们不想看到的,那么,怎么样才可以解决这个问题呢?

重采样

一般情况下,我们就是利用重采样技巧。

所谓重采样,就是根据采样出来的样本和权重值,在这个基础上,重新采样。

简单起见,假如现在我们只采样三次。那么就得到样本0,1,2和对应的权重0.1,0.2,0.7

在这里插入图片描述

一种很朴素的想法就是,我们就将这些权重值作为概率本身,对其进行抽样,抽样出哪一个就取出哪一个值

在这里插入图片描述

比如图中,我们就以这样的布局去转轮盘,转到哪一个就算是取对应的样本值。这种方法是很合理的。因为如果它的权重大,那么我们就认为它更加的接近原始分布 P ( z 1 : t ∣ x 1 : t ) P(z_{1:t}|x_{1:t}) P(z1:tx1:t)

最后我们不断采样出新的样本值,将重采样的样本值作为我们新的样本值。旧的则扔掉。然后对于每一个样本值的权值,我们都设为 1 n \frac{1}{n} n1,n为重采样的次数。

这仅仅是重采样的一种较为简单的形式。重采样的方法却不止这一种。有一些改进版能够解决掉原始版本的一些问题。下面我们介绍一种较为常见的重采样技巧。

系统重采样

一般情况下,我们会把权重归一化,然后按照概率分布函数一样,权重依次累加,比如我们现在有权重w1,w2,w3。那么

在这里插入图片描述

如果3个w的值分别等于0.1,0.2,0.7。那么依次累加得到的结果就是【0.1,0.3,1】。

下面是系统重采样的流程

①归一化权重,令所有的权重的和为1.

②计算权重的累计函数值,记作 c c c

③将(0,1)区间分为N份(N为重采样的次数)。得到n个区间,将所有临界点记作数组 d d d

④从(0, 1 N \frac{1}{N} N1)均匀分布中随机抽样出一个值。记作 a a a

⑤计算 s = a + d [ i ] s=a+d[i] s=a+d[i]( i i i为数组d的一个区间的索引),我们迭代数组d的所有区间,得到数组s。并初始化j=0

⑥for i in N:

如果s[ i ] > c [ j ]:j++

否则将索引 j 保存起来

⑦迭代完N次之后,根据所有的索引 j 取出对应位置的粒子的值。就是我们重采样之后的样本。

值得注意的是,重采样之后,每一个粒子对应的权重都是 1 N \frac{1}{N} N1,我们再看看我们之前提到的权重递推式 w t ∝ P ( x t ∣ z t ) w t − 1 w_t\propto P(x_t|z_t)w_{t-1} wtP(xtzt)wt1,不难发现,如果上一时刻所有的权重都相同了,那么计算当前时刻的权重就没有必要带上 w t − 1 w_{t-1} wt1,因为当前时刻的权重我们只是按照权重大小重采样,所以所有的权重都除掉系数 w t − 1 w_{t-1} wt1是不变的。所以 w t ∝ P ( x t ∣ z t ) w_t\propto P(x_t|z_t) wtP(xtzt)

粒子滤波实现流程

t = 1 t=1 t=1

①在均匀分布中随机初始化粒子群,并且令当前时刻的权重w= 1 N \frac{1}{N} N1(N为采样次数)。

t ≥ 2 t\ge2 t2

②从 P ( z t ∣ z t − 1 ) P(z_t|z_{t-1}) P(ztzt1)中抽样出粒子群记作 p i , i ∈ 1 , 2 , ⋯   , N p_{i},i\in1,2,\cdots,N pi,i1,2,,N

③根据公式 w t = P ( x t ∣ z t ) w_t=P(x_t|z_t) wt=P(xtzt)当前时刻的权值。并归一化。

④重采样得到新的粒子群,求出粒子群的均值,为当前时刻的预测值。

⑤迭代②~④步骤,得到所有的均值。

结束

到此,粒子滤波的推导部分就全部完成了。推导过程并不严谨,如有问题,还望指出。阿里嘎多。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
粒子滤波定位是一种非线性滤波算法,通过使用一组粒子来估计机器的状态。每个粒子都代表了机器可能的位置。在Matlab中实现粒子滤波定位仿真可以通过以下步骤进行: 1. 首先,确定机器的状态空间和观测空间。例如,如果机器在一个维平面上移动,则状态空间可以定义为[x,y,θ],其中x和y是机器的位置坐标,θ是机器的朝向角度。观测空间可以定义为机器感知到的测量值,如距离传感器读数或全向相机图像。 2. 初始化粒子集合。每个粒子都代表了机器可能的状态,可以根据状态空间的范围随机生成初始位置和朝向。 3. 在每个时间步中,进行以下操作: 3.1 根据机器的动态模型,更新每个粒子的状态。可以使用确定性模型或随机性模型。 3.2 计算每个粒子的权重,用于描述该粒子与观测值之间的匹配程度。可以使用测量模型或传感器模型进行计算。 3.3 通过随机重采样和重分配权重来更新粒子集合。重采样过程使得具有较高权重的粒子被选中,而较低权重的粒子则被淘汰。 4. 重复步骤3直到达到指定的时间步数。 5. 可以通过绘制粒子集合的分布来展示仿真结果。例如,使用散点图表示不同粒子的位置和权重。 通过这种方式,粒子滤波定位仿真可以提供机器在给定观测下的状态估计,有效应用于机器人导航、目标跟踪等领域。在Matlab中,可以使用相应的函数和工具箱来实现粒子滤波算法,并进行仿真验证和性能评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值