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

FilterTS频域滤波实战:5步搞定多变量时间序列预测(附Python代码)

FilterTS频域滤波实战5步搞定多变量时间序列预测时间序列预测一直是数据科学领域的核心挑战之一尤其是当涉及到多变量场景时传统方法往往捉襟见肘。最近南开大学团队在AAAI 2025上提出的FilterTS模型通过创新的频域滤波技术为这一难题提供了全新的解决方案。不同于市面上大多数时间序列预测教程停留在理论层面本文将带您从零开始手把手实现一个完整的FilterTS预测流程。1. 环境准备与数据加载在开始之前我们需要确保所有必要的Python库已安装就绪。FilterTS的核心依赖于频域变换和深度学习框架以下是必备工具栈pip install torch numpy pandas scipy matplotlib对于时间序列预测ETTElectricity Transformer Temperature数据集是一个经典的基准测试集。它记录了电力变压器2年的负载与油温数据包含6个相关变量import pandas as pd # 加载ETTh1数据集 data pd.read_csv(ETTh1.csv) print(data.head()) # 输出示例 # date HUFL HULL MUFL MULL LUFL LULL OT # 0 2016-07-01 8.21 2.91 8.13 2.90 7.69 2.88 2.82 # 1 2016-07-02 8.01 2.84 7.89 2.83 7.65 2.80 2.80提示实际项目中建议使用PyTorch的Dataset类封装数据便于后续的批处理和模型训练。数据预处理是时间序列建模的关键第一步我们需要完成以下操作时间戳标准化将日期时间转换为模型可处理的数值特征缺失值处理线性插值或前向填充归一化MinMax或Z-Score标准化数据集划分按7:2:1分为训练、验证和测试集2. FilterTS核心架构实现FilterTS的创新之处在于其独特的频域处理模块让我们逐步构建这些核心组件。2.1 时频转换模块(T2FEmbed)import torch import torch.nn as nn from torch.fft import fft class T2FEmbed(nn.Module): def __init__(self, embed_dim): super().__init__() self.embed_dim embed_dim self.norm nn.InstanceNorm1d(1) def forward(self, x): # x形状: (batch_size, seq_len, n_vars) x self.norm(x.unsqueeze(1)).squeeze(1) x_freq fft(x, dim1) # 傅里叶插值到目标维度 if x_freq.shape[1] self.embed_dim: pad_len self.embed_dim - x_freq.shape[1] x_freq torch.cat([x_freq, torch.zeros(*x_freq.shape[:-1], pad_len)], dim-1) return x_freq2.2 动态跨变量滤波模块(DCFilter)这是FilterTS最具创新性的部分实现了变量间的频率信息交互class DCFilter(nn.Module): def __init__(self, n_vars, hidden_dim): super().__init__() self.weight nn.Parameter(torch.randn(n_vars, hidden_dim, 2)) def forward(self, x_freq): # x_freq形状: (batch_size, n_vars, embed_dim) real x_freq.real imag x_freq.imag # 动态阈值滤波 magnitude torch.sqrt(real**2 imag**2) threshold magnitude.mean(dim(0,1), keepdimTrue) mask (magnitude threshold).float() # 频域滤波操作 filtered_real real * mask filtered_imag imag * mask # 跨变量聚合 weight_real self.weight[..., 0] weight_imag self.weight[..., 1] out_real torch.einsum(bvd,vdf-bf, filtered_real, weight_real) out_imag torch.einsum(bvd,vdf-bf, filtered_imag, weight_imag) return torch.complex(out_real, out_imag)3. 模型训练与调优技巧完整的FilterTS模型需要整合所有组件class FilterTS(nn.Module): def __init__(self, n_vars, seq_len, pred_len, embed_dim64): super().__init__() self.t2f T2FEmbed(embed_dim) self.dcf DCFilter(n_vars, embed_dim) self.sgf SGFilter(n_vars, embed_dim) # 静态滤波模块(实现类似DCFilter) self.proj nn.Linear(embed_dim*2, pred_len) def forward(self, x): # 时频转换 x_freq self.t2f(x) # 动态滤波 dyn_out self.dcf(x_freq) # 静态滤波 stat_out self.sgf(x_freq) # 频时转换 combined torch.cat([dyn_out.real, stat_out.real], dim-1) output self.proj(combined) return output训练过程中有几个关键注意事项学习率调度采用余弦退火策略损失函数平滑平均绝对误差(SmoothMAE)早停机制验证集损失连续3轮不下降时终止训练正则化Dropout率设置为0.1-0.3from torch.optim.lr_scheduler import CosineAnnealingLR model FilterTS(n_vars6, seq_len96, pred_len24) optimizer torch.optim.AdamW(model.parameters(), lr1e-3) scheduler CosineAnnealingLR(optimizer, T_max50) criterion nn.SmoothL1Loss() for epoch in range(100): model.train() for x, y in train_loader: pred model(x) loss criterion(pred, y) loss.backward() optimizer.step() optimizer.zero_grad() scheduler.step()4. 实战效果对比分析我们在ETTh1数据集上对比了FilterTS与传统方法的预测效果模型MSE (24步)MAE (24步)训练时间(epoch)LSTM0.3820.42145sTransformer0.3510.39868sInformer0.3270.37672sFilterTS0.2890.34258s从结果可以看出FilterTS在预测精度上显著优于传统方法同时保持了合理的计算效率。特别是在捕捉长期周期性模式方面频域滤波的优势更加明显。可视化对比显示FilterTS能够更准确地预测油温(OT)的周期性波动import matplotlib.pyplot as plt # 绘制预测结果对比 plt.figure(figsize(12,6)) plt.plot(test_y[:, -1, -1].cpu(), labelGround Truth) plt.plot(lstm_pred[:, -1, -1].cpu(), labelLSTM) plt.plot(filterts_pred[:, -1, -1].cpu(), labelFilterTS) plt.legend() plt.title(Oil Temperature Prediction Comparison) plt.show()5. 生产环境部署建议将FilterTS应用于实际业务系统时需要考虑以下工程化问题实时预测优化使用TorchScript将模型转换为静态图实现滑动窗口推理机制频域计算可并行化加速模型监控建立预测偏差报警机制定期重新训练模型建议每周/月监控特征分布漂移资源分配# Docker部署示例 FROM pytorch/pytorch:2.0.1-cuda11.7 COPY requirements.txt . RUN pip install -r requirements.txt COPY model.pt /app/ COPY inference.py /app/ CMD [python, /app/inference.py]对于需要处理数百个变量的工业场景可以调整模型架构分组变量滤波将相关变量分组处理分层频域分析不同频率范围使用不同分辨率分布式训练使用DDP加速大规模数据训练

相关文章:

FilterTS频域滤波实战:5步搞定多变量时间序列预测(附Python代码)

FilterTS频域滤波实战:5步搞定多变量时间序列预测 时间序列预测一直是数据科学领域的核心挑战之一,尤其是当涉及到多变量场景时,传统方法往往捉襟见肘。最近南开大学团队在AAAI 2025上提出的FilterTS模型,通过创新的频域滤波技术&…...

宽带任意阶 完美涡旋光束 超表面模型 fdtd仿真 复现论文:2021年LPR:Generat...

宽带任意阶 完美涡旋光束 超表面模型 fdtd仿真 复现论文:2021年LPR:Generation of Perfect Vortex Beams by Dielectric Geometric Metasurface 论文介绍:全介质超表面实现宽带任意阶次完美涡旋光束的产生,完美涡旋光束是涡旋光束…...

嵌入式Linux无线SSH远程登录实战:RTL8723BU+OpenSSH部署

1. 项目概述在嵌入式Linux系统开发实践中,远程登录能力是调试、部署与维护的核心基础设施。当开发板脱离实验室环境进入实际应用场景时,物理串口连接往往受限于距离、线缆可靠性及多设备管理复杂度。此时,基于TCP/IP协议栈的SSH(S…...

虚拟机玩家必备:CentOS7密码重置最全指南(含LANG报错处理+自动标记技巧)

虚拟机玩家必备:CentOS7密码重置全流程精解与技术内幕 作为开发测试人员,我们经常需要配置和维护多个CentOS7虚拟机环境。当密码遗忘或需要重置时,传统的教程往往只提供基础步骤,而忽略了虚拟机环境下特有的技术细节和潜在问题。本…...

SmallThinker-3B-Preview辅助AI编程:智能代码补全与错误诊断实践

SmallThinker-3B-Preview辅助AI编程:智能代码补全与错误诊断实践 最近在尝试各种AI编程工具,想找个能真正理解我意图、帮我写代码的助手。试了一圈,发现SmallThinker-3B-Preview这个模型有点意思。它不像那些只会机械补全代码片段的工具&…...

永磁同步电机反馈解耦控制:模型构建、算法优化及实用指南(适用于基础及以上用户)

永磁同步电机反馈解耦控制 模型包含反馈解耦模型和说明文档,适合有一定基础的人员学习。坐标变换这玩意儿在电机控制里真是绕不开的门槛。永磁同步电机那d轴和q轴电流互相牵制的德性,搞过现场调试的都懂——明明调好了q轴转矩电流,d轴磁链分量…...

通义千问3-Reranker-0.6B开源部署:支持量化推理(AWQ/GPTQ)降低显存占用

通义千问3-Reranker-0.6B开源部署:支持量化推理(AWQ/GPTQ)降低显存占用 你是不是也遇到过这样的烦恼?想部署一个强大的文本重排序模型来优化搜索效果,结果一看显存要求,直接劝退。动辄十几GB的显存占用&am…...

ROS2新手必看:rqt可视化工具从安装到实战(附小乌龟控制技巧)

ROS2实战指南:rqt可视化工具深度解析与小乌龟控制秘籍 引言 在机器人操作系统ROS2的生态中,可视化工具扮演着至关重要的角色。作为ROS2官方推荐的GUI工具套件,rqt以其模块化设计和丰富的功能插件,为开发者提供了直观高效的交互方式…...

基于有人云物联网关与MQTT服务器实现PLC数据双向通信的实践指南

1. 工业物联网通信方案概述 在工厂自动化改造项目中,我经常遇到设备数据孤岛的问题。比如去年给某包装机械厂做智能化升级时,他们的西门子S7-1200 PLC运行数据无法实时传送到中控系统,导致生产调度总是慢半拍。后来采用有人云USR-PLCNET210物…...

Gradio 6.5定制化UI开发:实时手机检测Web界面二次开发入门

Gradio 6.5定制化UI开发:实时手机检测Web界面二次开发入门 1. 项目概述 1.1 系统简介 这是一个基于DAMO-YOLO和TinyNAS技术的实时手机检测系统,专门针对移动端低算力、低功耗场景优化。系统采用Gradio 6.5构建Web界面,提供直观的手机检测功…...

YOLO-Pose多分类改造:如何让你的模型识别更多物体关键点

YOLO-Pose多分类改造实战:从单类别到多物体关键点检测的完整指南 当计算机视觉遇上姿态估计,YOLO-Pose无疑是最受欢迎的解决方案之一。但面对需要同时识别多种物体关键点的场景时,标准的单分类模型就显得力不从心。本文将带你深入YOLO-Pose多…...

DEM数据处理避坑指南:ArcGIS中如何智能剔除边界异常值

DEM数据处理避坑指南:ArcGIS中智能剔除边界异常值的实战技巧 第一次处理DEM数据时,我盯着屏幕上那些突兀的边界数值直发愣——它们像一群不守规矩的"捣乱分子",把整个分析结果搅得一团糟。这种边界异常值问题在地形分析中极为常见&…...

春联生成模型-中文-base入门指南:两字词输入技巧与避免生僻字生成策略

春联生成模型-中文-base入门指南:两字词输入技巧与避免生僻字生成策略 1. 引言:让AI帮你写一副好春联 过年贴春联,是咱们中国人的传统习俗。一副好的春联,不仅要有吉祥的寓意,还得对仗工整、朗朗上口。但有时候&…...

基于springboot 大数据+Hadoop+Spark的家居家私数据可视化分析系统设计与开发(源码+精品论文+答辩PPT等资料)

博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...

“基于陷波滤波器双惯量伺服系统机械谐振抑制的Matlab/Simulink仿真”(传递函数版)”

(传递函数版)伺服系统基于陷波滤波器双惯量伺服系统机械谐振抑制matlab/Simulink仿真 1.模型简介模型为基于陷波滤波器的双惯量伺服系统机械谐振抑制仿真,采用Matlab R2018a/Simulink搭建。 仿真模型由传递函数形式搭建,主要包括转…...

Ansys Zemax | 如何寻找几何错误

概要这篇文章讲解了:在非序列模式中造成几何错误(错误10561)的各种原因。如何诊断这些错误。介绍使用 OpticStudio 做设计的时候,必须得知道得到的结果是否是正确的。尤其是在非序列模式下,复杂的几何模型可以互相嵌套…...

Energies | 8版YOLO对8版Transformer实测光伏缺陷检测,RF-DETR-Small综合胜出

导读大型光伏电站中,一块面板出现热斑或裂纹,肉眼难以在数千块面板中定位它。无人机搭载热红外相机的巡检方案已成为行业标配,但拍下来的热图交给哪个检测模型更合适?YOLO 系列以速度见长,Transformer 检测器以精度著称…...

实战指南:Python3离线环境下的依赖管理与库迁移

1. 为什么需要离线环境管理Python依赖? 在企业级开发场景中,经常会遇到服务器无法连接外网的情况。比如金融行业的交易系统、政府部门的政务平台,或者工厂车间的物联网设备,这些环境通常出于安全考虑会进行物理隔离。我第一次接触…...

Grafana集成OAuth2.0:实现无缝第三方授权登录的实战指南

1. 为什么需要OAuth2.0集成? 在企业级数据可视化场景中,Grafana作为核心监控平台往往需要与现有账号体系打通。想象一下这样的场景:每天早上,你的运营团队需要同时登录业务系统、邮件系统和Grafana监控台,记住三套不同…...

别再死记硬背了!用C语言结构体玩转STM32寄存器(以F4系列GPIO为例)

用C语言结构体优雅操作STM32寄存器&#xff1a;F4系列GPIO实战指南 每次看到满屏的GPIOA->ODR | (1 << 5)这类代码时&#xff0c;你是否想过——为什么我们要像拼积木一样手动计算每一位&#xff1f;在STM32开发中&#xff0c;寄存器操作是基本功&#xff0c;但传统方…...

手把手教你用dns.he.net在OpenWRT路由器上配置免费DDNS(支持自定义域名)

在OpenWRT上实现自定义域名动态解析&#xff1a;dns.he.net DDNS配置全指南 对于拥有家庭服务器或NAS设备的用户来说&#xff0c;远程访问始终是个刚需。想象一下&#xff0c;当你出差在外急需调取家中NAS里的文件&#xff0c;或是想通过个人博客分享最新旅行照片时&#xff0c…...

Citra 3DS模拟器全场景应用指南:从痛点解决到体验升华

Citra 3DS模拟器全场景应用指南&#xff1a;从痛点解决到体验升华 【免费下载链接】citra 项目地址: https://gitcode.com/GitHub_Trending/ci/citra 一、痛点解析&#xff1a;3DS游戏体验的现实困境 1.1 硬件限制的枷锁 当你手握3DS掌机时&#xff0c;是否曾因屏幕尺…...

用Python实战NetworkX:手把手教你找出社交网络中的核心小圈子(附Bron-Kerbosch算法源码解析)

用Python实战NetworkX&#xff1a;手把手教你找出社交网络中的核心小圈子&#xff08;附Bron-Kerbosch算法源码解析&#xff09; 社交网络中总有一些紧密连接的小群体——可能是经常互动的同事群、兴趣相投的游戏战队&#xff0c;或是商业合作频繁的企业联盟。这些"核心小…...

LangChain4j多模型动态切换+SpringBoot实战指南

1. 为什么需要多模型动态切换&#xff1f; 在开发基于大语言模型的应用时&#xff0c;单一模型往往无法满足所有需求。比如通义千问可能擅长中文创作&#xff0c;而GPT-4更擅长逻辑推理&#xff0c;Claude在长文本处理上有优势。想象你开了一家餐厅&#xff0c;不同厨师各有所长…...

PE文件之TLS

PE文件之TLS 是什么线程局部存储 线程局部存储&#xff08;Thread Local Storage&#xff0c;TLS&#xff09;是各线程独立的数据存储空间&#xff0c;使用TLS可以像修改自身局部变量一样修改进程的全局变量而不影响其它线程。这很好地解决了多线程程序设计中变量的同步问题。 …...

LPS25H气压传感器I²C驱动开发与气压测高实战

1. LPS25H气压传感器驱动库技术解析LPS25H是意法半导体&#xff08;STMicroelectronics&#xff09;推出的一款高精度、低功耗数字气压传感器&#xff0c;采用MEMS技术制造&#xff0c;可测量绝对压力范围为260 hPa至1260 hPa&#xff08;对应海拔约9000 m至−500 m&#xff09…...

Si5351A Arduino时钟库:面向RF应用的轻量级全功能驱动

1. 项目概述PU2REO_Si5351Lite 是一款专为 Skyworks&#xff08;前 Silicon Labs&#xff09;Si5351A 10 引脚 MSOP 封装时钟发生器芯片设计的轻量级、全功能 Arduino 库。该库的核心目标是提供一种完全脱离 Silicon Labs 官方 ClockBuilder 闭源软件的、基于纯固件控制的解决方…...

Qwen3-0.6B-FP8应用场景:学生辅助学习、程序员代码解释、运营文案生成

Qwen3-0.6B-FP8&#xff1a;小模型大智慧&#xff0c;三大场景实战指南 你是不是也遇到过这些头疼事&#xff1f; 学生时代&#xff0c;面对复杂的数学题和物理概念&#xff0c;怎么都绕不过弯&#xff0c;想找个随时能问的“学霸”朋友&#xff1f;刚入行的程序员&#xff0c;…...

从ifconfig到iproute2:现代Linux网络管理工具链迁移全攻略

从ifconfig到iproute2&#xff1a;现代Linux网络管理工具链迁移全攻略 在Linux系统管理领域&#xff0c;网络配置一直是最基础也最关键的技能之一。过去二十年间&#xff0c;ifconfig、route等传统工具曾是每个运维人员的标配&#xff0c;但随着Linux内核网络栈的演进&#xff…...

Turbo Intruder:3大核心优势实现百万级请求的Web安全测试实战指南

Turbo Intruder&#xff1a;3大核心优势实现百万级请求的Web安全测试实战指南 【免费下载链接】turbo-intruder Turbo Intruder is a Burp Suite extension for sending large numbers of HTTP requests and analyzing the results. 项目地址: https://gitcode.com/gh_mirror…...