[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 ...
随机推荐
- iOS-ARC_Xcode检测循环引用
iOS-ARC_Xcode检测循环引用 一,在桌面上新建立一个工程,在ViewController.m中输入如下代码: - (void)viewDidLoad { [super viewDidLoad ...
- 深入理解Eureka - Eureka配置列表
Eureka包含四个部分的配置 instance:当前Eureka Instance实例信息配置 client:Eureka Client客户端特性配置 server:Eureka Server注册中 ...
- display与visibility的区别
style.visibility和style.display都可以实现对页的隐藏,但visibility要占用域的空间,而display则不占用 将元素display属性设为 block,会在该元素后 ...
- JDBC事务和JTA (XA)事务区别
JDBC 事务 JDBC 事务是用 Connection 对象控制的.JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交. 在jd ...
- Python中写一个乒乓球类的游戏
最近开始学Python,感觉挺好玩的,既有脚本语言的灵活性,又有丰富的类库与面向对象的特点,开发起来很方便. 游戏的规则和乒乓球一样,如果妙蛙种子掉地上了就算输,你可以用蓝色的跷跷板弹它,使他不落到地 ...
- dp之多维背包hdu4501
思路:将v1,v2,k都当作一种体积,每种物品只能取一次,求max....... 反思:以前写背包,由于只有一个体积,所以习惯性的在for中,就所取的最小值限制,而在这次,因为这里导致wa了,具体是因 ...
- 自定义maven变量以及maven内置常量
本文转自:http://zheng12tian.iteye.com/blog/1770909 在创建Maven工程后,插件配置中通常会用到一些Maven变量,因此需要找个地方对这些变量进行统一定义,下 ...
- linux_UAPI_转
转自:Linux Kernel UAPI 问题描述 从3.5开始,Linux Kernel 里多了一个 uapi 文件夹,里面放了很多 Linux Kernel 各个模块的头文件.如果是第一次碰到,可 ...
- windows 搭建 subversion+TortoiseSVN
1.版本 (a)Apache 2.2.25:httpd-2.2.25-win32-x86-no_ssl.msi (b)Subversion:Setup-Subversion-1.8.5.msi (c) ...
- warning LNK4099: PDB 原因及解决方案
0x00 现象及原因举例: warning LNK4099: PDB 'wxbase30ud.pdb' was not found with 'wxbase30ud.lib(any.obj)'使用VC ...