TimesNet 时间序列预测实战:3 步跑通 + 4 个必须调的参数
【免费下载链接】Time-Series-LibraryA Library for Advanced Deep Time Series Models for General Time Series Analysis.项目地址: https://gitcode.com/GitHub_Trending/ti/Time-Series-Library
电网运维组要预测变压器未来 720 小时温度,线性模型已经接不住了。Time-Series-Library 里的 TimesNet 用 FFT 做周期检测,把一维时间序列重塑成二维矩阵,再交给 2D 卷积做多尺度特征提取,一条命令就能跑。本文带你 3 步从 clone 到出图,再讲清楚 4 个直接决定精度的参数。
跑通第一个时间序列预测:从 clone 到出图
先克隆仓库并安装依赖(地址在文末),然后对 ETT 数据集执行:
python -u run.py \ --task_name long_term_forecast \ --is_training 1 \ --root_path ./dataset/ETT-small/ \ --data_path ETTh1.csv \ --model TimesNet \ --data ETTh1 \ --seq_len 96 --pred_len 96 \ --e_layers 2 --top_k 5 \ --d_model 16 --d_ff 32 --itr 1参数速览:
--task_name long_term_forecast:长期预测任务,同样支持插补、异常检测、分类--root_path+--data_path:数据目录与文件名,ETTh1.csv 是 15 分钟粒度的电力数据--seq_len 96:输入最近 96 个时间步--pred_len 96:向未来预测 96 步--e_layers 2:TimesBlock 堆叠数,即 2D 卷积深度--top_k 5:只关注最强的前 5 个周期成分--d_model / --d_ff:隐层宽度,小数据集用 16/32 就够
覆盖 ETT、ECL、Traffic 等多套真实数据
跑完控制台会打印 MAE、MSE 等评估指标,拿自己的曲线图对照即可判断效果。
读懂 2D 卷积与周期检测的实现
实现全在 models/TimesNet.py,核心两步。
第一步周期检测:FFT_for_Period对序列做 rfft,按幅值取 top_k 个最强频率分量,换算成周期 T/k。不用人工标注,模型自己找数据的节奏。
FFT 找周期,多尺度特征分解
第二步 2D 卷积:把一维序列按检测到的周期切成(周期数 × 周期长度)的二维矩阵,相当于把时间线按周期"折行"成一张表。随后两级 Inception 2D 卷积(多核宽度)跟进:核沿周期方向看周期内模式,沿周期数方向看周期间漂移。各周期结果按幅值权重加权和,再加残差连接。
1D 时间序列转 2D,周期内/周期间联合建模
为什么要折成二维?一维卷积只能看到时间邻域,第 1 个周期的模式与第 10 个周期的模式是割裂的。折成二维后,"周期内位置"和"周期序号"成为两个独立维度,同一个卷积核天然跨周期复用模式——这是多周期时间序列建模的关键。
时间序列预测 4 个参数调参指南
基线跑通后,精度主要看这 4 个:
--top_k(周期成分数):推荐 5。频谱峰值尖锐可降到 3–4;叠加周期多(如日+周)可升到 7--seq_len(输入长度):推荐 96 起。要覆盖主周期的整数倍,周期长就扩到 336/720--pred_len(预测步长):96–720。业务定多少就填多少,步长越长越依赖足够长的 seq_len--e_layers(块数):推荐 2。出现过拟合降到 1;小数据不建议超过 2
两组常见场景配置,可直接替换上面命令:
- 短期(M4 月度单变量):
seq_len 96、pred_len 28、top_k 3、e_layers 1、d_model 32 - 长期(ETTh1 多变量):
seq_len 96、pred_len 720、top_k 5、e_layers 2、d_model 16
720 步预测值与真实值对照
它能做到什么,做不到什么
- 多周期能力强:FFT 自动检测周期,省去人工标周期
- 多尺度提取:多核 2D 卷积同时捕捉周期内波动与周期间趋势
- 自带实例归一化,对非平稳数据相对稳
边界:
- FFT 默认序列近似平稳,周期漂移或结构性突变的序列精度会掉
- 每个块要循环 top_k 个周期各跑一遍 2D 卷积,序列很长且 top_k 调大时,训练时长明显增加
按场景选下一步
- 想读核心实现:看 models/TimesNet.py,重点在
FFT_for_Period与TimesBlock,200 行内能读完 - 想换数据集:抄 scripts/long_term_forecast/ETT_script/TimesNet_ETTh1.sh 的完整配置,改
root_path和data_path即可 - 想改卷积核配置:看 layers/Conv_Blocks.py 里的
Inception_Block_V1
git clone https://gitcode.com/GitHub_Trending/ti/Time-Series-Library先跑起来,再谈调优。
【免费下载链接】Time-Series-LibraryA Library for Advanced Deep Time Series Models for General Time Series Analysis.项目地址: https://gitcode.com/GitHub_Trending/ti/Time-Series-Library
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考