【状态估计】将变压器和LSTM与卡尔曼滤波器结合到EM算法中进行状态估计(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码及文章讲解


💥1 概述

文章来源:

卡尔曼滤波器需要模型的真实参数,并递归地求解最优状态估计期望最大化(EM)算法适用于估计卡尔曼滤波之前不可用的模型参数,即EM-KF算法。为了提高EM-KF算法的准确性,作者提出了一种状态估计方法,该方法在序列到序列的编码器-解码器(seq2seq)框架下,将长-短期存储器网络(LSTM)、变压器和EM-KF方法相结合。对线性移动机器人模型的仿真表明,新方法更准确。

  • 卡尔曼滤波需要模型的真实参数,并递归求解最优状态估计。期望最大化(EM)算法适用于估计卡尔曼滤波前不可用的模型参数,即EM-KF算法。
  • 为了提高EM-KF算法的精度,该文在序列编码器-解码器(seq2seq)的框架中,结合长短期记忆网络(LSTM)、变压器和EM-KF算法,提出了一种状态估计方法。

我们在seq2seq中提出了用于状态估计的编码器-解码器框架,该状态估计等效于编码和解码观察。

  1. 之前将LSTM整合到KF的工作是采用LSTM编码器和KF 译码器。我们建议LSTM-KF采用LSTM编码器和EM-KF解码器。
  2. 在EM-KF解码器之前,用变压器编码器代替LSTM编码器,我们称之为 变压器-KF.
  3. 集成变压器和LSTM,我们称之为TL-KF。

集成变压器和LSTM在滤波前对观察进行编码,使EM算法更容易估计参数。

  1. 将Transformer和LSTM作为观测的编码器-解码器框架相结合,可以更有效地描述状态,衰减噪声干扰,削弱状态马尔可夫性质的假设和观测的条件独立性。这可以增强状态估计的精度和鲁棒性。
  2. 基于多头自注意和残余连接的变压器可以捕获长期依赖性,而LSTM编码器可以对时间序列进行建模。TL-KF是变压器、LSTM和EM-KF的组合,可用于参数未知的系统的状态估计。
  3. 卡尔曼平滑可以改善卡尔曼滤波,但在TL-KF中,滤波足够精确。因此,经过离线训练进行参数估计后,可以采用KF进行在线估计。

 

📚2 运行结果

 

  

部分代码:

kft = KalmanFilter(A,C,Q,R,B,D,m0,P0,random_state=random_state
)# model should be
state, observation = kft.sample(n_timesteps=step,initial_state=m0
)# provide data
#filtered_state_estimatet, f_covt = kft.filter(observation)
#smoothed_state_estimatet, s_covt = kft.smooth(observation)'''
Step 2: Initialize our model
'''# specify parameters
transition_matrix = A
transition_offset = B
observation_matrix = C
observation_offset = D
transition_covariance = 0.02*np.eye(3)
observation_covariance = np.eye(1)
initial_state_mean =[0,0,1]
initial_state_covariance = 5*np.eye(3)# sample from modelkf = KalmanFilter(transition_matrix, observation_matrix, transition_covariance,observation_covariance, transition_offset, observation_offset,initial_state_mean,initial_state_covariance,random_state=random_state,em_vars=[#'transition_matrices', 'observation_matrices','transition_covariance','observation_covariance',#'transition_offsets', 'observation_offsets','initial_state_mean', 'initial_state_covariance']
class TransformerBlock(nn.Module):"""Bidirectional Encoder = Transformer (self-attention)Transformer = MultiHead_Attention + Feed_Forward with sublayer connection"""def __init__(self, hidden, attn_heads, feed_forward_hidden, dropout):""":param hidden: hidden size of transformer:param attn_heads: head sizes of multi-head attention:param feed_forward_hidden: feed_forward_hidden, usually 4*hidden_size:param dropout: dropout rate"""super().__init__()self.attention = MultiHeadedAttention(h=attn_heads, d_model=hidden)self.feed_forward = PositionwiseFeedForward(d_model=hidden, d_ff=feed_forward_hidden, dropout=dropout)self.input_sublayer = SublayerConnection(size=hidden, dropout=dropout)self.output_sublayer = SublayerConnection(size=hidden, dropout=dropout)self.dropout = nn.Dropout(p=dropout)self.hidden = hidden

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

@article{shi2021kalman,author={Zhuangwei Shi},title={Incorporating Transformer and LSTM to Kalman Filter with EM algorithm for state estimation},journal={arXiv preprint arXiv:2105.00250},year={2021},
}

🌈4 Matlab代码及文章讲解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/96627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人机言语交互模型的评估要素

智能客服中的言语交互模型评估要素,主要包括以下几个方面: 有效性:指模型能否准确识别和理解用户的言语意图,以及生成正确和合适的回答。可以通过比较模型生成的回答与人工回答的准确率来评估。流畅性:指模型在回答问…

【单调栈】下一个更大元素 II

文章目录 Tag题目来源题目解读解题思路方法一:单调栈循环数组 写在最后 Tag 【单调栈循环数组】【数组】 题目来源 503. 下一个更大元素 II 题目解读 在循环数组中找下一个更大的元素。循环数组指的是,数组的最后一个元素的下一个元素是数组首元素。 …

C语言之动态内存管理篇(1)

目录 为什么存在动态内存分配 动态内存函数的介绍 malloc free calloc realloc 常见的动态内存错误 今天收假了,抓紧时间写几篇博客。我又来赶进度了。今天我们来讲解动态内存管理。🆗🆗 为什么存在动态内存分配 假设我们去实现一个…

Excel插件:StatPlus Pro 7.7.0 Crack

Windows 版 StatPlus 借助 StatPlus,人们可以获得一套强大的统计工具和图形分析方法,可以通过简单直观的界面轻松访问。StatPlus 的可能应用范围几乎是无限的 - 社会学、金融分析、生物统计学、经济学、保险业、医疗保健和临床研究 - 仅举几个该程序已被…

SignalIR入门

SignalIR入门 简介教程1.创建项目2.添加 SignalR 客户端库3.创建 SignalR 中心4.配置 SignalR5.添加 SignalR 客户端代码 效果 简介 SignalR 是一个用于构建实时 Web 应用程序的开发工具和库,它可以让服务器端代码与客户端代码之间建立双向通信。SignalR 的中文解释…

什么测试自动化测试?

什么测试自动化测试? 做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。 首先理清自动化测试的概念,广义上来讲&a…

如何搭建一个 websocket

环境: NodeJssocket.io 4.7.2 安装依赖 yarn add socket.io创建服务器 引入文件 特别注意: 涉及到 colors 的代码,请采取 console.log() 打印 // 基础老三样 import http from "http"; import fs from "fs"; import { Server } from &quo…

第九课 排序

文章目录 第九课 排序排序算法lc912.排序数组--中等题目描述代码展示 lc1122.数组的相对排序--简单题目描述代码展示 lc56.合并区间--中等题目描述代码展示 lc215.数组中的第k个最大元素--中等题目描述代码展示 acwing104.货仓选址--简单题目描述代码展示 lc493.翻转树--困难题…

JavaScript系列从入门到精通系列第十五篇:JavaScript中函数的实参介绍返回值介绍以及函数的立即执行

文章目录 一:函数的参数 1:形参如何定义 2:形参的使用规则 二:函数的返回值 1:函数返回值如何定义 2:函数返回值种类 三:实参的任意性 1:方法可以作为实参 2:将匿…

【Spring Boot】创建一个 Spring Boot 项目

创建一个 Spring Boot 项目 1. 安装插件2. 创建 Spring Boot 项目3. 项目目录介绍和运行注意事项 1. 安装插件 IDEA 中安装 Spring Boot Helper / Spring Assistant / Spring Initializr and Assistant插件才能创建 Spring Boot 项⽬ (有时候不用安装,直…

【排序算法】冒泡排序

文章目录 一:排序算法1.1 介绍1.2 分类 二:冒泡排序2.1 基本介绍2.2 图解冒泡排序算法2.3 代码实现 三:算法性能分析3.1 时间复杂度3.2 空间复杂度 一:排序算法 1.1 介绍 排序也称排序算法(Sort Algorithm),排序是将…

SpringCloud-消息组件

1 简介 了解过RabbitMQ后,可能我们会遇到不同的系统在用不同的队列。比如系统A用的Kafka,系统B用的RabbitMQ,但是没了解过Kafka,因此可以使用Spring Stream,它能够屏蔽地产,像JDBC一样,只关心SQ…

C# 给某个方法设定执行超时时间

C# 给某个方法设定执行超时时间在某些情况下(例如通过网络访问数据),常常不希望程序卡住而占用太多时间以至于造成界面假死。 在这时、我们可以通过Thread、Thread Invoke(UI)或者是 delegate.BeginInvoke 来避免界面假死, 但是…

el-table进阶(每条数据分行或合并)

最麻烦的还是css样式&#xff0c;表格样式自己调吧 <!-- ——————————————————————————————————根据数据拓展表格—————————————————————————————————— --> <div style"display: flex"&…

oralce配置访问白名单的方法

目录 配置sqlnet.ora文件 重新加载使配置生效 注意事项 Oracle数据库安全性提升&#xff1a;IP白名单的配置方法 随着互联网的发展&#xff0c;数据库安全问题也越来越严重。Oracle是目前使用较为广泛的一款数据库管理系统&#xff0c;而IP白名单作为提升数据库安全性的有效…

深度学习——权重衰减(weight_decay)

深度学习——权重衰减&#xff08;weight_decay) 文章目录 前言一、权重衰减1.1. 范数与权重衰减1.2. 高维线性回归1.3. 从零开始实现1.3.1.初始化模型参数1.3.2. 定义L₂范数惩罚1.3.3. 定义训练代码实现1.3.4. 不管正则化直接训练1.3.5. 使用权重衰减 1.4. 简洁实现 总结 前言…

vue 项目打包性能分析插件 webpack-bundle-analyzer

webpack-bundle-analyzer 是 webpack 的插件&#xff0c;需要配合 webpack 和 webpack-cli 一起使用。这个插件可以读取输出文件夹&#xff08;通常是 dist&#xff09;中的 stats.json 文件&#xff0c;把该文件可视化展现&#xff0c;生成代码分析报告&#xff0c;可以直观地…

Leetcode901-股票价格跨度

一、前言 本题基于leetcode901股票价格趋势这道题&#xff0c;说一下通过java解决的一些方法。并且解释一下笔者写这道题之前的想法和一些自己遇到的错误。需要注意的是&#xff0c;该题最多调用 next 方法 10^4 次,一般出现该提示说明需要注意时间复杂度。 二、解决思路 ①…

神经网络中的知识蒸馏

多分类交叉熵损失函数&#xff1a;每个样本的标签已经给出&#xff0c;模型给出在三种动物上的预测概率。将全部样本都被正确预测的概率求得为0.70.50.1&#xff0c;也称为似然概率。优化的目标就是希望似然概率最大化。如果样本很多&#xff0c;概率不断连乘&#xff0c;就会造…

关于丢失msvcp71.dll的5个解决办法,msvcp71.dll丢失原因分析

计算机已经成为我们生活和工作中不可或缺的一部分&#xff0c;在使用计算机的过程中&#xff0c;我们经常遇到各种软件或应用程序崩溃的情况。其中&#xff0c;一个常见的错误提示是“MSVCP71.dll丢失”。这个错误通常出现在运行使用Visual C Redistributable for Visual Studi…