【Python时序预测系列】基于时域卷积网络TCN实现单变量时间序列预测(源码)

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

一、引言

TCN(Temporal Convolutional Networks)是一种用于时间序列数据建模的深度学习架构。与传统的循环神经网络(RNN)和长短期记忆网络(LSTM)不同,TCN利用卷积操作来捕捉时间序列数据中的长期依赖关系。以下是TCN的一些关键特点:

  1. 平移不变性:TCN利用卷积操作来学习时间序列数据中的模式和特征,这使得模型具有平移不变性,即模型可以在不同时间步共享相同的权重,从而更好地捕捉时间序列中的重要模式。

  2. 扩展感受野:通过堆叠多个卷积层,TCN可以捕获较长的时间依赖关系,而不会受到梯度消失或梯度爆炸的影响。

  3. 并行性:相比于RNN和LSTM,TCN可以更高效地并行处理时间序列数据,这使得训练速度更快。

  4. 稳定性:由于TCN不涉及循环结构,因此不存在梯度消失或梯度爆炸的问题,模型更加稳定。

TCN已被广泛用于时间序列预测、自然语言处理中的序列建模等领域,并在某些任务上取得了很好的效果。通过合理设计网络结构和调整超参数,TCN可以适应不同类型的时间序列数据,并且在一些情况下能够超越传统的RNN和LSTM模型。本文简述一下基于时域卷积网络TCN实现单变量时间序列预测的过程。

二、实现过程

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_sliding_windows(data, window_size):pass# 定义滑动窗口大小
window_size = 12# 创建滑动窗口数据集
X_train, Y_train = create_sliding_windows(train_data_scaler, window_size)
X_test, Y_test = create_sliding_windows(test_data_scaler, window_size)# 将数据集转换为 LSTM 模型所需的形状(样本数,时间步长,特征数)
X_train = np.reshape(X_train, (X_train.shape[0], window_size, 1))
X_test = np.reshape(X_test, (X_test.shape[0], window_size, 1))

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

# 初始化顺序模型
model = Sequential()
model.add(TCN(...))
# 定义线性的输出层
model.add(...)
# 模型编译:定义优化算法adam, 目标函数均方根MSE
model.compile(optimizer = 'adam', loss = 'mean_squared_error')
# 模型训练
history = model.fit(X_train, Y_train, epochs = 100, batch_size = 100, validation_split=0.001)
# 打印模型
model.summary()# 使用模型进行预测
train_predictions = model.predict(X_train)
test_predictions = model.predict(X_test)# 反归一化预测结果
train_predictions = scaler.inverse_transform(train_predictions)
test_predictions = scaler.inverse_transform(test_predictions)

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.hqwc.cn/news/573608.html

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

相关文章

java特殊文件——properties属性文件概述

前言: 整理下学习笔记,打好基础,daydayup!! properties properties是一个Map集合(键值对合集),但是一般不当作合集。而是用来代表属性文件,通过Properties读写属性文件里的内容 Properties调用方…

MySQL为什么会选错索引

在平时不知道一有没有遇到过这种情况,我明明创建了索引,但是MySQL为何不用索引呢?为何要进行全索引扫描呢? 一、对索引进行函数操作 假设现在维护了一个交易系统,其中交易记录表 tradelog 包含交易流水号(tradeid)、交…

[STM32] Keil 创建 HAL 库的工程模板

Keil 创建 HAL 库的工程模板 跟着100ASK_STM32F103_MINI用户手册V1.1.pdf的第7章步骤进行Keil工程的创建。 文章目录 1 创建相关文件夹2 创建“main.c/h”和“stm32f1xx_clk.c/h”3 复制CMSIS和HAL库4 创建新的Keil工程5 添加组文件夹和工程文件6 配置Keil设置 1 创建相关文件…

[激光原理与应用-77]:基于激光器加工板卡的二次开发软件的系统软硬件架构

目录 一、1个板卡、1个激光器、1个振镜的应用架构、1个工位 (1)PLC (2)MES (3)加工板卡 (4)激光加工板卡与激光器之间的转接卡 (5)DB25、DB15 &#x…

基于51单片机的厨房一氧化碳温湿度烟雾粉尘监测报警Proteus仿真

地址:https://pan.baidu.com/s/19tp61m5fOORP47RNh8TWGA 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectroni…

桶排序:原理、实现与应用

桶排序:原理、实现与应用 一、桶排序的基本原理二、桶排序的实现步骤三、桶排序的伪代码实现四、桶排序的C语言实现示例 在日常生活和工作中,排序是一个经常遇到的需求。无论是对一堆杂乱的文件进行整理,还是对一系列数据进行统计分析&#x…

基于深度学习的心律异常分类算法

基于深度学习的心律异常分类系统——算法设计 第一章 研究背景算法流程本文研究内容 第二章 心电信号分类理论基础心电信号产生机理MIT-BIH 心律失常数据库 第三章 心电信号预处理心电信号噪声来源与特点基线漂移工频干扰肌电干扰 心电信号读取与加噪基于小波阈值去噪技术的应用…

Wi-Fi 标准的演进

在数字时代的今天,Wi-Fi已经成为了我们生活中不可或缺的一部分,但这一无线通信技术的演进却是一个精彩而丰富的历程。从最初迈出的第一步,到如今的Wi-Fi 7高速数据传输,每一个Wi-Fi标准的诞生都伴随着无数创新和技术的突破。 802.…

《科学技术创新》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答: 问:《科学技术创新》期刊是哪个级别? 答:省级 主管单位:黑龙江省科学技术协会 主办单位:黑龙江省科普事业中心 问:《科学技术创新》期刊影响因子? 答:(2…

Mysql数据库:高级SQL语言详解

目录 前言 一、按关键字排序查询 1、单字段排序 1.1 按某一字段升序排序 1.2 按某一字段降序排序 1.3 结合where进行条件进行排序 2、多字段排序 2.1 按多字段升序排序 2.2 按多字段降序排序 2.3 案例操作 3、区间判断及查询不重复记录 3.1 区间判断 3.1.1 AND/OR…

Linux——磁盘与文件系统管理

目录 磁盘分区的表示 硬盘分区 分区类型 确认系统中的磁盘设备——fdisk 规划硬盘中的分区——fdisk 文件系统 文件系统类型: 在分区中创建文件系统——mkfs,mkswap 挂载文件系统 mount命令 umount命令 查看分区挂载情况 设置启动载入&…

振弦采集仪在预防地质灾害监测中的作用与应用前景

振弦采集仪在预防地质灾害监测中的作用与应用前景 振弦采集仪(String Vibrating Sensor,简称SVM)是一种用于地质灾害监测的重要仪器,它通过测量地面振动信号来预测和预警地质灾害的发生。SVM的作用在于提供实时、准确的地质灾害监…