tslearn 是一个 Python 包,提供用于分析时间序列的机器学习工具。 这个包建立在(因此依赖于)scikit-learn、numpy 和 scipy 库之上。
使用to_time_series函数来生成时间序列数据
from tslearn.utils import to_time_series
time_series_lst=[1,3,5,7,9]
time_series_tslearn=to_time_series(time_series_lst)
print(time_series_tslearn,'\n',type(time_series_tslearn),'\n',time_series_tslearn.shape)
'''
[[1.]
[3.]
[5.]
[7.]
[9.]]
(5, 1)
'''
可以看出来,在 tslearn 中,时间序列数据只是一个二维 numpy 数组:其第一维对应于时间轴,第二维是特征维数(上述例子中为 1)。
如果我们想操作时间序列集,我们可以使用 to_time_series_dataset 将它们转换为三维数组。
如果集合中的时间序列大小不相等,则将 NaN 值附加到较短的值,结果数组的形状为 (n_ts, max_sz, d),其中 max_sz 是集合中时间序列的最大大小。
from tslearn.utils import to_time_series_dataset
time_series_lst_1=[1,3,5,7,9]
time_series_lst_2=[2,4,6,8]
time_series_tslearn=to_time_series_dataset([time_series_lst_1,
time_series_lst_2])
time_series_tslearn,time_series_tslearn.shape,type(time_series_tslearn)
'''
(array([[[ 1.],
[ 3.],
[ 5.],
[ 7.],
[ 9.]],
[[ 2.],
[ 4.],
[ 6.],
[ 8.],
[nan]]]),
(2, 5, 1),
numpy.ndarray)
'''
时间序列分类数据集 Time Series Classification Website
class tslearn.datasets.UCR_UEA_datasets()
tslearn.datasets.CachedDatasets — tslearn 0.5.2 documentation
如果要从文本文件中导入其他时间序列,预期格式为:
- 每条线代表一个时间序列(数据集中的时间序列不强制长度相同);
- 在每一行中,模态由 '|' 字符分隔。 (如果您的数据中只有一种模态,则不用);
- 在每种模态中,观测值由空格字符分隔。
这是一个存储两个维度为 2 的时间序列的文件的示例(第一个时间序列的长度为 3,第二个时间序列的长度为 2)。
1.0 0.0 2.5|3.0 2.0 1.0 1.0 2.0|4.333 2.12
这个表示的含义是:一共有两个时间序列(每一行是一个时间序列)
其中,第一个时间序列第一维的 单变量时间序列为'1.0 0.0 2.5' ;第二维的 单变量时间序列为 '3.0 2.0 1.0'
第二个时间序列第一维的单变量时间序列为'1.0 2.0'; 第二维的单变量时间序列为'4.333 2.12'
读取出来的效果是:
from tslearn.utils import save_time_series_txt, load_time_series_txt
time_series_read=load_time_series_txt('ts_time_series.txt')
time_series_read
'''
array([[[1. , 3. ],
[0. , 2. ],
[2.5 , 1. ]],
[[1. , 4.333],
[2. , 2.12 ],
[ nan, nan]]])
'''
根据 tslearn 标准加载和格式化数据后,下一步就是为机器学习模型提供数据。
大多数 tslearn 模型都继承自 scikit-learn 基类,因此与它们的交互与与 scikit-learn 模型的交互非常相似。
from tslearn.clustering import TimeSeriesKMeans
km = TimeSeriesKMeans(n_clusters=3, metric="dtw")
#表示kmeans使用3作为类别数量来进行聚类,距离函数为dtw
km.fit(time_series_read)