【Python时序预测系列】基于CNN+Bi-LSTM实现单变量时间序列预测(案例+源码)

这是我的第309篇原创文章。

一、引言

基于CNN(卷积神经网络)和Bi-LSTM(双向长短期记忆网络)的单变量时间序列预测是一种结合空间特征提取和时间依赖建模的方法。以下是一个基于Python和TensorFlow/Keras实现的示例,展示了如何构建和训练这种混合模型来进行时间序列预测。

二、实现过程

2.1 读取数据集

# 读取数据集
data = pd.read_csv('data.csv')
# 将日期列转换为日期时间类型
data['Month'] = pd.to_datetime(data['Month'])
# 将日期列设置为索引
data.set_index('Month', inplace=True)

data:

图片

2.2 划分数据集

# 拆分数据集为训练集和测试集
train_size = int(len(data) * 0.8)
train_data = data[:train_size]
test_data = data[train_size:]# 绘制训练集和测试集的折线图
plt.figure(figsize=(10, 6))
plt.plot(train_data, label='Training Data')
plt.plot(test_data, label='Testing Data')
plt.xlabel('Year')
plt.ylabel('Passenger Count')
plt.title('International Airline Passengers - Training and Testing Data')
plt.legend()
plt.show()

共144条数据,8:2划分:训练集115,测试集29。

训练集和测试集:

图片

2.3 归一化

# 将数据归一化到 0~1 范围
scaler = MinMaxScaler()
train_data_scaler = scaler.fit_transform(train_data.values.reshape(-1, 1))
test_data_scaler = scaler.transform(test_data.values.reshape(-1, 1))

2.4 构造数据集

# 定义滑动窗口函数
def create_dataset(data, look_back=1):pass# 定义滑动窗口大小
window_size = 3
# 创建滑动窗口数据集
X_train, Y_train = create_dataset(train_data_scaler, look_back)
X_test, Y_test = create_dataset(test_data_scaler, look_back)

2.5 建立模拟合模型进行预测

# 构建模型
model = Sequential()
model.add(TimeDistributed(Conv1D(filters=64, kernel_size=1, activation='relu', input_shape=(None, X_train.shape[0],  X_train.shape[1],1))))
model.add(TimeDistributed(MaxPooling1D(pool_size=1)))
model.add(TimeDistributed(...))
model.add(Bidirectional(LSTM(4, activation='relu')))
model.add(Dense(1))my_model.compile(loss='mean_squared_error', optimizer='adam')
my_model.fit(X_train, Y_train, epochs=50, batch_size=1, verbose=2)
# 打印模型
model.summary()# 使用模型进行预测
train_predictions = model.predict(X_train)
test_predictions = model.predict(X_test)

test_predictions:

图片

2.6 预测效果展示

# 绘制测试集预测结果的折线图
plt.figure(figsize=(10, 6))
plt.plot(test_data, label='Actual')
plt.plot(list(test_data.index)[-len(test_predictions):], test_predictions, label='Predicted')
plt.xlabel('Month')
plt.ylabel('Passengers')
plt.title('Actual vs Predicted')
plt.legend()
plt.show()

测试集真实值与预测值:

图片

# 绘制原始数据、训练集预测结果和测试集预测结果的折线图
plt.figure(figsize=(10, 6))
plt.plot(data, label='Actual')
plt.plot(list(train_data.index)[look_back:train_size], train_predictions, label='Training Predictions')
plt.plot(list(test_data.index)[-(len(test_data)-look_back):], test_predictions, label='Testing Predictions')
plt.xlabel('Year')
plt.ylabel('Passenger Count')
plt.title('International Airline Passengers - Actual vs Predicted')
plt.legend()
plt.show()

原始数据、训练集预测结果和测试集预测结果:

图片

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

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

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

相关文章

C++ 高频面试题

C 初级面试题及其详细解答 1. 解释 C 中的基本数据类型。 解答: C 提供了几种基本数据类型,包括: int:整型,用于存储整数。float 和 double:浮点型,用于存储小数。char:字符型&am…

Android 强制使用移动网络访问接口

Android 强制使用移动网络访问接口_安卓连接wifi强制使用移动数据-CSDN博客 Android应用层实现恢复出厂设置功能_android7 intent 打开恢复出厂设置-CSDN博客

YOLOv8改进 | 主干网络| 可变形卷积网络C2f_DCN【CVPR2017】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录:《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容,内含各种Head检测头、损失函数Loss、B…

java SQL server 多实例的情况

而对于java,对付多个数据库实例就有些要注意的了: 首先,同样连接字符串上加上“\实例名”: jdbc:sqlserver://127.0.0.1\\mssqlserver2008;DatabaseNameLPT; 此处应去掉端口1433。因为连接数据库自命名实例的url中没有端口号1433…

SiLM585x系列SiLM5851NHCG-DG一款具有分离的管脚输出 单通道隔离驱动器 拥有强劲的驱动能力

SiLM585x系列SiLM5851NHCG-DG是一款单通道隔离驱动器,具有分离的管脚输出,提供3.0A源电流和6.0A灌电流。主动保护功能包括退饱和过流检测、UVLO、隔离故障报警和 2.5A 米勒钳位。输入侧电源的工作电压为3V至5.5V,输出侧电源的工作电压范围为1…

独孤思维:研发的新赚钱项目,活脱脱掉了几层皮

01 今天有个读者问我,xx项目,成功概率多少? 其实这和做这个项目,能赚多少钱,本质是一个问题。 即,有多大的确定性。 言外之意,没有确定性,不稳定,我就不做了。 可以…

一位软件测试工程师繁忙的一天

早晨:启动一天的工作 7:00 AM - 起床 早晨七点准时起床。洗漱、早餐后,检查了手机上的邮件和消息,了解今天的工作安排和优先事项。 8:00 AM - 前往公司 乘坐地铁前往公司。在地铁上,他习惯性地阅读一些技术博客,了解…

小柴冲刺嵌入式系统设计师系列总目录

工作两年 逐渐意识到基础知识的重要性✌️ 意识到掌握了这个证书好像就已经掌握了80%工作中用到的知识了。剩下的就在工作的实战中学习 来和小柴一起冲刺软考吧!加油😜 【小柴冲刺软考中级嵌入式系统设计师系列】总目录 前言 专栏目标:冲刺…

涵盖多项功能的文件外发系统,了解一下

伴随着业务范围的不断扩大,信息化的迅速发展,企业与客户、供应商等合作伙伴之间的文件交换也愈加频繁,尤其涉及到核心数据,像核心技术、设计图纸等敏感数据,对其的保护也是越发重视。文件外发系统,应运而生…

Linux基础 - RAID 与 LVM 磁盘阵列技术

目录 零. 简介 一. RAID 二. LVM 三. 总结 零. 简介 在 Linux 中,RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)和 LVM(Logical Volume Manager,逻辑卷管理器)是两种常用的…

机械继电器、固态继电器和模拟开关对比分析

1 结构 2 长期可靠性 与机械继电器相比,光继电器明显提高了可靠性,因为没有活动器件。 光继电器通过 LED 进行光学控制。通常情况下,此 LED 会随着时间的推移比开关本身更快地降级,具体取决于温度、正向电流、开关速度等。随着 LE…

群辉NAS使用Kodi影视墙

目录 一、KODI安装 二、修改UI语言 1、修改显示字体 2、修改语言为中文 四、添加媒体库 五、观看电影 五、高级设置 1、视图类型 2、修改点击播动作 五、补充 1、文件组织结构及命名 2、电影信息的刮削 (1)添加影片 (2)演员管理 (3)影片管理 (4)说明 K…

【面试题】消息中间件

目录 1.什么是消息中间件?它在分布式系统中的作用是什么?2.列举并简述几种常见的消息队列(MQ)产品,比如RabbitMQ, Kafka, ActiveMQ, RocketMQ等。3.描述一下点对点(PTP)和发布/订阅(…

基于opencv的图像拼接

利用Python的OpenCV库实现了简单的图像拼接,示例 1. 图像拼接的基本原理 图像拼接主要包括以下几个步骤: 特征检测与匹配:首先,需要在待拼接的图像之间找到匹配的关键点或特征。OpenCV提供了如SIFT、SURF、ORB等特征提取器以及…

嵌入式EMC之TVS管

整理一些网上摘抄的笔记: TVS管认识: TVS的Vc要比,DCDC的最大承受电压要小

Flexbox布局详解

Flexbox布局详解:现代CSS布局的利器 在现代Web开发中,布局是一个至关重要的部分。传统的布局方式,如浮动和定位,虽然可以实现复杂的布局,但往往需要大量的CSS代码,并且在维护和扩展时容易出现问题。Flexbo…

web前端大作业--美团外卖1

文章目录 概述代码截图代码链接 概述 web美团 登录和注册功能、页面展示。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><link rel"stylesheet" href&quo…

Vue组件生命周期深度剖析:从创建到销毁的八大钩子实战指南

系列文章目录 Vue核心指令解析&#xff1a;探索MVVM与数据操作之美 文章目录 系列文章目录前言一、Vue生命周期是什么&#xff1f;二、钩子函数讲解1. beforeCreate( 创建前 )2. created ( 创建后 &#xff09;3. beforeMount&#xff08;挂载前&#xff09;4. mounted&#xf…

Redis-数据类型-Geospatial(地理空间索引)

文章目录 1、查看redis是否启动2、通过客户端连接redis3、切换到db5数据库4、将地理位置信息&#xff08;经度和纬度&#xff09;添加到 Redis 的键&#xff08;key&#xff09;中4.1、添加大江商厦4.2、添加西部硅谷 5、升序返回有序集key&#xff0c;让分数一起和值返回的结果…

简约的服务器监控工具Ward

什么是 Ward &#xff1f; Ward 是一个简单简约的服务器监控工具。 Ward 支持自适应设计系统。此外&#xff0c;它还支持深色主题。它仅显示主要信息&#xff0c;如果您想查看漂亮的仪表板而不是查看一堆数字和图表&#xff0c;则可以使用它。 Ward 在所有流行的操作系统上都能…