python工具包-时间序列数据特征提取TsFresh
时间序列数据特征提取 TsFresh
-
简介
- sfresh是一个python包。(TimeSeries Fresh)
- 它自动计算大量的时间序列数据的特征。此外,该包包含评估这些特征对于回归或分类任务的解释能力和重要性的方法。
- 无论是基于时序数据的分类还是预测,tsfresh都将会是一个不错的选择。
-
安装
- 使用pip
pip install tsfresh
- 使用pip
-
简单使用
- 数据集
- 该包提供了一个机器人故障的数据集,可以加载用于尝试使用。(这个数据集不大)
- https://archive.ics.uci.edu/ml/datasets/Robot+Execution+Failures(这是原数据集地址,下载失败可以到这里下载,下载之后放到该包指定的data文件下,实在找不到数据集可以私戳我)
- 编辑环境
- 我这里使用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标识某个机器人是否故障。
- 对于特征集,id是不同的机器人标识,F_x到T_z是时序数据标识,也就是说,对于F_x这个特征,id为1的机器人有15个数据记录,按照time列的大小排序,其余F_y等也是如此。(注意:有时候时序数据不会这么友好,而是在一条记录中给出的)
-
- 简单抽取特征
- 代码如下
-
from tsfresh import extract_features extraced_features = extract_features(timeseries, column_id='id', column_sort='time') extraced_features.head()
-
- 提取过度
- 会显示进度,应该是使用tqdm模块
- 提取结果
- 可以看到提取特征之后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()
-
- 结果和上面是一致的
- 代码如下
- 现在你可以使用特征提取的数据集去训练模型了。
- 导入数据集
- 数据集
-
补充说明
- 我只是按照官方文档说明了tsfresh最浅显的功能,事实上,这个包特征提取能力要强大太多了。
- 更详细的内容可以查看官方教程(英文版,可以使用Chrome自带的翻译)。