LSTM模型预测新冠

article/2025/10/2 13:04:04

LSTM是RNN的改进型,传统RNN模型会随着时间区间的增长,对早期的因素的权重越来越低,有可能会损失重要数据。而LSTM模型通过遗忘门、输入门、输出门三个逻辑,来筛选和保留数据。
原理详解可以参考如何从RNN起步,一步一步通俗理解LSTM这个博主讲的非常通俗易懂,本文主要是项目实操。

实验环境

Windows11、python3.8、Keras框架、Tensorflow

实验目的

使用新冠疫情历史每日新增感染人数数据训练LSTM模型,然后用此模型预测未来21天每日新增感染人数,这里将对数据集进行一阶差分以保证数据平稳性(根据数据具体情况处理)

实验数据介绍在这里插入图片描述

数据归一化

为了加快模型收敛速度,这里将对实验数据进行归一化,本文使用sklearn库中的MinMaxScaler方法,将实验数据压缩到0到1之间

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
dataset_sc = scaler.fit_transform(temp)
#dataset_sc为归一化后的数据,temp为原始数据

制作时间滑动窗口

由于LSTM模型输入数据格式的要求,使用LSTM模型需要制作时间滑动窗口,如下图

在这里插入图片描述
上图即使一个时间窗口,含义为用前10天的历史数据预测后一天的值,而预测值作为验证数据,用以计算预测值与真实值的误差。
但实际上我们不止11个数据,我们有上百个数据,所以得让时间窗口滑动起来,如下图所示
在这里插入图片描述
时间滑动窗口制作代码如下

#dataset为数据集
#timestep为准备使用的历史数据的步长
#dataX为时间窗口的输入值
#dataY为时间窗口的预测值(真实值)
def create_dataset(dataset, timestep ):dataX, dataY = [], []for i in range(len(dataset)-timestep -1):a = dataset[i:(i+timestep )]dataX.append(a)dataY.append(dataset[i + timestep])return np.array(dataX),np.array(dataY)
timestep  = 10
trainX1,trainY1  = create_dataset(dataset_sc,timestep )
#把输入值的列表变换为符合LSTM输入格式的形式
trainX = np.reshape(trainX1, (trainX1.shape[0], trainX1.shape[1], 1))

构建模型并训练

本文使用单层LSTM层,并加上一层Dropout层防止过拟合。使用MSE作为损失函数,MAPE作为评价指标,模型构建代码如下

from keras.models import Sequential
from keras.layers import LSTM,Dense,Dropout
import tensorflow as tf
from sklearn import metricsunits =30#LSTM层单元数
rate=0.3#Dropout损失率
epochs=590
batch_size=64
optimizer=tf.keras.optimizers.Adam(learning_rate=0.01)#使用Adam优化器
model = Sequential()#序贯模型
model.add(LSTM(units = units,activation='tanh', input_shape = (None,1)))
model.add(Dropout(rate=rate))
model.add(Dense(units = 1,activation='linear'))#采用linear激活函数
model.compile(loss='mean_squared_error', optimizer=optimizer,metrics='mape')
model.fit(trainX, trainY1, epochs=epochs, batch_size=batch_size, verbose=1)#训练

对训练结果和预测结果进行可视化

train_pre=model.predict(trainX)
plt.figure(figsize=(15, 8))
train_pre=scaler.inverse_transform(train_pre)#反归一化
trainY1_pre=scaler.inverse_transform(trainY1)#反归一化
plt.plot(range(496),trainY1_pre,range(496),train_pre)
plt.legend(['true','pre'])

训练数据集的预测结果如下图
在这里插入图片描述

截取前100个数据进行放大观察
在这里插入图片描述

预测未来

首先我们要知道,这个时间窗口只能往后预测一个值,但是本文的目的是预测未来21天的值。目前有多种方法,一种是seq2seq,顾名思义直接用一段序列预测下一段序列,但是本文采用迭代预测法,即将预测出来的值,又作为下一个时间窗口的输入值,以此来迭代预测,如下图所示
在这里插入图片描述
代码如下:

#测试集
test_data=diff2[-timestep-pre_day:-pre_day]#用于预测第一天
test_data=np.array(test_data)#转化为数组
test_data = test_data.astype('float32')#转化为浮点数
li_test=list(test_data.reshape(timestep))#转化为list
for i in range(pre_day):temp=np.array(li_test[-timestep:]).reshape(timestep,1)#取列表最后timestep个值输入test_data2 = scaler.fit_transform(temp)#归一化test_data3=test_data2.reshape(1,timestep,1)#转化为LSTM需要的输入格式re1=model.predict(test_data3)#预测结果re2=scaler.inverse_transform(re1)#反归一化li_test.append(float(re2))#将预测值转化为float添加的列表末尾

这段代码因为涉及到数据类型的转化,可能比较难以理解,如有不懂,可在评论区留言。

测试集结果如下
在这里插入图片描述
由于模型参数没有讨论,所以看起来预测结果比较差,但通过调参后(本文采用网格搜索),结果会好很多

实验结果

最后通过调参调整模型,并对结果进行反差分,得到的未来21天每日新增感染人数预测值与真实值结果如下图:
在这里插入图片描述
正方形虚线为真实值,三角形实线为预测值


http://chatgpt.dhexx.cn/article/oFnIFUNH.shtml

相关文章

LSTM模型结构讲解

人类并不是每时每刻都从一片空白的大脑开始他们的思考。在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义。我们不会将所有的东西都全部丢弃,然后用空白的大脑进行思考。我们的思想拥有持久性。 传统的神经网络…

LSTM 模型实践一

简单介绍 原因:普通的RNN(Recurrent Neural Network)对于长期依赖问题效果比较差,当序列本身比较长时,神经网络模型的训练是采用backward进行,在梯度链式法则中容易出现梯度消失和梯度爆炸的问题。 解决&…

理解LSTM模型

写在前面:这是翻译自colah的一篇博客,原文关于LSTM神经网络模型的理解写的非常直观、简单易懂,所以翻译过来帮助大家学习理解LSTM模型。 当然我不是按照原文一字不落的翻译,而是摘出其中对模型理解最有帮助的部分,然后…

LSTM模型预测时间序列(快速上手)

写在前面 LSTM模型的一个常见用途是对长时间序列数据进行学习预测,例如得到了某商品前一年的日销量数据,我们可以用LSTM模型来预测未来一段时间内该商品的销量。但对于不熟悉神经网络或者对没有了解过RNN模型的人来说,想要看懂LSTM模型的原理…

基于优化LSTM 模型的股票预测

LSTM自诞生以来,便以其在处理时间序列方面的优越性能在预测回归,语音翻译等领域广受青睐。今天,主要研究的是通过对LSTM模型的优化来实现股票预测。其实,关于股票预测,LSTM模型已经表现的相当成熟,然而&…

【机器学习】LSTM模型原理

文章目录 1. 序言2. RNN的基本概念与网络结构2.1 概念2.2 结构2.3 要素 3. LSTM的基本概念与网络结构3.1 概念3.2 结构3.3 要素 4. LSTM网络结构的说明5. 补充 1. 序言 临渊羡鱼不如归而结网 学习的目的是为了应用 2. RNN的基本概念与网络结构 LSTM是在RNN的基础上演进而来…

LSTM模型

LSTM比RNN复杂很多,RNN只有一个参数矩阵A,LSTM有4个(遗忘门,输入门,更新值,输出门) LSTM有一个非常重要的传输带Ct,过去的信息通过这个传输带送给下一时刻,不会发生太大变…

时间序列预测——LSTM模型(附代码实现)

目录 模型原理 模型实现 导入所需要的库 设置随机数种子 导入数据集 打印前五行数据进行查看 数据处理 归一化处理 查看归一化处理后的数据 将时间序列转换为监督学习问题 打印数据前五行 划分训练集和测试集 查看划分后的数据维度 搭建LSTM模型 得到损失图 模型…

phpstorm汉化操作

问题描述:如何进行phpstorm的汉化(原始为英文) 解决办法: 1.下载汉化包—resources_cn; 2.将汉化包添加到phpstorm文件夹下的lib文件夹内(其中的resources_en可以不删除); 3.重启Ph…

php 教程 phpstorm

目录 php开发流程 php 编辑工具 phpstudy phpstorm如何配置php环境 php 语言 什么是URI URL和URI差别: 一、HTTP和HTTPS的基本概念 经典类型和自定义 实现本机域映射​ php开发流程 1、下载php语言包 php作为一门语言,本身可以是一个纯绿色版的…

【PHP】Phpstorm环境配置与应用

一. Phpstorm环境配置 (1)点击左上端File,选择下拉框中的setting,进入环境配置页面,如下图 (2)如下图点击1处,选中下拉框中的Deployment,Type(图示2处),下拉框中选择Local or mounted folder …

PHP开发工具PhpStorm v2022.3——完全支持PHP 8.2

PhpStorm是一个轻量级且便捷的PHP IDE,其旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查。可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化debug功能。 PhpStorm v20…

phpstorm10.0.3汉化方法:

PhpStorm10.0.3汉化方法: 1、安装原版PhpStorm10.0.3,在打开最新的PhpStorm10汉化包下载地址: http://pan.baidu.com/s/1bouoyF9 2、双击用压缩软件打开resources_cn.jar(注意是打开而不是解压出来),将下载的汉化包…

PHPSTORM 中文版/汉化 即常用快捷键和配置

PHPStorm配置和快捷键大全(最新版)支持Win和Mac http://blog.csdn.net/fenglailea/article/details/53350080 推荐 1.汉化/中文版 使用的是开源的,翻译的还好,因为是开源,有些人不自觉,在翻译过程中加入广告 开源汉化地址&…

phpstorm10安装并汉化

一、下载phpstorm 下载地址:https://pan.baidu.com/s/1R64ZROVP1ljGbYfCwWjwxA 二、一直点击下一步安装即可 注意:第3步的时候选择一下支持的后缀 三、安装完毕,进行汉化 1、来到安装目录,PhpStorm 10.0.3\lib 目录下 2、…

PhpStorm 中文设置教程

本文仅供学习交流使用,如侵立删!demo下载见文末 Pycharm中文设置教程 1.首先打开PhpStorm ,点击file-settings.找到plugins,搜索Marketplace,然后搜索chinese。 2.找到之后直接点击安装. 3.安装完成之后点击Restart。…

PHPStorm运行PHP代码(新手教程)

PHPStorm是流行对PHP及前端开发IDE,在开发者初次使用写PHP代码时该怎么用呢~ 1、Create New Project 2、选择PHP Empty Project,并新建一个空目录(名字建议为英文,目录不要放在C盘!!!&#xff…

PHP教程二:开发工具 phpstorm 的下载、安装与激活

接着上一章节,我们继续开发工具的安装 phpstorm 的概括:PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检…

下载phpstorm2021汉化包

网址 网址:https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack---- 点安装到phpstorm 打开phpstorm2021版本 点file-------seeting-------k~(省略了)-----搜索chinese--------最后点安装就可以了。

phpstorm官方汉化包

注意:这个汉化包是官方出品的,并不是网友做的,所以有很强的兼容性不会出现各种乱七八糟bug以及汉化不完全的现象 先一睹为快 我们可以看到全都有翻译 以前的我还觉得那么多选项和按钮都不敢乱点,或者点之前都要百度一下英文 现在可以随便…