1. 序列数据集的基本概念与核心特征
时间序列数据是机器学习领域中一类特殊的数据结构,它记录了观测值随时间变化的连续过程。与传统的表格数据不同,序列数据具有明确的时间维度,这使得数据点之间存在着时间依赖性。典型的序列数据包括股票价格、气象观测、工业传感器读数等,这些数据都遵循"时间戳+观测值"的基本记录模式。
在数据结构层面,一个标准的序列数据集通常包含三个核心维度:
- 时间维度:记录数据点的时间标记(timestamp)
- 特征维度:每个时间点的观测特征(features)
- 样本维度:不同实体或场景下的独立序列(samples)
以电力负荷预测为例,一个包含100个变电站、每15分钟采集一次电压电流数据的月度数据集,其结构可以表示为(100, 2880, 2),其中100代表变电站数量(样本维度),2880是一个月的15分钟间隔数(时间维度),2表示电压和电流两个特征(特征维度)。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 序列数据集的典型存储格式
2.1 常见文件格式对比
在实际工程中,序列数据主要采用以下几种存储格式:
| 格式类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| CSV | 通用性强,可读性好 | 无数据类型标记,解析效率低 | 小型数据集交换 |
| Parquet | 列式存储,压缩率高 | 需要专用库支持 | 大规模工业数据 |
| HDF5 | 支持分层存储,IO效率高 | 文件不可分割 | 科研领域 |
| TFRecord | 适合TensorFlow流水线 | 生态局限性强 | TensorFlow项目 |
提示:选择存储格式时,应优先考虑数据规模和使用场景。对于GB级以下数据,CSV仍是最通用的选择;TB级工业数据建议采用Parquet;深度学习项目可考虑TFRecord。
2.2 内存中的数据结构
在Python生态中,序列数据通常被转化为以下数据结构进行处理:
python复制# Pandas DataFrame格式(单变量)
df = pd.DataFrame({
'timestamp': pd.date_range('2023-01-01', periods=100, freq='H'),
'value': np.random.randn(100)
})
# xarray Dataset格式(多变量)
import xarray as xr
ds = xr.Dataset({
'temperature': (['time', 'station'], np.random.rand(100, 5)),
'humidity': (['time', 'station'], np.random.rand(100, 5))
}, coords={
'time': pd.date_range('2023-01-01', periods=100),
'station': ['A', 'B', 'C', 'D', 'E']
})
对于深度学习框架,通常需要转换为三维张量:
python复制# TensorFlow/Keras格式
# (samples, timesteps, features)
data = np.random.rand(1000, 24, 5) # 1000个样本,24个时间步,5个特征
3. 序列数据集的典型任务与预处理
3.1 四大核心任务类型
-
时序预测:基于历史序列预测未来值
- 单步预测:预测下一个时间点的值
- 多步预测:预测未来多个时间点的序列
-
异常检测:识别序列中的异常模式
- 点异常:单个时间点的异常值
- 模式异常:子序列的异常行为
-
时序分类:对完整序列进行分类
- 基于形态特征:如心电图分类
- 基于动态特征:如动作识别
-
时序补全:修复缺失或损坏的数据段
- 随机缺失:个别时间点缺失
- 连续缺失:整段数据缺失
3.2 预处理关键步骤
-
缺失值处理:
- 前向填充:用前一个有效值填充
- 线性插值:适用于平稳序列
- 预测填充:使用简单模型预测缺失值
-
归一化方法:
- Min-Max归一化:将值缩放到[0,1]区间
python复制from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() scaled_data = scaler.fit_transform(data)- Z-score标准化:使数据均值为0,方差为1
- 分位数变换:消除异常值影响
-
序列对齐:
- 重采样:统一不同频率的序列
python复制df.resample('1H').mean() # 统一为小时粒度- 动态时间规整(DTW):对齐不同长度的序列
-
特征工程:
- 时域特征:移动平均、差分、标准差
- 频域特征:傅里叶变换系数
- 统计特征:偏度、峰度、分位数
4. 公开数据集与应用案例
4.1 经典数据集解析
-
ETT-small数据集:
- 来源:德国气象站
- 特点:22个气象变量的10分钟采样
- 适用任务:多变量时序预测
-
SMD异常检测数据集:
- 来源:互联网公司服务器监控
- 特点:38维5周数据,标注异常点
- 适用任务:工业设备异常检测
-
UEA分类数据集:
- 包含:手势识别、心电图分类等
- 特点:多变量不等长序列
- 适用任务:行为识别、医疗诊断
4.2 实际应用中的注意事项
-
数据泄露预防:
- 严格划分训练/测试集时确保时间顺序
- 避免在全局范围内计算统计量
-
计算效率优化:
- 使用生成器(Generator)加载大数据集
python复制def data_generator(data, batch_size): n = len(data) for i in range(0, n, batch_size): yield data[i:i+batch_size]- 对长时间序列采用滑动窗口采样
-
标签处理技巧:
- 预测任务:适当设置预测步长(horizon)和输入长度(lookback)
- 分类任务:考虑序列对齐和长度归一化
-
领域适应性问题:
- 工业数据往往存在设备间差异
- 建议采用领域自适应(Domain Adaptation)技术
5. 工具链与框架支持
5.1 专用数据处理库
-
Pandas:
- 基础时间序列操作
- 重采样、滚动窗口计算
-
tsfresh:
- 自动特征工程
python复制from tsfresh import extract_features features = extract_features(df, column_id="id", column_sort="time") -
sktime:
- 统一时序机器学习接口
- 支持多种任务类型
5.2 深度学习框架集成
-
TensorFlow:
- tf.keras.preprocessing.TimeseriesGenerator
- TFRecord序列化存储
-
PyTorch:
- torch.utils.data.Dataset自定义
- 内存映射处理大数据
-
PaddleTS:
- 内置多种时序数据集
- 端到端预测流程
在实际项目中,我通常会先使用Pandas进行初步探索和清洗,然后用sktime构建特征管道,最后根据模型需求转换为框架特定的数据格式。对于大规模数据,建议从一开始就考虑使用Parquet等高效格式存储,并建立完善的数据版本管理机制。
