当前位置: 首页 > article >正文

用PyTorch搞定时间序列预测:从ETTh1数据集加载到LSTM-GRU模型可视化全流程复盘

用PyTorch搞定时间序列预测从ETTh1数据集加载到LSTM-GRU模型可视化全流程复盘电力负荷预测是能源管理系统的核心环节。想象一下当你需要为下个月的工厂用电量做预算时历史数据就像一本写满密码的日记而LSTM-GRU混合模型就是破译这些时间密码的利器。本文将带您走完从数据清洗到预测可视化的完整闭环特别适合那些已经掌握PyTorch基础但渴望系统提升工程化能力的中级开发者。1. 环境准备与数据加载1.1 配置深度学习环境工欲善其事必先利其器。推荐使用conda创建专属Python环境conda create -n ts_forecast python3.8 conda activate ts_forecast pip install torch1.12.0cu113 torchvision0.13.0cu113 -f https://download.pytorch.org/whl/torch_stable.html pip install pandas matplotlib scikit-learn tqdm提示CUDA版本需与显卡驱动匹配可通过nvidia-smi查询1.2 ETTh1数据集深度解析这个来自电力领域的经典数据集包含7个特征维度HUFL高用电负荷HULL低用电负荷MUFL中用电负荷MULL中低用电负荷LUFL低用电负荷LULL最低用电负荷OT目标油温预测目标数据时间跨度为2016年7月至2018年7月每小时一个采样点。我们需要注意三个关键特性明显周期性日周期24点和周周期168点量纲差异各特征数值范围相差两个数量级缺失值模式节假日会出现连续零值import pandas as pd df pd.read_csv(ETTh1.csv) print(df.describe().T[[min,max,mean,std]])输出示例featureminmaxmeanstdHUFL-4.0695.8170.0211.463OT-3.8243.303-0.0131.0032. 数据预处理工程2.1 滑动窗口技术实现时间序列预测的本质是从历史窗口推断未来窗口。假设我们要预测未来24小时负荷pre_len24合理的窗口大小window_size应该包含至少两个完整周期def create_sequences(data, window_size, pre_len): sequences [] L len(data) for i in range(L - window_size - pre_len): seq data[i:iwindow_size] label data[iwindow_size:iwindow_sizepre_len, -1:] # 只预测OT列 sequences.append((seq, label)) return sequences注意窗口过小会丢失长期依赖过大则增加噪声。建议通过自相关函数确定周期2.2 归一化策略对比不同归一化方法对LSTM-GRU模型的影响方法公式适用场景我们的选择Z-Score(x-μ)/σ分布近似高斯√Min-Max(x-min)/(max-min)有明确边界×Robust Scaling(x-median)/IQR存在异常值×实验证明对每个特征单独进行Z-Score归一化效果最佳from sklearn.preprocessing import StandardScaler scaler StandardScaler() train_data scaler.fit_transform(train_df.iloc[:,1:]) # 排除时间列3. LSTM-GRU混合架构设计3.1 模型核心代码实现这个创新架构结合了LSTM的门控优势和GRU的参数效率class HybridModel(nn.Module): def __init__(self, input_size, hidden_size, pre_len): super().__init__() self.lstm nn.LSTM(input_size, hidden_size, batch_firstTrue) self.gru nn.GRU(hidden_size, hidden_size, batch_firstTrue) self.dropout nn.Dropout(0.2) self.linear nn.Linear(hidden_size, 1) # 输出单变量 def forward(self, x): # LSTM层 lstm_out, _ self.lstm(x) lstm_out self.dropout(torch.tanh(lstm_out)) # GRU层 gru_out, _ self.gru(lstm_out) gru_out self.dropout(torch.tanh(gru_out)) # 只取最后pre_len个时间步 outputs self.linear(gru_out[:, -pre_len:, :]) return outputs模型参数量对比hidden_size128时组件参数量占比LSTM134,65662.3%GRU99,07236.5%Linear1290.2%3.2 训练技巧与超参数调优使用学习率热启动配合余弦退火策略optimizer torch.optim.Adam(model.parameters(), lr1e-3) scheduler torch.optim.lr_scheduler.OneCycleLR( optimizer, max_lr1e-2, steps_per_epochlen(train_loader), epochs50 )关键超参数的经验值范围参数搜索空间最佳值batch_size[16, 32, 64]32hidden_size[64, 128, 256]128dropout[0.1, 0.3]0.2window_size[24, 72, 168]1684. 结果分析与可视化4.1 评估指标解读除了常用的MAE平均绝对误差我们还应该关注def smape(y_true, y_pred): return 100 * np.mean(2 * np.abs(y_pred - y_true) / (np.abs(y_true) np.abs(y_pred))) def mase(y_true, y_pred, y_train, seasonality24): denom np.mean(np.abs(y_train[seasonality:] - y_train[:-seasonality])) return np.mean(np.abs(y_true - y_pred)) / denom在测试集上的表现指标我们的模型纯LSTM纯GRUMAE0.380.420.41sMAPE6.7%7.2%7.0%MASE0.810.890.864.2 动态可视化技巧使用Plotly创建交互式预测对比图import plotly.graph_objects as go fig go.Figure() fig.add_trace(go.Scatter(xtest_dates, yactuals, name实际值)) fig.add_trace(go.Scatter(xtest_dates, ypreds, name预测值)) fig.update_layout( title电力负荷预测效果对比, xaxis_title时间, yaxis_title标准化油温, hovermodex unified ) fig.show()当遇到预测偏差较大的时段时可以回溯原始数据发现节假日特殊模式极端天气影响设备异常记录电力负荷预测就像在时间的河流中航行既有可预见的周期性潮汐也要应对突如其来的风暴。通过这次完整项目实践最深的体会是模型架构的创新只能带来边际效益而高质量的数据处理和恰当的特征工程才是提升预测精度的关键。下次尝试将天气数据作为外部变量引入模型或许会有新的突破。

相关文章:

用PyTorch搞定时间序列预测:从ETTh1数据集加载到LSTM-GRU模型可视化全流程复盘

用PyTorch搞定时间序列预测:从ETTh1数据集加载到LSTM-GRU模型可视化全流程复盘 电力负荷预测是能源管理系统的核心环节。想象一下,当你需要为下个月的工厂用电量做预算时,历史数据就像一本写满密码的日记,而LSTM-GRU混合模型就是破…...

EgoPush技术:机器人持续重排与自适应控制实践

1. 项目背景与核心价值在仓储物流、智能家居和工业自动化领域,机器人对多物体的持续重排能力一直是制约效率提升的关键瓶颈。传统方案往往需要预先编程物体位置或依赖高频次的视觉识别,难以应对动态环境中的长期稳定操作。我们团队开发的EgoPush技术&…...

Swoole 生命周期的庖丁解牛

它的本质是:将 PHP 传统的“请求级生命周期”(创建->执行->销毁)扩展为“进程级生命周期”(启动->运行->停止)。在这个长生命周期中,代码只加载一次,变量常驻内存,协程在…...

Flutter测试最佳实践

Flutter测试最佳实践 引言 测试是软件开发生命周期中不可或缺的一部分,它可以确保应用的质量和稳定性。Flutter提供了完善的测试框架,支持单元测试、Widget测试和集成测试。本文将深入探讨Flutter测试的最佳实践,包括测试策略、测试编写技巧、…...

别只当‘语法校对员’:用这份清单,帮你从Methodology和Experiment部分挖出真问题

超越语法校对:方法论与实验设计的深度审稿指南 当你拿到一篇学术论文准备审阅时,是否常常陷入"这个逗号用得不对"、"那个句子结构有问题"的细节纠错中?作为审稿人,我们的价值远不止于此。真正有建设性的审稿…...

如何快速通过CKS认证:Certified-Kubernetes-Security-Specialist实战攻略

如何快速通过CKS认证:Certified-Kubernetes-Security-Specialist实战攻略 【免费下载链接】Certified-Kubernetes-Security-Specialist Curated resources help you prepare for the CNCF/Linux Foundation CKS 2021 "Kubernetes Certified Security Specialis…...

腾讯版“小龙虾”WorkBuddy保姆级教程:零基础开启AI自动办公新时代

摘要:2026年3月,腾讯正式推出全场景AI智能体桌面工作台——WorkBuddy(被用户亲切称为“腾讯版小龙虾”)。作为一款100%兼容开源项目OpenClaw全量技能的智能工具,WorkBuddy以“免部署、官网下载即用、零代码自动办公”为…...

STM32F4 + DRV8301电机驱动:从3PWM到6PWM,我的死区时间调试血泪史

STM32F4 DRV8301电机驱动:从3PWM到6PWM,我的死区时间调试血泪史 那是一个深夜的实验室,电机发出的刺耳尖啸声让我至今难忘。作为一名嵌入式工程师,我从未想过一个简单的死区时间设置会让我经历如此曲折的调试历程。本文将分享我在…...

告别单调录屏:Captura画中画布局全攻略(预设模板+自定义保存)

告别单调录屏:Captura画中画布局全攻略(预设模板自定义保存) 【免费下载链接】Captura Capture Screen, Audio, Cursor, Mouse Clicks and Keystrokes 项目地址: https://gitcode.com/gh_mirrors/ca/Captura Captura是一款功能强大的屏…...

微信朋友圈改版+多方面更新,超14亿用户的国民APP能否再掀流量热潮?

微信朋友圈新版:排版优化与功能升级近日,iOS 8.0.71版本的微信朋友圈迎来改版。“我的朋友圈”页面内,原本位于配图右侧的文字描述调整至配图上方,发布日期显示形式也同步精简。同时,页面右上角新增“朋友圈相册”入口…...

语雀文档迁移指南:3步实现完整知识库本地备份

语雀文档迁移指南:3步实现完整知识库本地备份 【免费下载链接】yuque-exporter export yuque to local markdown 项目地址: https://gitcode.com/gh_mirrors/yuq/yuque-exporter 你是否曾担心过自己辛苦整理的语雀文档会因为平台政策变化而丢失?或…...

数据可视化实战:DevExtreme Reactive Chart 10种图表类型完整教程

数据可视化实战:DevExtreme Reactive Chart 10种图表类型完整教程 【免费下载链接】devextreme-reactive ⚠️ [OBSOLETE] See https://js.devexpress.com/React/Documentation/Guide/React_Components/Migrate_from_DevExtreme_Reactive/ 项目地址: https://git…...

Font Awesome图标库使用指南

Font Awesome 是一个基于 CSS 和 LESS 的、开源的、矢量化图标库和工具包,它通过将图标设计为字体字符,使得开发者可以像使用系统字体一样,通过 CSS 轻松地控制图标的大小、颜色、阴影等样式,从而极大地简化了网页中图标的使用和定…...

WarcraftHelper:让魔兽争霸3在现代电脑上焕发新生的终极解决方案

WarcraftHelper:让魔兽争霸3在现代电脑上焕发新生的终极解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在新系统…...

2025终极身份验证指南:双因素认证如何保护80%账户免遭入侵

2025终极身份验证指南:双因素认证如何保护80%账户免遭入侵 【免费下载链接】Back-End-Developer-Interview-Questions A list of back-end related questions you can be inspired from to interview potential candidates, test yourself or completely ignore 项…...

Go Faker 最佳实践:遵循这些原则确保代码质量与维护性

Go Faker 最佳实践:遵循这些原则确保代码质量与维护性 【免费下载链接】faker Go (Golang) Fake Data Generator for Struct. [Notes]This repository is archived, moved to the new repository https://github.com/go-faker/faker 项目地址: https://gitcode.co…...

WechatDecrypt:微信本地数据解密工具的技术实现与应用指南

WechatDecrypt:微信本地数据解密工具的技术实现与应用指南 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 微信数据解密工具WechatDecrypt为本地微信数据库文件提供了专业级的解密解决方案&am…...

MMD Tools:Blender中导入MMD模型的终极完整指南

MMD Tools:Blender中导入MMD模型的终极完整指南 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools 想要在B…...

亿级文件存储挑战:FastDFS元数据查询性能优化实战指南

亿级文件存储挑战:FastDFS元数据查询性能优化实战指南 【免费下载链接】fastdfs FastDFS is a high performance distributed file system (DFS). Its major functions include: file storing, file syncing and file accessing, and design for high capacity and …...

AI开发者必抢的最后3套沙箱调试镜像!——基于Docker 25.0-rc1内核模块hook源码定制的4层隔离验证环境

更多请点击: https://intelliparadigm.com 第一章:AI开发者必抢的最后3套沙箱调试镜像!——基于Docker 25.0-rc1内核模块hook源码定制的4层隔离验证环境 为应对大模型推理链路中不可控的系统调用污染与CUDA上下文泄漏问题,我们基…...

写论文、囤课件用哪个?2026 年网盘选型核心标准与 5 款主流网盘深度测评

对大多处于本科或研究生阶段的同学来说,网盘往往被当成了简单的“吃灰仓库”——塞满了几十 GB 从未打开过的考研视频和四六级资料。然而,当面临毕业论文的数十次修改、海量 PDF 文献的集中管理、以及大创项目的小组协作时,单纯的“空间大”根…...

别再只用AdaIN了!对比AdaAttN、SANet和AdaIN,看注意力机制如何提升风格迁移的细节质感

注意力机制驱动的风格迁移:从AdaIN到AdaAttN的技术演进与实战选型 当梵高的《星夜》笔触遇上莫奈的睡莲构图,风格迁移技术正在重新定义数字艺术创作的边界。传统基于Gram矩阵和AdaIN的方法虽然奠定了基础,却在细节质感与结构保持的平衡木上步…...

探索图像转字节数组的奥秘:3个技巧让OLED开发效率翻倍

探索图像转字节数组的奥秘:3个技巧让OLED开发效率翻倍 【免费下载链接】image2cpp 项目地址: https://gitcode.com/gh_mirrors/im/image2cpp 在嵌入式开发的世界里,为单色OLED显示屏准备图像数据曾是一项繁琐的技术挑战。传统方法要么依赖复杂的…...

父 Agent spawn 子 Agent 时,有哪些边界问题需要考虑?OpenClaw 做了哪些限制和保护?

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:AI大模型原理和应用面试题 文章目录 一、🍀回答重点 二、🍀扩展知识 2.1 ☘️为什么不能靠开发者自觉 2.2 ☘️Workspace 继承策略 2.3 ☘️沙箱策略 …...

如何在大数据领域高效使用 ClickHouse

如何在大数据领域高效使用 ClickHouse 声明: 📝 作者:甜城瑞庄的核桃(ZMJ) 原创学习笔记,欢迎分享,但请保留作者信息及原文链接哦~ 前言 在数据量爆炸式增长的今天,传统数据库在海量数据分析面前往往显得力不从心。ClickHouse 的出现,为这个痛点提供了一个高性能、…...

5分钟掌握:图像转字节数组工具在嵌入式开发中的实战应用

5分钟掌握:图像转字节数组工具在嵌入式开发中的实战应用 【免费下载链接】image2cpp 项目地址: https://gitcode.com/gh_mirrors/im/image2cpp 对于嵌入式开发者来说,为OLED等单色显示屏准备图像数据一直是个令人头疼的问题。传统的图像处理流程…...

Magenta.js核心组件深度解析:从MusicVAE到SketchRNN的完整实现

Magenta.js核心组件深度解析:从MusicVAE到SketchRNN的完整实现 【免费下载链接】magenta-js Magenta.js: Music and Art Generation with Machine Learning in the browser 项目地址: https://gitcode.com/gh_mirrors/ma/magenta-js Magenta.js是一个基于Ten…...

WechatDecrypt:微信聊天记录解密技术全解析

WechatDecrypt:微信聊天记录解密技术全解析 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 你是否曾经因为误删了重要的微信聊天记录而懊恼不已?或者想要备份那些珍贵的对话却无从…...

3步破解BERT黑箱:用BertViz可视化新闻阅读理解决策过程

3步破解BERT黑箱:用BertViz可视化新闻阅读理解决策过程 【免费下载链接】bertviz BertViz: Visualize Attention in Transformer Models 项目地址: https://gitcode.com/gh_mirrors/be/bertviz BertViz是一款强大的Transformer模型注意力可视化工具&#xff…...

如何选择最佳输入读取器:invoice2data 的 6 种文本提取方法对比

如何选择最佳输入读取器:invoice2data 的 6 种文本提取方法对比 【免费下载链接】invoice2data Extract structured data from PDF invoices 项目地址: https://gitcode.com/gh_mirrors/in/invoice2data invoice2data 是一款强大的开源工具,能够从…...