tslearn时间序列分析入门指南
什么是tslearn
tslearn是一个专门用于时间序列数据分析的Python机器学习库。它建立在scikit-learn的基础之上,提供了专门针对时间序列数据的预处理、聚类、分类和回归等算法。与常规机器学习库不同,tslearn专注于处理具有时间依赖性的数据,这在金融分析、传感器数据处理、语音识别等领域尤为重要。
时间序列数据格式
在tslearn中,时间序列有特定的数据格式要求,理解这一点是使用该库的基础。
单个时间序列格式
单个时间序列在tslearn中被表示为二维numpy数组:
- 第一维(行)对应时间轴
- 第二维(列)对应特征维度(默认为1)
from tslearn.utils import to_time_series
# 创建一个简单的时间序列
my_series = [1, 3, 4, 2]
formatted_series = to_time_series(my_series)
print(formatted_series.shape) # 输出: (4, 1)
时间序列数据集格式
当处理多个时间序列时,tslearn使用三维数组:
- 第一维:时间序列数量
- 第二维:最大时间长度
- 第三维:特征维度
对于不等长的时间序列,较短的序列会用NaN填充至最长序列的长度。
from tslearn.utils import to_time_series_dataset
series1 = [1, 3, 4, 2]
series2 = [1, 2, 4, 2]
series3 = [1, 2, 4, 2, 2]
dataset = to_time_series_dataset([series1, series2, series3])
print(dataset.shape) # 输出: (3, 5, 1)
加载标准数据集
tslearn提供了便捷的方法来加载标准时间序列数据集,这对于快速验证算法非常有用。
from tslearn.datasets import UCR_UEA_datasets
# 加载TwoPatterns数据集
X_train, y_train, X_test, y_test = UCR_UEA_datasets().load_dataset("TwoPatterns")
print(X_train.shape) # 训练集形状
print(y_train.shape) # 训练标签形状
从文本文件加载数据
tslearn支持从特定格式的文本文件中加载时间序列数据。文件格式要求:
- 每行代表一个时间序列
- 多模态数据用"|"分隔
- 同一模态内的观测值用空格分隔
示例文件内容:
1.0 0.0 2.5|3.0 2.0 1.0
1.0 2.0|4.333 2.12
对应的加载代码:
from tslearn.utils import load_time_series_txt, save_time_series_txt
# 加载数据
data = load_time_series_txt("data.txt")
# 保存数据
save_time_series_txt("saved_data.txt", data)
时间序列机器学习
tslearn提供了多种时间序列专用的机器学习算法,使用方式与scikit-learn类似。
时间序列聚类示例
from tslearn.clustering import TimeSeriesKMeans
# 创建基于动态时间规整(DTW)的K-Means聚类器
km = TimeSeriesKMeans(n_clusters=3, metric="dtw")
# 拟合数据
km.fit(X_train)
关键参数说明
在时间序列机器学习中,选择合适的距离度量至关重要。tslearn支持多种时间序列专用度量方法,包括:
- 动态时间规整(DTW)
- 软动态时间规整(Soft-DTW)
- 最长公共子序列(LCSS)
- 编辑距离(EDR)
- 时间序列形状距离(TWE)
最佳实践建议
- 数据预处理:在使用算法前,考虑对时间序列进行标准化或归一化处理
- 度量选择:根据数据特性选择合适的距离度量
- 不等长处理:对于不等长时间序列,注意填充策略的影响
- 计算效率:某些度量(如DTW)计算成本较高,大数据集可能需要近似算法
通过掌握这些基础知识,您已经可以开始使用tslearn进行时间序列分析的实际项目了。后续可以进一步探索更高级的功能,如时间序列分类、回归和异常检测等。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考