[Scikit-learn] *Dynamic Bayesian Network - Partical Filter
涉及的一些知识:
- 机器人的自我定位
- Sequential Importance Sampling
Ref: http://scipy-cookbook.readthedocs.io/items/ParticleFilter.html
Ref: http://blog.csdn.net/artista/article/details/51570878
Ref: https://www.youtube.com/watch?v=N7rH_VVtqRA
Importance Sampling
Review: [Bayes] Hist & line: Reject Sampling and Importance Sampling

Use g(x) to simulate f(x) as following: [ Here, uniform dist is too simple to show its feature ]
> L=10000
> K=135/64
> x=runif(L)
> ind=(runif(L)<(20*x*(1-x)^3/K))
> hist(x[ind],probability=T, xlab="x",ylab="Density",main="")
>
> d=density(x[ind],from=0,to=1)
> lines(d,col=4)
>
> y=runif(L)
> w=20*y*(1-y)^3 // 可见,pr is large with larger 权重
> W=w/sum(w) // 每个x轴的sample point的权重值W
> d=density(y,weights=W,from=0,to=1)
> lines(d,col=3)
>
> xx=seq(0,1,length=100)
> lines(xx,20*xx*(1-xx)^3,lwd=2,col=2)
Why?

Algorithm:

However, this is not suitable in high dimension space.
序贯重要性采样
This is better.

先灌一篇背景文:
From: http://blog.csdn.net/artista/article/details/51570878
Udacity的机器人人工智能教程-CS373 Artificial Intelligence for Robotics Programming a Robotic Car:
绿色的点是一个机器人,蓝色的线代表激光发出的测量线,现在它被随机放在了地图的一个位置,它想要知道自己到底在哪里,于是,它就开始猜测:
由于没有任何的先验信息,所以一开始,它可能存在与房间的任何一个角落,每一个红色的点即代表机器人对自己所处位置的一个猜想,这就是我们在蒙特卡洛方法里面所提到的样本。
猜测(红色点)的分布是均匀的,也就是之前式子里面的q(x)分布。当然,每一个猜测有好有坏,不然我们简单的把所有粒子一平均,机器人对自己位置的猜想肯定一直会处于整个房间的最中心了。
p(x)/q(x) 这部分我们称之为权值,就是为了衡量每个猜测的好坏,也就是衡量我们随意决定的分布和真实分布之间的相似度。
在这里其实还有一个小问题的,我们应该如何去衡量p(x)/q(x),在机器人定位问题里面,p(x)我们根本不知道!不知道的东西怎么去衡量啊,粒子滤波在这里有很牛逼的一招:
这个不知道,我们可以抓特征啊。在这个问题里面,由于机器人知道整个房间的地图,又能探测到自己周边环境的样子,所以它可以把p(x)/q(x)转换为计算当前猜测点的特和探测器感知的周围环境的似然程度!【理解重点】
粒子滤波器牛逼的地方就在这里:我不知道真实情况怎么分布的,但是我可以追踪你的一个特征,并且我假设:这个特征的分布期望和原始目标的分布期望是一致的。这就好像是老师叫你去操场上找人,但是你并不知道要找的人会在操场哪里出现,而且最关键的是你还不认识那个人。这时候老师说,不知道不认识不要紧,你只要找那个穿着红衣服的人就可以了。然后你就去操场一看,哟,红衣服在这里,虽然你不认识他,但是你认为红衣服是他在这个状态空间的唯一特征,所以你还是准确找到了这个人。
这样,p(x)/q(x)在实际计算中实际上就近似于计算特征的相似程度了。在这个问题里面,就是比较猜测位置姿态所应该得到的环境信息和实际得到的环境信息之间的差异。
当然,为了更好的性能,我们还是希望p(x)/q(x)尽可能接近于1,也就是q(x)尽可能接近于原始p(x)的分布的,这个问题我们可以通过粒子重采样解决。在这里我们不深入讨论,只给出重采样迭代之后的效果:

可以看到,在移动过程中,机器人的猜测渐渐全部收敛到机器人的真实位置了!
Sequential Importance Sampling
[Scikit-learn] *Dynamic Bayesian Network - Partical Filter的更多相关文章
- [Scikit-learn] Dynamic Bayesian Network - Kalman Filter
看上去不错的网站:http://iacs-courses.seas.harvard.edu/courses/am207/blog/lecture-18.html SciPy Cookbook:http ...
- [Scikit-learn] Dynamic Bayesian Network - Conditional Random Field
李航,第十一章,条件随机场 参考:[PGM] Markov Networks 携代码:用 Python 通过马尔可夫随机场(MRF)与 Ising Model 进行二值图降噪[推荐!] CRF:htt ...
- [Scikit-learn] Dynamic Bayesian Network - HMM
Warning The sklearn.hmm module has now been deprecated due to it no longer matching the scope and th ...
- 概率图模型(PGM):贝叶斯网(Bayesian network)初探
1. 从贝叶斯方法(思想)说起 - 我对世界的看法随世界变化而随时变化 用一句话概括贝叶斯方法创始人Thomas Bayes的观点就是:任何时候,我对世界总有一个主观的先验判断,但是这个判断会随着世界 ...
- Learning Bayesian Network Classifiers by Maximizing Conditional Likelihood
Abstract Bayesian networks are a powerful probabilistic representation, and their use for classifica ...
- scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)
scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探
目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...
- Envoy 源码分析--network L4 filter manager
目录 Envoy 源码分析--network L4 filter manager FilterManagerImpl addWriteFilter addReadFilter addFilter in ...
随机推荐
- hdoj1257 最少拦截系统
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- [转]编写Android.mk中的LOCAL_SRC_FILES的终极技巧
希望看原文的请移步:[原创]编写Android.mk中的LOCAL_SRC_FILES的终极技巧 问题的引入 在使用NDK编译C/C++项目的过程中,免不了要编写Android.mk文件,其中最重要的 ...
- xslt循环转换子元素
转换源xml <keywords class="array"> <e type="string">e1</e> <e ...
- Zabbix添加自定义监控项(一)
前言:由于Zabbix提供的项目和模板有限,有时我们需要自定义监控项,下面以监控磁盘I/O使用率为例,创建自动发现规则,并配置图形. (1)Zabbix_agentd端自动发现脚本,zabbix要求返 ...
- pionter指针小结
第七章.指针和函数的关系 可以把一个指针声明成为一个指向函数的指针. intfun1(char*,int); int(*pfun1)(char*,int); pfun1=fun1; .... .... ...
- Java:单例模式的七种写法<转>
第一种(懒汉,线程不安全): 1 public class Singleton { 2 private static Singleton instance; 3 privat ...
- rpl 智能物件路由协议
http://www.taodocs.com/p-32459084.html http://max.book118.com/html/2014/0509/8152649.shtm http://www ...
- efm32 si446x
Linking target: example-trickle.stk3700arm-none-eabi-gcc -Xlinker -Map=example-trickle.stk3700.map - ...
- JSON对应的maven依赖包
常用有三种json解析jackson.fastjson.gson. jackson依赖包 <!-- https://mvnrepository.com/artifact/com.fasterxm ...
- Linux 终端下快速移动光标
ctr+a:移动光标到命令行开始处(紧接命令提示符号) ctr+e:移动光标到命令行行尾 ctr+k:删除光标到命令行行尾 ctr+u:删除光标到命令行开始处 ctr+h: 往后删除一字符 ctr+d ...