零基础玩转Time-Series-Library:开发者入门手册
1. 项目概述:时间序列分析的全功能工具箱
Time-Series-Library(TSLib)是一个面向深度学习研究者的开源工具库,专注于提供先进的时间序列分析模型实现与评估框架。该库支持五大核心任务:长期预测、短期预测、缺失值填补、异常检测和分类,覆盖了时间序列领域的主流应用场景。
截至2024年最新更新,TSLib已整合30+种前沿时间序列模型,包括Mamba、TimeMixer、iTransformer等SOTA算法,并提供标准化的实验脚本与性能排行榜,为研究者提供公平的模型对比基准。
2. 环境搭建:从零开始的配置指南
2.1 系统要求
- 操作系统:Linux/Unix (推荐Ubuntu 20.04+)
- Python版本:3.8.x
- GPU支持:NVIDIA GPU (显存≥8GB,推荐16GB+)
- CUDA版本:11.0+ (需与PyTorch版本匹配)
2.2 快速安装
通过以下命令一键部署开发环境:
# 克隆仓库
git clone https://gitcode.com/GitHub_Trending/ti/Time-Series-Library
cd Time-Series-Library
# 创建虚拟环境
conda create -n tslib python=3.8 -y
conda activate tslib
# 安装依赖
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
⚠️ 注意:requirements.txt中指定PyTorch 1.7.1版本,如需适配更高版本CUDA,请手动调整torch版本:
pip install torch==1.12.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html
2.3 环境验证
运行以下代码检查核心依赖是否正确安装:
import torch
import numpy as np
import pandas as pd
from models.TimesNet import Model
# 验证PyTorch GPU支持
print(f"PyTorch版本: {torch.__version__}")
print(f"GPU可用: {torch.cuda.is_available()}")
# 验证模型加载
model = Model({
'seq_len': 96,
'pred_len': 96,
'enc_in': 7,
'd_model': 512
})
print("模型初始化成功")
3. 数据准备:标准化数据集接入
3.1 数据集结构
TSLib采用统一的数据目录结构,支持自动识别多种时间序列格式:
dataset/
├── electricity/ # 电力数据集
│ └── electricity.csv
├── ETT-small/ # 能源数据集
│ ├── ETTh1.csv
│ └── ETTh2.csv
├── traffic/ # 交通流量数据集
└── weather/ # 气象数据集
3.2 数据格式规范
输入CSV文件需包含至少两列:
- 时间列:命名为
date,格式支持YYYY-MM-DD HH:MM:SS - 特征列:数值型特征,多变量预测时保留所有特征列
示例(ETTh1.csv):
date,OT,HU,NOX,TEMP,...
2016-07-01 00:00:00,30.4,68.0,48.0,23.1,...
2016-07-01 01:00:00,29.5,68.0,45.0,22.8,...
3.3 内置数据集获取
通过以下脚本自动下载预处理数据集:
# 创建数据目录
mkdir -p dataset
# 下载ETT数据集(国内镜像)
wget https://dataset-bj.cdn.bcebos.com/time-series/ETT-small.zip -O dataset/ETT-small.zip
unzip dataset/ETT-small.zip -d dataset/
4. 快速上手:3分钟完成第一个预测任务
以短期电力负荷预测为例,使用Mamba模型在ETT数据集上实现96步预测:
4.1 单命令运行
# 短期预测任务(M4数据集)
bash ./scripts/short_term_forecast/Mamba_M4.sh
4.2 命令参数解析
核心参数说明:
python run.py \
--task_name long_term_forecast \ # 任务类型:长期预测
--is_training 1 \ # 训练模式:1=训练,0=推理
--model Mamba \ # 模型选择:Mamba/Autoformer/TimesNet
--data ETTh1 \ # 数据集名称
--root_path ./dataset/ETT-small/ \ # 数据根目录
--seq_len 96 \ # 输入序列长度
--pred_len 96 \ # 预测序列长度
--batch_size 32 \ # 批大小
--train_epochs 10 \ # 训练轮次
--learning_rate 0.0001 # 学习率
4.3 输出结果解读
训练完成后,结果将保存在./results/目录,包含:
- 预测可视化:PDF格式对比图
- 量化指标:metrics.npy包含MAE/MSE/RMSE等指标
- 模型权重:checkpoint.pth保存最佳参数
results/
└── long_term_forecast_ETTh1_96_96/
├── metrics.npy # 评估指标
├── pred.npy # 预测结果数组
├── true.npy # 真实值数组
└── 0.pdf # 预测对比图
5. 核心功能全解析
5.1 五大任务支持矩阵
| 任务类型 | 应用场景 | 代表模型 | 评价指标 |
|---|---|---|---|
| 长期预测 | 电力负荷/交通流量 | TimeMixer/TimeXer | MSE/RMSE/MAE |
| 短期预测 | 股票价格/实时监控 | TimesNet/Mamba | SMAPE/MASE |
| 缺失值填补 | 传感器数据修复 | TimesNet/Autoformer | MAE/RMSE |
| 异常检测 | 设备故障预警 | KANAD/TimesNet | F1-score/Precision |
| 分类 | 行为识别/状态判断 | TimesNet/iTransformer | Accuracy/F1-score |
5.2 模型选择决策树
5.3 关键参数调优指南
| 参数 | 推荐范围 | 调优策略 |
|---|---|---|
| seq_len | 96-720 | 预测长度的1-2倍 |
| pred_len | 24-1440 | 根据业务需求设定,建议≤seq_len |
| d_model | 128-512 | 数据维度高时增大(如电力321维用512) |
| batch_size | 16-128 | GPU显存允许情况下最大化 |
| learning_rate | 1e-4-1e-3 | Adam默认1e-4,SGD可提高至1e-3 |
6. 模型深度解析:从原理到实践
6.1 TimesNet:时间序列的二维变化建模
TimesNet通过傅里叶变换提取周期特征,结合2D卷积捕获时间序列的局部和全局依赖:
# TimesNet核心模块
class TimesBlock(nn.Module):
def __init__(self, configs):
super(TimesBlock, self).__init__()
self.seq_len = configs.seq_len
self.pred_len = configs.pred_len
self.k = configs.top_k # 关键周期数量
# 周期注意力与卷积模块
self.conv = nn.Sequential(
Inception_Block_V1(configs.d_model, configs.d_ff, num_kernels=configs.num_kernels),
nn.GELU(),
Inception_Block_V1(configs.d_ff, configs.d_model, num_kernels=configs.num_kernels)
)
def forward(self, x):
B, T, N = x.size()
# 1. FFT提取周期特征
period_list, period_weight = FFT_for_Period(x, self.k)
# 2. 多周期特征融合
res = []
for i in range(self.k):
period = period_list[i]
# 周期重塑为2D矩阵
out = out.reshape(B, length//period, period, N).permute(0, 3, 1, 2).contiguous()
# 2D卷积捕获周期内依赖
out = self.conv(out)
res.append(out)
# 3. 自适应权重聚合
res = torch.stack(res, dim=-1)
period_weight = F.softmax(period_weight, dim=1)
res = torch.sum(res * period_weight, -1)
return res + x # 残差连接
6.2 Mamba:线性时间复杂度的序列模型
Mamba作为新兴的状态空间模型,在长序列预测中表现优异:
# Mamba核心前向过程
def forward(self, x_enc, x_mark_enc):
# 输入嵌入
enc_out = self.enc_embedding(x_enc, x_mark_enc) # [B,T,C]
# SSM模块处理长序列
for i in range(self.layer):
enc_out = self.mamba_layers[i](enc_out)
# 预测头
dec_out = self.projection(enc_out[:, -self.pred_len:, :])
return dec_out
7. 评估指标详解与可视化
7.1 回归任务指标对比
| 指标名称 | 公式 | 特点 | 适用场景 | ||
|---|---|---|---|---|---|
| MAE | $\text{MAE} = \frac{1}{N} \sum_{i=1}^N | y_i - \hat{y}_i | $ | 对异常值鲁棒 | 电力负荷预测 |
| MSE | $\text{MSE} = \frac{1}{N} \sum_{i=1}^N (y_i - \hat{y}_i)^2$ | 惩罚大误差 | 金融时间序列 | ||
| RMSE | $\text{RMSE} = \sqrt{\text{MSE}}$ | 与原始数据同量纲 | 气象预测 | ||
| MAPE | $\text{MAPE} = \frac{1}{N} \sum_{i=1}^N | \frac{y_i - \hat{y}_i}{y_i} | $ | 百分比误差 | 销售预测 |
7.2 可视化工具使用
内置可视化函数使用示例:
from utils.tools import visual
# 预测结果可视化
visual(
true=batch_y[0].cpu().numpy(),
pred=outputs[0].cpu().numpy(),
save_path=os.path.join(folder_path, f'{i}.pdf')
)
生成对比图包含:
- 原始序列与预测序列叠加
- 误差分布直方图
- 累计误差曲线
8. 高级应用:自定义模型开发
8.1 模型开发流程
- 创建模型文件:在
./models/目录新建自定义模型文件 - 实现核心接口:继承基础类并实现
__init__和forward方法 - 注册模型:在
exp/exp_basic.py的model_dict中添加映射 - 编写脚本:在
./scripts/目录创建对应的运行脚本
8.2 最小模型示例
# models/MyModel.py
import torch
import torch.nn as nn
class Model(nn.Module):
def __init__(self, configs):
super(Model, self).__init__()
self.seq_len = configs.seq_len
self.pred_len = configs.pred_len
self.fc = nn.Linear(configs.seq_len, configs.pred_len)
def forward(self, x_enc, x_mark_enc, x_dec, x_mark_dec):
# x_enc: [B, seq_len, C]
B, _, C = x_enc.shape
x = x_enc.permute(0, 2, 1) # [B, C, seq_len]
x = self.fc(x) # [B, C, pred_len]
return x.permute(0, 2, 1) # [B, pred_len, C]
8.3 添加模型注册
# exp/exp_basic.py
from models.MyModel import Model as MyModel
self.model_dict = {
# ... 现有模型 ...
'MyModel': MyModel
}
9. 常见问题解决方案
9.1 训练异常处理
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| loss为NaN | 学习率过高 | 降低learning_rate至1e-5 |
| 验证集指标波动大 | 批大小过小 | 增大batch_size至32以上 |
| GPU内存溢出 | 序列长度过长 | 减小seq_len或使用梯度累积 |
| 收敛速度慢 | 优化器选择不当 | 改用AdamW优化器 |
9.2 环境配置问题
PyTorch版本兼容
# 查看CUDA版本
nvcc --version
# 安装对应PyTorch版本
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html
国内源加速
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
10. 性能基准与模型对比
10.1 主流模型性能排行榜
在ETTh1数据集上的长期预测性能(pred_len=720):
| 模型 | 参数规模(M) | 推理速度(ms) | MSE | MAE |
|---|---|---|---|---|
| TimeXer | 12.8 | 45.2 | 0.89 | 0.65 |
| TimeMixer | 9.6 | 38.7 | 0.92 | 0.68 |
| iTransformer | 15.3 | 52.1 | 0.95 | 0.71 |
| Mamba | 8.4 | 22.3 | 1.02 | 0.75 |
| TimesNet | 10.2 | 35.6 | 1.05 | 0.77 |
10.2 硬件资源需求
| 模型 | 最小GPU内存 | 推荐配置 | 训练时间(10轮) |
|---|---|---|---|
| DLinear | 4GB | GTX 1050Ti | 15分钟 |
| Mamba | 8GB | RTX 2080Ti | 30分钟 |
| TimesNet | 8GB | RTX 3060 | 45分钟 |
| TimeMixer | 12GB | RTX 3090 | 60分钟 |
11. 总结与未来展望
Time-Series-Library提供了一站式时间序列分析解决方案,其核心优势在于:
- 模型丰富度:涵盖30+种前沿算法,持续跟进最新研究成果
- 工程化设计:统一接口、标准化流程,便于快速迁移至生产环境
- 可扩展性:模块化架构支持自定义模型和新任务接入
11.1 学习资源推荐
- 官方教程:
tutorial/TimesNet_tutorial.ipynb提供详细入门指南 - 论文复现:
scripts/目录包含各模型原始论文实验配置 - 社区支持:GitHub Issues响应时间<48小时
11.2 贡献指南
欢迎通过以下方式参与项目建设:
- 提交模型PR:遵循现有模型实现规范
- 优化性能:改进数据加载、并行计算等模块
- 完善文档:补充使用案例和参数说明
附录:完整参数列表
| 参数类别 | 参数名称 | 取值范围 | 默认值 |
|---|---|---|---|
| 数据参数 | seq_len | 24-720 | 96 |
| 数据参数 | pred_len | 24-1440 | 96 |
| 数据参数 | features | M/S/MS | M |
| 模型参数 | d_model | 64-512 | 128 |
| 模型参数 | n_heads | 2-16 | 8 |
| 模型参数 | e_layers | 1-4 | 2 |
| 训练参数 | batch_size | 8-128 | 32 |
| 训练参数 | train_epochs | 5-100 | 10 |
| 训练参数 | learning_rate | 1e-5-1e-3 | 1e-4 |
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



