从贝叶斯到粒子滤波——Round 1
粒子滤波确实是一个挺复杂的东西,从接触粒子滤波到现在半个多月,博主哦勒哇看了N多篇文章,查略了嗨多资料,很多内容都是看了又看,细细斟酌。今日,便在这里验证一下自己的修炼成果,请各位英雄好汉多多指教。
讲粒子滤波之前,还得先讲一个叫”贝叶斯滤波”的东西,因为粒子滤波是建立在贝叶斯滤波的基础上的哩。说太多抽象的东西也很难懂,以目标跟踪为例,直接来看这东西是怎么回事吧:
1. 首先咋们建立一个动态系统,用来描述跟踪目标在连续时间序列上的变换情况。简单一点,我们就使用目标的位置(i,j)作为这个动态系统的状态吧。
那怎么描述呢?
我们使用状态xt来描述系统在时刻t的状态,在这个例子中,xt=(it,jt);使用yt表示在时刻t目标的观测值。这里请注意,xt是我们建立的模型中,目标的位置,而目标的实际位置不一定与之相等。举个简单的例子就是:一部小车做匀加速直线运动,xt是我们用公式计算出来的小车的位置,yt是我们用GPS定位到的位置。
由于误差的存在,光靠理论公式计算得出来的结果肯定是有偏差的。但是,GPS又卡又慢,要靠它来完成我们的目标跟踪貌似也不是很靠谱。那我们做一下折衷吧,先用理论计算得到目标的位置,然后用观测值进行修正,使得我们的模型更加完美。
额!完美吗?不害臊!你理论得出来的不准确,然后还要靠又卡又慢的GPS来修正,还好意思跟我说完美!你怎么不上天,跟太阳肩并肩。再说了,你修正后的位置还不一定是准确了,要我说目标也可能就在计算到的位置,也可能在它东边、西边、南边、北边、东南边......
咔咔咔!行行行,我错了还不行么。你这人真是急躁,喝口茶消消气,再听我细细说来。前面那位大爷说的在理,咋们得听,嗯,我猜他应该是太阳的后裔,哈哈哈!跑题了。
是啊!目标的位置可能在好多个位置,有各种可能性,毕竟我们并没有得到一个准确的值。咦!那我们可以用概率来描述啊!这种不确定性不就是概率论里面说的那些东西吗?天呐,我好激动,修炼多年的概率论终于派上用场了。而且你看哦,用观测值yt对xt进行修正,这不就是说先得到先验概率p(xt),然后获取到更加丰富的信息yt后,对先验概率进行修正,得到后验概率p(xt|yt)吗?哇哇哇!贝叶斯,贝叶斯,这就是贝叶斯啊,条件概率啊!!!
2. 贝叶斯滤波
嗯嗯嗯,对对对,楼上正解。从贝叶斯理论的观点来看,状态估计问题(目标跟踪,信号滤波)就是根据之前一系列已有数据y1:t(后验只是)递推计算出当前状态xt的可信度。这个可信度就是概率公式p(xt|y1:t)。贝叶斯滤波通过预测和更新这两个步骤来递推计算xt的可信度。
预测过程是利用系统模型预测状态xt的先验概率密度,也就是通过已有的先验知识对未来系统的状态进行猜测,
更新过程是利用新的观测值yt对先验概率密度进行修正,得到后验概率密度。
3. 公式及推导
贝叶斯滤波的公式是酱紫的:
预测:
更新:
在推导之前,一些预备知识还是要的。贝叶斯公式(就是条件概率公式啦),全概率公式,样本空间的概念和完备事件组的概念。这些知识对推导过程的理解尤为重要,建议各位先了解一下这些概念。
还要提一下,动态系统中的状态转移问题,一般都先假设其服从一阶马尔科夫(Markov)模型,即
①当前时刻的状态xt只与上一时刻的状态xt-1有关;
②t时刻的观测值yt只与当前的状态xt有关。
下面进行贝叶斯滤波公式的推导:
预测:
哈哈!博主比较懒,直接上图了,字比较丑,见谅见谅。第一行是一个全概率公式的应用,然后第二第三第四行都是条件概率啦!最后一行是根据假设①来着。
这里你可能有一个问题,既然都说前时刻的状态xt只与上一时刻的状态xt-1有关,跟yt没半毛钱关系,即p(xt|xt-1)。那你弄一个p(xt|y1:t-1)是几个意思?
莫说你要问了,我当初可是也纠结了好久。说到底,这两个概率公式含义不一样。p(xt|xt-1)是纯粹根据模型进行预测(计算),啪,xt-1进去,公式一算,xt出来了,简单明了。p(xt|y1:t-1)这一个呢,是说既然我们已经拿到了一组数据,这些数据跟系统状态也是有关系的,那我们就可以根据这些数据来猜呀,只是猜测而已呐。(楼主yy:那... 你猜我猜不猜?)
更新:
第三行是根据假设②,其他的全都是条件概率公式的应用。
这里你应该跟我一样,也还有一个问题,就是既然yt只与xt有关,那分母的p(yt|y1:t)为什么不直接写成p(yt)啊!!!
关于这个问题,其实,我也不知道。要不你们也研究一下咯,然后拜托告诉我一声。
However,当贝叶斯滤波碰到了粒子滤波,这些推导完全不重要。哈哈哈!就是说我们推了半天没用,好想哭。。。
粒子滤波使用N个加权的样本(即粒子)来近似表示后验概率密度p(xt|y1:t)。因为有些问题系统状态变换很难建模嘛,公式都没有,xt没法产生啊!所以就撒样本呗,用样本的分布来近似状态xt的真实分布。
预知后事如何,请听下回分解。
从贝叶斯到粒子滤波——Round 1的更多相关文章
- 从贝叶斯到粒子滤波——Round 2
上一篇博文已经讲了贝叶斯滤波的原理以及公式的推导:http://www.cnblogs.com/JunhaoWu/p/bayes_filter.html 本篇文章将从贝叶斯滤波引入到粒子滤波,讲诉粒子 ...
- (一):细说贝叶斯滤波:Bayes filters
认知计算,还要从贝叶斯滤波的基本思想讲起,本文主要是对<Probabilistic Robotics>中贝叶斯滤波器部分的详细讲解. 这一部分,我们先回顾贝叶斯公式的数学基础,然后再来介绍 ...
- python实现随机森林、逻辑回归和朴素贝叶斯的新闻文本分类
实现本文的文本数据可以在THUCTC下载也可以自己手动爬虫生成, 本文主要参考:https://blog.csdn.net/hao5335156/article/details/82716923 nb ...
- PGM学习之五 贝叶斯网络
本文的主题是“贝叶斯网络”(Bayesian Network) 贝叶斯网络是一个典型的图模型,它对感兴趣变量(variables of interest)及变量之间的关系(relationships) ...
- Machine Learning in Action(3) 朴素贝叶斯算法
贝叶斯决策一直很有争议,今年是贝叶斯250周年,历经沉浮,今天它的应用又开始逐渐活跃,有兴趣的可以看看斯坦福Brad Efron大师对其的反思,两篇文章:“Bayes'Theorem in the 2 ...
- 朴素贝叶斯(Naive Bayesian)
简介 Naive Bayesian算法 也叫朴素贝叶斯算法(或者称为傻瓜式贝叶斯分类) 朴素(傻瓜):特征条件独立假设 贝叶斯:基于贝叶斯定理 这个算法确实十分朴素(傻瓜),属于监督学习,它是一个常用 ...
- SLAM的数学基础(4):先验概率、后验概率、贝叶斯准则
假设有事件A和事件B,可以同时发生但不是完全同时发生,如以下韦恩图所示: 其中,A∩B表示A和B的并集,即A和B同时发生的概率. 如此,我们很容易得出,在事件B发生的情况下,事件A发生的概率为: 这个 ...
- 机器学习实战笔记(Python实现)-03-朴素贝叶斯
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
- 朴素贝叶斯算法下的情感分析——C#编程实现
这篇文章做了什么 朴素贝叶斯算法是机器学习中非常重要的分类算法,用途十分广泛,如垃圾邮件处理等.而情感分析(Sentiment Analysis)是自然语言处理(Natural Language Pr ...
随机推荐
- C语言 · 阶乘计算 · 基础练习
问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表 ...
- Kooboo CMS技术文档之五:站点配置管理
站点关系 管理站点间的关系,站点可以有子站点,子站点继承父站点的部分配置数据,同时子站点还可以根据需要,本地化由父站点继承而来的数据.通过继承和本地化,可以让子站点在用最小的改动代价,来完成一个与父站 ...
- 探索ASP.NET MVC5系列之~~~1.基础篇---必须知道的小技能
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程 汇总:http://www.cnblogs.com/dunitian/p/4822808.html#mvc 本章D ...
- C++中的命名空间
一,命名空间(namespace)的基本概念以及由来 1.什么是标识符: 在C++中,标识符可以是基本的变量,类,对象,结构体,函数,枚举,宏等. 2.什么是命名空间: 所谓的命名空间是指标识符的可见 ...
- 安装eclipse的maven插件
我们团队用maven来管理项目需要的库文件,其实以前都没听过maven,第一次接触这个,师兄要我直接去装下这个,开始以为还挺简单的,没想到中间遇到了一些小麻烦,现在把我成功安装maven的过程分享下, ...
- Chrome V8引擎系列随笔 (1):Math.Random()函数概览
先让大家来看一幅图,这幅图是V8引擎4.7版本和4.9版本Math.Random()函数的值的分布图,我可以这么理解 .从下图中,也许你会认为这是个二维码?其实这幅图告诉我们一个道理,第二张图的点的分 ...
- jQuery2.x源码解析(缓存篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 缓存是jQuery中的又一核心设计,jQuery ...
- Java中用得比较顺手的事件监听
第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...
- FineBI:一个简单易用的自助BI工具
过去,有关企业数据分析的重担都压在IT部门,传统BI分析更多面向的是具有IT背景的人员.但随着业务分析需求的增加,很多公司都希望为业务用户提供自助分析服务,将分析工作落实到业务人员手中.但同时,分析工 ...
- Android AndroidRuntime类
AndroidRuntime类是安卓底层很重要的一个类,它负责启动虚拟机以及Java线程,AndroidRuntime类在一个进程中只有一个实例对象保存在全局变量,gCurRuntime中.