时间序列分析方法之 -- 长短期记忆网络(LSTM)原理及Python代码示例

news2024/9/17 8:54:52

目录

原理

适用情况

Python示例代码

结论


 

原理

长短期记忆网络(LSTM,Long Short-Term Memory Networks)是一种特殊的递归神经网络(RNN),设计用于克服传统RNN在处理长序列数据时的梯度消失和梯度爆炸问题。LSTM通过引入门控机制来控制信息流,使其能够记住长期依赖关系。

LSTM单元由以下三个门组成:

  1. 遗忘门(Forget Gate):决定丢弃多少信息。
  2. 输入门(Input Gate):决定保留多少新信息。
  3. 输出门(Output Gate):决定当前细胞状态有多少输出到下一个单元。

每个LSTM单元包含一个细胞状态(Cell State),用于存储长期信息,通过这些门控机制来更新和维护细胞状态。

数学表达

  1. 遗忘门:决定需要遗忘的细胞状态部分。 eq?f_t%20%3D%20%5Csigma%28W_f%20%5Ccdot%20%5Bh_%7Bt-1%7D%2C%20x_t%5D%20+%20b_f%29

  2. 输入门:决定需要存储的新信息。

                        eq?i_t%20%3D%20%5Csigma%28W_i%20%5Ccdot%20%5Bh_%7Bt-1%7D%2C%20x_t%5D%20+%20b_i%29 

        ​​​​​​​        ​​​​​​​        eq?%5Ctilde%7BC%7D_t%20%3D%20%5Ctanh%28W_C%20%5Ccdot%20%5Bh_%7Bt-1%7D%2C%20x_t%5D%20+%20b_C%29

  1. 细胞状态更新:通过遗忘和新信息更新细胞状态。

                        eq?C_t%20%3D%20f_t%20*%20C_%7Bt-1%7D%20+%20i_t%20*%20%5Ctilde%7BC%7D_t

  1. 输出门:决定当前细胞状态输出多少。

                        eq?o_t%20%3D%20%5Csigma%28W_o%20%5Ccdot%20%5Bh_%7Bt-1%7D%2C%20x_t%5D%20+%20b_o%29

                       eq?h_t%20%3D%20o_t%20*%20%5Ctanh%28C_t%29

其中,σ 是 sigmoid 激活函数,eq?%5Ctanh 是 tanh 激活函数,W 和 b 是权重和偏置参数。

适用情况

LSTM网络特别适用于以下情况:

  1. 序列预测问题:如时间序列预测、天气预测、股票价格预测等。
  2. 自然语言处理(NLP):如文本生成、机器翻译、情感分析等。
  3. 语音识别:如语音到文本的转换。
  4. 视频处理:如视频分类、行为识别等。

LSTM适用于任何需要捕捉长时间依赖关系的任务,是解决传统RNN无法处理长序列问题的有效方法。

Python示例代码

以下是一个使用LSTM进行时间序列预测的示例代码,利用Keras库进行实现:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import LSTM, Dense

# 生成样本数据
np.random.seed(0)
time = np.arange(0, 100, 0.1)
data = np.sin(time) + 0.1 * np.random.normal(size=len(time))

# 准备数据
data = data.reshape(-1, 1)
scaler = MinMaxScaler(feature_range=(0, 1))
data_scaled = scaler.fit_transform(data)

# 创建训练数据集
def create_dataset(data, look_back=1):
    X, Y = [], []
    for i in range(len(data)-look_back-1):
        a = data[i:(i+look_back), 0]
        X.append(a)
        Y.append(data[i + look_back, 0])
    return np.array(X), np.array(Y)

look_back = 10
X, Y = create_dataset(data_scaled, look_back)

# 重塑输入数据为 [样本数, 时间步长, 特征数]
X = X.reshape((X.shape[0], X.shape[1], 1))

# 创建LSTM模型
model = Sequential()
model.add(LSTM(50, input_shape=(look_back, 1)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')

# 训练模型
model.fit(X, Y, epochs=100, batch_size=1, verbose=2)

# 做出预测
train_predict = model.predict(X)
train_predict = scaler.inverse_transform(train_predict)
Y_actual = scaler.inverse_transform([Y])

# 绘制结果
plt.plot(Y_actual[0], label='Actual Data')
plt.plot(train_predict, label='Predicted Data')
plt.legend()
plt.show()

在上述代码中:

  1. 生成了一些带有噪声的正弦波数据,作为样本时间序列数据。
  2. 将数据标准化为0到1之间的值。
  3. 创建训练数据集,其中 look_back 参数指定用多少个过去的时间步来预测当前时间步。
  4. 构建一个包含一个LSTM层和一个Dense层的序列模型。
  5. 训练模型并使用训练数据进行预测。
  6. 绘制实际数据和预测数据的比较图。

通过上述代码示例,可以看出如何利用LSTM模型进行时间序列预测,并且可以根据需要调整模型结构和参数来优化预测效果。

结论

长短期记忆网络(LSTM)是解决长序列数据中梯度消失和梯度爆炸问题的一种强大工具。其通过门控机制有效地控制信息流,从而捕捉长时间依赖关系。LSTM广泛应用于各种序列预测任务,自然语言处理和语音识别等领域。通过Python示例代码,可以直观地了解LSTM模型的实现过程和应用效果,为后续深入研究和应用提供基础。

 

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

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

相关文章

如何在基于滤波框架的绝对定位系统中融合相对观测

文章目录 1 LIO、VIO propagation来代替IMU propagation2 TRO paper: Stochastic Cloning Kalman filter【有待填坑】 以无人驾驶定位系统为例,融合gnss,imu,轮速,camera LaneMatch(frame to map),lidar scan match(fr…

Qgis 插件升级:3.28到3.34

1、下载 osgeo4w-setup 安装包 下载 获取 osgeo4w-setup.exe 的安装软件,每次下一步就可以了,安装位置可以自己调整 osgeo4w:https://download.osgeo.org/osgeo4w/osgeo4w-setup.exe 2、安装3.34 开发包 搜索qigs,将 desktop,…

开始使用OKR创建注重结果的文化

亚马逊对客户很痴迷。Facebook 行动迅速。成功企业的文化是传说中的东西,而且是正确的。正如管理顾问的名言:文化把战略当早餐吃。 无论行业或规模如何,文化的主要目标是激发企业获胜所需的行为。越来越多的成功要求企业关注结果而非任务&am…

Kafka的入门及简单使用

文章目录 前言一、Kafka 的基本架构?1. Producer(生产者)2. Broker(代理/服务器)3. Consumer(消费者)4. Consumer Group(消费者组)5. Topic(主题)…

docker前端部署

挂载,把自己的目录位置,挂载到容器内的HTML

万亿赛道!AI 大模型典型应用深度分析 2024

大模型由于其强大的自然语言与多模态信息处理能力,可以应对不同语义粒度下的任务,进行复杂的逻辑推理,还具有超强的迁移学习和少样本学习能力, 可以快速掌握新的任务, 实现对不同领域、不同数据模式的适配,这些特点使得大模型较容易的赋能其他…

吴恩达机器学习C1W2Lab05-使用Scikit-Learn进行线性回归

前言 有一个开源的、商业上可用的机器学习工具包,叫做scikit-learn。这个工具包包含了你将在本课程中使用的许多算法的实现。 目标 在本实验中,你将: 利用scikit-learn实现使用梯度下降的线性回归 工具 您将使用scikit-learn中的函数以及matplotli…

付费进群系统源码原版最新修复全开源版

付费进群,和平时所见到的别人拉你进群是不一样的,付费进群需要先缴费以后,才会看到群的二维码,扫码进群或者是长按二维码图片识别进群,付费进群这个功能广泛应用于拼多多的砍价群,活动的助力群,…

Chapter 21 深入理解JSON

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能! 文章目录 前言一、JSON数据格式1. 什么是JSON?2. JSON数据的格式 二、JSON格式数据转化三、格式化JSON数据的在线工具 前言 在当今数据驱动的世界中,JSON&…

【大模型系列篇】Vanna-ai基于检索增强(RAG)的sql生成框架

简介 Vanna是基于检索增强(RAG)的sql生成框架 Vanna 使用一种称为 LLM(大型语言模型)的生成式人工智能。简而言之,这些模型是在大量数据(包括一堆在线可用的 SQL 查询)上进行训练的,并通过预测响应提示中最…

中间件安全:Nginx 解析漏洞测试.

中间件安全:Nginx 解析漏洞测试. Nginx 是一个高性能的 HTTP和 反向代理服务器,Nginx 解析漏洞是一个由于配置不当导致的安全问题,它不依赖于Nginx或PHP的特定版本,而是由于用户配置错误造成的。这个漏洞允许攻击者上传看似无害的…

通俗易懂,车载显示屏简单介绍!

2024年后,小汽车产量的年增长率预计将在1%至3%之间 2023年在COVID完全解封后,全球汽车销售数量提升至8千8百万台车。2024预估微幅增加到 9000万辆, 自2024起,年成长率预期将放缓至3%以下。全球汽车主要销售前三大市场 (比较2022年…

为什么阿里开发手册不建议使用Date类?

在日常编码中,基本上99%的项目都会有一个DateUtil工具类,而时间工具类里用的最多的就是java.util.Date。 大家都这么写,这还能有问题?? 当你的“默认常识”出现问题,这个打击,就是毁灭性的。 …

BUG解决(vue3+echart报错):Cannot read properties of undefined (reading ‘type‘)

这是 vue3echart5 遇到的报错:Cannot read properties of undefined (reading ‘type‘) 这个问题需要搞清楚两个关键方法: toRaw: 作用:将一个由reactive生成的响应式对象转为普通对象。 使用场景: 用于读取响应式…

idea2023 总报Low memory

idea2023 总报Low memory 问题背景问题处理 问题背景 在日常开发中,使用idea2023开发工具,开发过程中总会遇到idea提示Low memory的情况,并且每当提示出现的时候,整个idea页面便什么也不能操作了,如何处理这个情况呢&…

AI测试:人工智能模型的核心测试指标,分类判别、目标检测、图像分割、定量计算分别有哪些指标?

在前面的人工智能测试技术系列文章中,我们详细介绍了人工智能测试的技术方法和实践流程。在了解人工智能测试方法后,我们需要进一步学习和研究如何衡量这些方法的有效性,即人工智能模型测试指标的选择。测试指标的选择主要取决于模型的类型和…

借助大语言模型快速升级你的 Java 应用程序

大家都知道我爱小 Q。在我“转码”的征程中,它就像上帝之手,在我本该枯燥漫长的学习进程中拉满快进条。 不仅是我,最近 Amazon Q Developer 还帮助 Amazon 一个由 5 人组成的团队在短短两天内将 1,000 多个生产应用程序从 Java 8 升级到 Jav…

Spring Cloud 组件

1.eureka注册中心原理简述 1.服务注册: Eureka Client 会通过发送rest请求的方式向eureka服务端注册自身元数据:ip地址,端口,运行状况等信息,服务端会把注册信息存储在一个双层map中。 Eureka 的数据存储分了两层:数据存储层和缓存层。 Eureka Client 在拉取服务信息…

【STM32嵌入式系统设计与开发拓展】——13_PWM脉宽

目录 1、什么是PWM?用来做什么的?PWM(Pulse Width Modulation)脉冲宽度调制常见用到 PWM 的情况: 2、什么是输出比较?输出比较模式![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/42434920ca0940b1b1083215…

vue el-input 输入框下拉显示匹配数据

1、效果图: 2、需求&实现: 输入条件 下面匹配查询到的数据有多少个 需要调用后端接口展示,后端查询到之后返回条数 前端展示 3、具体代码实现: html: 图片需要自己根据实际情况增加 // 查询 重置 筛选 本文章…