卡尔曼滤波:高斯过程 + 贝叶斯推断
前言
- PRML中提到,卡尔曼滤波是高斯过程的一种应用,本文便从高斯过程的角度来总结一下卡尔曼滤波;
- 首先明确卡尔曼滤波包括两部分:预测和更新。预测就是根据系统上一时刻的状态最优估计Sk−1S_{k-1}Sk−1预测当前时刻的状态SkS_{k}Sk;更新就是通过当前时刻的观察值ZkZ_kZk更新当前时刻的状态预测值,作为当前时刻的最优估计Sk′S_{k}'Sk′。以此方法迭代。
- 其次明确系统的真实状态是确定的、唯一的,但是!!我们得到的所有估计值都是不确定的,是一个随机变量,因此使用二阶统计量(均值、协方差)来描述。
预测(高斯过程)
- 设上一时刻的系统状态的最优估计为 Sk−1S_{k-1}Sk−1,其服从多元高斯分布:
Sk−1∼N(x^k−1,Pk−1)S_{k-1}\sim\mathcal{N}(\hat{x}_{k-1},P_{k-1})Sk−1∼N(x^k−1,Pk−1) - 系统状态空间方程描述了状态转换的规则:
Sk=FkSk−1+BkukS_{k}=F_kS_{k-1}+B_ku_kSk=FkSk−1+Bkuk
FkF_kFk状态转移矩阵,BkB_kBk控制矩阵,uku_kuk控制量; - 由上一时刻系统状态随机变量Sk−1S_{k-1}Sk−1转换到当前时刻系统状态随机变量SkS_{k}Sk就是一个高斯过程,我们虽然对该转换进行了建模(状态空间方程),但是仍然存在一些不可控因素(风阻、打滑、突发事件等),因此加入独立随机噪声ϵ∼N(0,Qk)\epsilon\sim\mathcal{N}(\mathbf{0},Q_k)ϵ∼N(0,Qk),因此真实的状态空间方程应该是这样的:
Sk=FkSk−1+Bkuk+ϵS_{k}=F_kS_{k-1}+B_ku_k+\epsilonSk=FkSk−1+Bkuk+ϵ - 因此可以得到当前时刻系统状态随机变量SkS_kSk的分布:
Sk∼N(x^k,Pk)S_{k}\sim\mathcal{N}(\hat{x}_{k},P_{k})Sk∼N(x^k,Pk)
其中:
x^k=Fkx^k−1+Bkuk(1)\hat{x}_{k}=F_k\hat{x}_{k-1}+B_ku_k\tag{1}x^k=Fkx^k−1+Bkuk(1)
Pk=FkPk−1FkT+Qk(2)P_k=F_kP_{k-1}F_k^T+Q_k\tag{2}Pk=FkPk−1FkT+Qk(2) - 至此我们便完成了预测过程!哦对了,因为我们的观测值和真实的状态值可能由于单位等原因并不完全相等,还需要一个从状态空间到观测空间的映射矩阵HkH_kHk,因此,系统观测随机变量就服从分布:
Sk∼N(Hkx^k,HkPkHkT)S_{k}\sim\mathcal{N}(H_k\hat{x}_{k},H_kP_{k}H_k^T)Sk∼N(Hkx^k,HkPkHkT)
例如一个二维的状态空间:
更新(贝叶斯推断)
- 在预测阶段,我们已经得到了系统当前时刻的状态分布,这在贝叶斯推断中相当于先验估计,因为我们没有任何的实际数据作为支撑;此时如果我们引入传感器的观测值,便可以根据观测值更新系统状态,得到后验分布;
- 由于传感器有一定的误差,因此观测值也是个随机变量 ZkZ_kZk。卡尔曼滤波中是这样描述观测值的:假设传感器读取到的观测值为 zkz_kzk,那么我们就以 $z_k $为均值,协方差为 RkR_kRk ,来构造观测变量的多元高斯分布,其中协方差 RkR_kRk 取决于传感器的精度:
Zk∼N(zk,Rk)Z_{k}\sim\mathcal{N}(z_{k},R_{k})Zk∼N(zk,Rk)
- 该ZkZ_kZk的分布实际上就是系统状态的似然估计(根据观测量确定系统状态最有能落在哪个位置,叫做似然),有了先验和似然,相乘就是后验:
- 由于似然和先验都是高斯分布,根据共轭分布原理,后验分布也服从高斯分布:
Sk′∼N(μ′,Σ′)S_{k}'\sim\mathcal{N}(\mu',\Sigma')Sk′∼N(μ′,Σ′)
其中:
μ′=μ0+K(μ1−μ0)=Hkx^k+K(zk−Hkx^k)\mu'=\mu_0+K(\mu_1-\mu_0)=H_k\hat{x}_{k}+K(z_{k}-H_k\hat{x}_k)μ′=μ0+K(μ1−μ0)=Hkx^k+K(zk−Hkx^k)
Σ′=Σ0−KΣ0=HkPkHkT−KHkPkHkT\Sigma'=\Sigma_0-K\Sigma_0=H_kP_{k}H_k^T-KH_kP_{k}H_k^TΣ′=Σ0−KΣ0=HkPkHkT−KHkPkHkT
K=Σ0Σ0+Σ1=HkPkHkTHkPkHkT+RkK=\frac{\Sigma_0}{\Sigma_0+\Sigma_1}=\frac{H_kP_{k}H_k^T}{H_kP_{k}H_k^T+R_{k}}K=Σ0+Σ1Σ0=HkPkHkT+RkHkPkHkT
注意,此时随机变量 Sk′S_{k}'Sk′ 仍是在观测空间中表示的,转换回状态空间为:
μ′=x^k+K(zk−Hkx^k)(3)\mu'=\hat{x}_{k}+K(z_{k}-H_k\hat{x}_k)\tag{3}μ′=x^k+K(zk−Hkx^k)(3)
Σ′=Pk−KHkPk(4)\Sigma'=P_{k}-KH_kP_{k}\tag{4}Σ′=Pk−KHkPk(4)
K=PkHkTHkPkHkT+Rk(5)K=\frac{P_{k}H_k^T}{H_kP_{k}H_k^T+R_{k}}\tag{5}K=HkPkHkT+RkPkHkT(5) - 至此我们就得到系统状态的最佳(后验)估计。
总结
- 综上所述,式(1)(2)(3)(4)(5)(1)(2)(3)(4)(5)(1)(2)(3)(4)(5)就是卡尔曼滤波的所有公式:
- 式(1)(2)(1)(2)(1)(2)表示高斯过程求系统状态先验分布;
- 式(3)(4)(5)(3)(4)(5)(3)(4)(5)表示由先验和似然求系统状态后验分布(贝叶斯推断),该后验作为最优估计输出给下一次迭代;
- 不断迭代就可以得到系统在任意时间点下的最优状态估计;
- 卡尔曼滤波器是一种状态观测器,从系统初始状态开始迭代,使得我们对系统的判断不再只能依靠传感器的读数,而是可以结合系统的状态空间方程,从而提升观测的准确性。
插句题外话:
- 卡尔曼滤波贝叶斯推断的过程类似于贝叶斯回归的参数学习过程,只不过贝叶斯回归是在参数空间,而卡尔曼滤波是在状态空间,具体可参考我另一篇博文:贝叶斯回归;
卡尔曼滤波:高斯过程 + 贝叶斯推断相关推荐
- 10分钟教你用睡觉这件事玩转贝叶斯推断
编译 | AI科技大本营(ID:rgznai100) 参与 | 张建军 编辑 | 明 明 [AI科技大本营导读]贝叶斯法则和其他统计概念很难通过只用到字母的抽象公式.或者一些虚构的情景来理解.在作者W ...
- 贝叶斯推断方法 —— 从经验知识到推断未知
贝叶斯推断方法 -- 从经验知识到推断未知 机器学习基础算法python代码实现可参考:zlxy9892/ml_code 1 什么是贝叶斯 在机器学习领域,通常将监督学习 (supervised ...
- 干货 | 基于贝叶斯推断的分类模型 机器学习你会遇到的“坑”
本文转载自公众号"读芯术"(ID:AI_Discovery) 本文3153字,建议阅读8分钟. 本文讲解了在学习基于贝叶斯推断的分类模型中,我们需要的准备和方法. 数学准备 概率: ...
- 贝叶斯推断及其互联网应用(三):拼写检查
(这个系列的第一部分介绍了贝叶斯定理,第二部分介绍了如何过滤垃圾邮件,今天是第三部分.) 使用Google的时候,如果你拼错一个单词,它会提醒你正确的拼法. 比如,你不小心输入了seperate. G ...
- 贝叶斯推断及其互联网应用(二):过滤垃圾邮件
上一次,我介绍了贝叶斯推断的原理,今天讲如何将它用于垃圾邮件过滤. ======================================== 贝叶斯推断及其互联网应用 作者:阮一峰 (接上文) ...
- 贝叶斯推断及其互联网应用(一)
贝叶斯推断及其互联网应用(一) 投递人 itwriter 发布于 2011-08-25 14:03 评论(6) 有1981人阅读 原文链接 [收藏] « » 一年前的这个时候,我正在翻译Paul Gr ...
- 【数据挖掘】贝叶斯分类 ( 贝叶斯分类器 | 贝叶斯推断 | 逆向概率 | 贝叶斯公式 | 贝叶斯公式推导 | 使用贝叶斯公式求逆向概率 )
文章目录 I . 贝叶斯分类器 II . 贝叶斯推断 ( 逆向概率 ) III . 贝叶斯推断 应用场景 ( 垃圾邮件过滤 ) IV . 贝叶斯方法 由来 V . 贝叶斯方法 VI . 贝叶斯公式 V ...
- 概率统计笔记:贝叶斯推断 Bayesian Inference
1 贝叶斯定理和全概率公式(复习) 贝叶斯定理(条件概率的计算公式): 全概率公式:如果A和A'构成了样本空间的一个划分,那么事件B的概率为: 全概率公式下条件概率的另一种写法: 2 贝叶斯推断 对条 ...
- 贝叶斯推断及其互联网应用(一):定理简介
贝叶斯推断及其互联网应用(一):定理简介 作者: 阮一峰 日期: 2011年8月25日 一年前的这个时候,我正在翻译Paul Graham的<黑客与画家>. 那本书的第八章,写了一个非常具 ...
最新文章
- SSH实现分页查询(转)
- ASP.NET 完成基于表单的身份验证
- 【漫谈数据仓库】 如何优雅地设计数据分层
- 下一代微服务!ServiceMesh的2018年度总结 | 万字雄文
- Spring Boot使用Redis进行消息的发布订阅
- c语言复杂的程序代码,C语言中复杂结构的序列化
- 来自Riot 的一份游戏美术教程(四):环境美术
- 使用 Solid 私有化存储 IPFS 文件哈希值
- 手机全部零件名称图片_【直播课】一条记录中显示多张图片
- ubuntu Qt Creator不能输入中文
- 利用openpyxl,Python对excel读写文件
- java 包错_以下关于Java包的描述中,错误的是()
- JSON.parse 和 JSON.stringify
- vmware中NAT模式下,虚拟机与主机能ping通 为什么虚拟机不能上网
- 跳频信号检测与参数估计技术研究
- ubuntu截图快捷方式
- PS-第六天-色彩调整
- 【WordPress】视频有声音无图像
- 3.Linux文件系统
- 企业微信可以自动回复吗?