时间序列数据特征提取 TsFresh

简介

Tsfresh(TimeSeries Fresh)是一个Python第三方工具包。 它自动计算大量的时间序列数据的特征。此外,该包包含评估这些特征对于回归或分类任务的解释能力和重要性的方法。无论是基于时序数据的分类还是预测,作为特征提取的工具,tsfresh将会是一个不错的选择。

安装

使用pip安装即可。

pip install tsfresh

简单使用

数据集

该包提供了一个机器人故障的数据集,可以加载用于尝试使用。(这个数据集不大)点击链接下载后放置到该包配置的data文件夹下(user文件夹中,实在找不到数据集可以私戳我)。

编辑环境

我这里使用Jupyter Notebook,其实什么环境都是可以的。

教程步骤

导入数据集

import tsfresh
from tsfresh.examples.robot_execution_failures import download_robot_execution_failures, load_robot_execution_failures
download_robot_execution_failures()
timeseries, y = load_robot_execution_failures()

数据探索

  • 训练数据
    对于特征集,id是不同的机器人标识,F_x到T_z是时序数据标识,也就是说,对于F_x这个特征,id为1的机器人有15个数据记录,按照time列的大小排序,其余F_y等也是如此。(注意:有时候时序数据不会这么友好,而是在一条记录中给出的
  • 测试数据
    对于标签集,利用id标识某个机器人是否故障。
    特征工程
    通过如下代码提取时间特征。
from tsfresh import extract_features
extraced_features = extract_features(timeseries, column_id='id', column_sort='time')
extraced_features.head()

提取过程会实时显示进度,应该是使用tqdm模块。

提取结果如下图所示。

C语言 tsfresh 基于时间序列 峰值提取 时间序列数据特征提取_数据集


可以看到提取特征之后id相同的特征序列合一了,但是每一个id的数据列数非常大,这些就是提取得到的特征。如id=1的数据关于F_x有15个数据,现在对着15个数据做统计学处理得到15个数据的平均值、方差等,每个值都是一列,其他F_y等也是如此,所以维度会很大。

简单过滤
不是所有统计值都有意义的,观察特征提取的数据集可以发现有很多无意义的控制,可以删除。(根据y集将相关性低的去除),代码如下。

from tsfresh import select_features
from tsfresh.utilities.dataframe_functions import impute
impute(extraced_features)
filtered_features = select_features(extraced_features, y)
filtered_features.head()

上述代码的结果为从4764列减少到了631列,这个降维还是比较有效的。

直接提取加过滤
可以使用如下代码。

from tsfresh import extract_relevant_features
directed_features = extract_relevant_features(timeseries, y, column_id='id', column_sort='time')
directed_features.head()

结果和上面是一致的,现在你可以使用特征提取的数据集去训练模型了。

C语言 tsfresh 基于时间序列 峰值提取 时间序列数据特征提取_数据_02

补充说明

只是按照官方文档说明了tsfresh最浅显的功能,事实上,这个包特征提取能力要强大太多了。