时间序列预测 —— TCN模型

news2025/2/4 11:04:16

时间序列预测 —— TCN模型

卷积神经网络(Convolutional Neural Network,CNN)在图像处理等领域取得了显著的成就,一般认为在处理时序数据上不如RNN模型,而TCN(Temporal Convolutional Network)模型是一种基于卷积神经网络的时间序列预测模型,具有一定的优势。本文将介绍TCN模型的理论基础、公式推导、优缺点,并通过Python实现TCN的单步预测和多步预测,最后对TCN模型进行总结。

1. TCN模型理论及公式

TCN

1.1 TCN模型结构

TCN模型主要包含卷积层和残差块。卷积层用于提取序列中的局部特征,而残差块有助于捕捉序列中的长期依赖关系。TCN的典型结构如下:

Input -> [Conv1D] -> [Residual Block] x N -> [Output Layer]

其中,[Conv1D] 表示一维卷积层,[Residual Block] 表示残差块,N 表示残差块的堆叠次数。

1.2 卷积操作

TCN模型的卷积操作采用了膨胀卷积(Dilated Convolution),膨胀卷积通过在卷积核之间插入零元素来扩大感受野。膨胀卷积的数学表达式为:

y [ t ] = ∑ k = 0 K − 1 w [ k ] ⋅ x [ t − d ⋅ k ] y[t] = \sum_{k=0}^{K-1} w[k] \cdot x[t - d \cdot k] y[t]=k=0K1w[k]x[tdk]

其中, y [ t ] y[t] y[t] 是卷积操作的输出, w [ k ] w[k] w[k] 是卷积核的权重, x [ t − d ⋅ k ] x[t - d \cdot k] x[tdk] 是输入序列的元素, d d d 是膨胀率。

1.3 残差块

TCN模型的残差块由两个卷积层和一个残差连接组成。残差块的计算过程如下:

  1. 输入 x x x 经过一个膨胀卷积层,得到输出 y y y
  2. y y y 与输入 x x x 相加,得到残差块的输出。

残差块的数学表达式为:

Output = x + Conv1D ( x ) \text{Output} = x + \text{Conv1D}(x) Output=x+Conv1D(x)

1.4 TCN模型的预测

TCN模型的预测过程包括多个残差块的堆叠,以及最后的输出层。整个模型的预测过程可以用以下公式表示:

Output = Output Layer ( Residual Block ( Residual Block ( … ( Residual Block ( Input ) ) … ) ) ) \text{Output} = \text{Output Layer}(\text{Residual Block}(\text{Residual Block}(\ldots(\text{Residual Block}(\text{Input}))\ldots))) Output=Output Layer(Residual Block(Residual Block((Residual Block(Input)))))

2. TCN模型优缺点

2.1 优点

  • TCN模型能够捕捉序列中的长期依赖关系,适用于时间序列数据。
  • 模型结构相对简单,易于理解和调整。

2.2 缺点

  • TCN模型在某些场景下可能对序列中的短期模式抽取效果不如LSTM等模型。

3. TCN模型与LSTM、GRU的区别

TCN模型、LSTM(Long Short-Term Memory)、GRU(Gated Recurrent Unit)都是用于时间序列预测的模型,它们之间有一些区别:

  • 结构差异: TCN主要由卷积层和残差块组成,具有较为简单的结构;LSTM和GRU是循环神经网络(Recurrent Neural Network,RNN)的变种,具有包含循环单元的结构。
  • 捕捉依赖关系的方式: TCN通过膨胀卷积和残差块来捕捉序列中的依赖关系;LSTM和GRU通过内部的门控机制(门控循环单元)来控制信息的传递和遗忘,从而捕捉长期和短期依赖关系。

4. Python实现TCN的单步预测和多步预测

以下是使用TensorFlow中Keras库实现TCN模型的单步预测和多步预测的代码。

# 导入必要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
from keras.models import Sequential
from keras.layers import Input, Dense
from tcn import TCN, tcn_full_summary

# 生成示例数据
def generate_data():
    t = np.arange(0, 100, 0.1)
    data = np.sin(t) + 0.1 * np.random.randn(len(t))
    return data

# 数据预处理
def preprocess_data(data, look_back=10):
    scaler = MinMaxScaler(feature_range=(0, 1))
    data = scaler.fit_transform(data.reshape(-1, 1)).flatten()

    X, y = [], []
    for i in range(len(data) - look_back):
        X.append(data[i:(i + look_back)])
        y.append(data[i + look_back])

    return np.array(X), np.array(y)

# 构建 TCN 模型
def build_tcn_model(look_back, filters=64, kernel_size=2, dilations=[1, 2, 4, 8, 16]):
    model = Sequential()
    model.add(Input(shape=(look_back, 1)))
    model.add(TCN(nb_filters=filters, kernel_size=kernel_size, dilations=dilations, use_skip_connections=True, return_sequences=False, activation='tanh'))
    model.add(Dense(units=1, activation='linear'))
    model.compile(optimizer='adam', loss='mean_squared_error')
    tcn_full_summary(model)
    return model

# 单步预测
def tcn_single_step_predict(model, X):
    return model.predict(X.reshape(1, -1, 1))[0, 0]

# 多步预测
def tcn_multi_step_predict(model, X, n_steps):
    predictions = []
    for _ in range(n_steps):
        prediction = tcn_single_step_predict(model, X)
        predictions.append(prediction)
        X = np.append(X[0, 1:], prediction).reshape(1, -1, 1)
    return predictions

# 主程序
data = generate_data()
look_back = 10
X, y = preprocess_data(data, look_back)

# 划分训练集和测试集
train_size = int(len(X) * 0.8)
X_train, y_train = X[:train_size], y[:train_size]
X_test, y_test = X[train_size:], y[train_size:]

# 调整输入形状
X_train = X_train.reshape(X_train.shape[0], look_back, 1)
X_test = X_test.reshape(X_test.shape[0], look_back, 1)

# 构建和训练 TCN 模型
tcn_model = build_tcn_model(look_back)
tcn_model.fit(X_train, y_train, epochs=50, batch_size=1, verbose=2)

# 单步预测
single_step_prediction = tcn_single_step_predict(tcn_model, X_test[0])

# 多步预测
n_steps = 10
multi_step_predictions = tcn_multi_step_predict(tcn_model, X_test[0], n_steps)

# 可视化结果
plt.plot(data, label='True Data')
plt.plot([None] * len(X) + multi_step_predictions, label='TCN Predictions')
plt.legend()
plt.show()

上述代码实现了使用TCN模型进行时间序列的单步预测和多步预测。在单步预测中,模型使用最后一部分序列进行预测。在多步预测中,模型使用前面预测的结果作为输入来进行多步预测。

5. 总结

本文介绍了TCN模型的理论基础、公式推导、优缺点,并通过Python使用Keras库实现了TCN的单步预测和多步预测。TCN模型在时间序列预测任务中具有一定的优势,特别适用于捕捉序列中的长期依赖关系。然而,在实际应用中,不同任务可能需要根据具体情况选择合适的模型。希望通过本文的介绍和示例代码,读者能够更深入理解TCN模型及其在时间序列预测中的应用。

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

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

相关文章

基于python+django,我开发了一款药店信息管理系统

功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 功能包括:药品管理、分类管理、顾客管理、用户管理、日志管理、系统信息模块。 代码结构 server目录是后端代码web目录是前端代码 部署运行…

Camille-学习笔记-web基础知识

web基础1.系统架构 B/S :Browser/Server 网站 界面层(UI) 业务逻辑层(业务) 数据访问层(数据库) 静态网页:和服务器没有数据交互 动态网页:网页数据可以和服务器进行数据交互 URL…

【数据结构】(四)图

目录 言 图的入门及无向图的实现 1. 图的相关概念 2. 图的相关术语 3. 图的存储结构 3.1 邻接矩阵 3.2 邻接表 3.3 邻接表实现 图的搜索算法 1. 深度优先搜索 1.1 搜索思路 1.2 代码实现 2. 广度优先搜索 2.1 搜索思路 2.2 代码实现 后记 言 数据结构分为逻辑结…

vscode 如何修改c/c++格式化风格,大括号不换行

在Visual Studio Code(VSCode)中,若要修改C代码格式化的风格以实现大括号不换行,通常会借助于插件C/C扩展中的ClangFormat配置。以下是具体的步骤: 确保已安装了C/C扩展: 打开VSCode的扩展市场(…

【飞书小技巧】——飞书文档转 markdown 详细教程

飞书文档转 markdown 详细教程 基于项目:https://github.com/Wsine/feishu2md 如何使用 在线版 访问 https://feishu2md.onrender.com/ 粘贴文档链接即可,文档链接可以通过 分享 > 开启链接分享 > 复制链接 获得。 点击下载之后,会提示 Please wait. It ma…

回归预测 | Matlab基于POA-LSSVM鹈鹕算法算法优化最小二乘支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于POA-LSSVM鹈鹕算法算法优化最小二乘支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于POA-LSSVM鹈鹕算法算法优化最小二乘支持向量机的数据多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab基于POA-LSSVM…

回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测

回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测 目录 回归预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-LSTM【24年新算…

西圣Olite开放式耳机持续100+天霸榜:品质优势再掀数码狂潮

随着开放式耳机的市场竞争加剧,用户对耳机的音质和配置要求越来越高。而西圣开放式耳机的不断推陈出新,正是对客户需求的完美回应!西圣开放式耳机,在现在鱼龙混杂的市场上,能够获得着卓越的研发成果并且还在不断的追求…

从源码角度透视QTcpServer:解构QTcpServer的底层原理与技术细节

深入了解QTcpServer的底层原理和技术细节 一、背景二、QTcpServer的基本原理2.1、TCP协议简介2.2、QTcpServer的概念 三、QTcpServer源码解析3.1、QTcpServer的构造函数3.2、调用listen函数启动tcpserver3.3、QSocketNotifier的实现 总结 一、背景 QTcpServer是Qt网络模块中的…

CSS3的新盒子,选择器等

新增的选择器: 属性选择器: 结构伪类选择选器: nth较为重要:但公式中的字母必须是n 区别: nth-child: 认为父类下的都是儿子,此时就需要有对应的需要,如下,此时即使排1&…

DataFunSummit:2023年数据科学在线峰会:核心内容与学习收获(附大会核心PPT下载)

随着大数据时代的来临,数据科学已经在全球范围内成为了一门炙手可热的前沿学科。 数据会说谎?如何正确的挖掘并使用数据?前沿的科学实验如何做?实验又是如何欺骗你的?数据中台如何发挥功效?用户增长有捷径…

win10重装Ubuntu22.04安装报错复盘

目录 一:补充启动盘制作 二:错误信息[0xC0030570] The file or directory is corrupted and unreadable. 三:ubuntu重装步骤: 四:磁盘冗余阵列 五:尝试将SCS11(2,0.0), 第1分区(sda)设备的一个vfat文…

仰暮计划|“从米票、肉票、糖果票到肥皂票、煤票、棉花票等,生活里头的方方面面都能用粮票买到”

口述人:牛翠英(女) 整理人:霍芝冉 口述人基本信息:现68岁,河南省安阳市北关区霍家村人,现居河南安阳市区。 奶奶一生辛劳,操持家务;亲眼见证了时代变迁,社会发展,…

【FPGA】高云FPGA之IP核的使用->PLL锁相环

FPGA开发流程 1、设计定义2、设计输入3、分析和综合4、功能仿真5、布局布线6、时序仿真7、IO分配以及配置文件(bit流文件)的生成8、配置(烧录)FPGA9、在线调试 1、设计定义 使用高云内置IP核实现多路不同时钟输出 输入时钟50M由晶…

2024年美赛C题:Momentum in Tennis思路解析

Problem C: Momentum in Tennis 网球运动中的动力 【扫描下方二维码加入群聊,了解更多思路~】 中文题目: 在2023年温布尔登男子单打决赛中,20岁的西班牙新星卡洛斯阿尔卡拉斯击败了36岁的诺瓦克德约科维奇。这是德约科维奇自2013年以来在温布…

大数据StarRocks(九):资源隔离实战

前言 自 2.2 版本起,StarRocks 支持资源组管理,集群可以通过设置资源组(Resource Group)的方式限制查询对资源的消耗,实现多租户之间的资源隔离与合理利用。在 2.3 版本中,StarRocks 支持限制大查询&#…

如何使用 Supabase Auth 在您的应用程序中设置身份验证

在本文中,您将学习基本的关键概念,这些概念将帮助您掌握身份验证和授权的工作原理。 您将首先了解什么是身份验证和授权,然后了解如何使用 Supabase auth 在应用程序中实现身份验证。 (本文内容参考:java567.com&…

2020年CSP-J认证 CCF非专业级别软件能力认证第一轮真题--完善程序题

2020 CCF认证第一轮(CSP-J)真题 三、完善程序题 第一题 质因数分解 给出正整数n,请输出将n质因数分解的结果,结果从小 到大输出。 例如:输入n120程序应该输出2 2 2 3 5,表示1202 X 2 X 2 X 3 X 5输入保2≤n≤10^9提…

PostGIS空间数据库之空间数据融合实践

目录 前言 一、ST_Union()简介 1、方法说明 2、参数介绍 二、ST_Collect()简介 1、方法说明 2、参数介绍 3、两者区别 三、实际案例实践 1、不重叠融合 2、空间重叠融合 总结 前言 众所周知,熟悉GIS桌面软件的同学一定都知道,想要对空…

跟着pink老师前端入门教程-day13

品优购案例 一、品优购项目规划 1. 品优购项目整体介绍 项目名称:品优购 项目描述:品优购是一个电商网站,我们要完成 PC 端首页、列表页、注册页面的制作 2. 品优购项目学习目的 1. 电商类网站比较综合,里面需要大量的布…