离散贝叶斯过滤器(1)

2020-10-14  本文已影响0人  zidea

离散贝叶斯过滤器

Kalman 滤波器属于贝叶斯滤波器家族一个成员。大多数教科书上,都将 Kalman 滤波器看作 Bayesian 公式的一种表现,但是解释如何将贝叶斯公式应用到 Kalman 滤波等式的方式因为过于抽象,所以晦涩难懂。

这种方式读者对数学的几个领域有相当深刻的理解,而且还把许多理解和形成对情况的直观把握交给了读者。

今天我们这将用另一种方式来解释这个问题,这归功于迪特·福克斯和塞巴斯蒂安·特伦的工作。使用贝叶斯统计来追踪通过走廊的目标,这种方式比较直觉,可以用机器人,不过这里用狗来代替机器人。小狗要比机器人更难预测,这给滤波器预测带来一定难度。能找到的第一个公开的例子似乎在 fox1999[1],在 fox2003[2]中有一个更完整的例子。

现在让我们用一个简单的思考实验,就像我们对g-h滤波器所做的那样,来看看我们如何推理使用概率来过滤和跟踪。

跟踪小狗

让我们从一个简单的问题开始。假设在空间中有一条小狗,所以有人会将自己小狗带去工作。偶尔,狗会走出办公室,在大厅里走来走去。我们想追踪他们。所以在一次黑客竞赛中,有人发明了一个声纳传感器来连接狗的项圈。项圈发出信号,通过监听回声,然后计算回声的速度,我们可以判断狗是否停留某一个门前。还可以感知狗何时离开,传输告狗向哪个方向移动。通过wifi 连接到网络,每秒发送一次更新。

将跟踪设备给小狗配套上,接下里使用 Python 来准备编写代码来跟踪小狗如何穿过。乍一看,脸红可能看起来不可能。如果我开始监听小狗佩戴的传感器,我可能会读大厅大厅等等。接下来看一看如何使用这些信息来确定小狗在哪里?

可以将问题简化,以便于绘图,假设走廊中只有 10 个位置,用数字从 0 到 9 表示,其中 1 在 0 的右侧,出于稍后将明确的原因,还将假定走廊是圆形或矩形的。如果你从位置9向右移动,你将处于位置0。

开始监听传感器,仅凭监听器还无法没有理由确定小狗在走廊的位置。小狗出现走廊在任何的位置上可能性都是一样的。有10个位置,所以小狗出现任何位置的概率都是 1/10。

import numpy as np
belief = np.array([1/10]*10)
print(belief)
[0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1]

在贝叶斯统计学中。将测量或其他信息和先验整合的概率。准确地说,这叫做先验概率分布。概率分布是一个事件所有可能概率的集合,概率分布总是和为 1,概率分布列出了所有可能的事件和每一个事件发生的概率。

大家可能都接触过概率,比如“今天下雨的概率是30%”。贝叶斯统计学是概率论的重要改进,因为贝叶斯统计学把概率看作是对某个事件的一种信念。让我们举个例子,如果不断反复地掷一个硬币,就会得到 50% 的正面和 50% 的反面。这是大家熟悉频率统计量,与贝叶斯统计不同,计算是基于事件发生的频率。

再做一次掷硬币实验。相信这件事是从哪个方向降落的?经常光顾的概率对此没什么可说的,它只会说 50% 的硬币会以人头的形式抛掷土地。在某些方面,给硬币的当前状态分配一个概率是没有意义的。要么是正面的,要么是反面的,我们只是不知道是哪面会朝上。Bayes 把这看作是一个关于某个事件的信念—信念或知识的力量,认为这个硬币掷硬币是正面朝上的 50%。

天气预报就是贝叶斯经验, 贝叶斯统计考虑了过去的信息(先验)。我们观察到每 100 天下 4 次雨。由此看来,明天下雨的可能性是 1/25。天气预报不是这样做的。如果我知道今天下雨,明天很可能会下雨。天气预报是贝叶斯的。

在实践中,统计学家频率专家和贝叶斯技术。有时很难得到先验信息是困难,利用统计也是无法获取到,。在这本书中我可以得到一些经验(先验)。谈论某件事发生的概率时,通常会根据我们经验,以及之前你对这件事了解程度而得出先验概率,这就是采用贝叶斯方法。

现在让我们创建走廊的地图。我们将把前两个门放在一起,然后再把另一个门距离稍远的位置。用 1 表示门,用 0 表示墙:采用贝叶斯方法。

开始监听,西蒙在网络上的传输,我从传感器得到的第一个数据是门。暂时假设传感器总是返回正确的答案。但是仅凭数据还无法确定具体是哪一个扇门,无法确定他就在第一、第二或第三扇门前面。每个门都有我能做的事。所有的门都有相同的可能性,其中有三个,所以我给每个门指定1/3的概率。

import kf_book.book_plots as book_plots
from kf_book.book_plots import figsize, set_figsize
import matplotlib.pyplot as plt

belief = np.array([1/3, 1/3, 0, 0, 0, 0, 0, 0, 1/3, 0])
book_plots.bar_plot(belief)
上一篇下一篇

猜你喜欢

热点阅读