tsfresh是一个Python的时序数据特征挖掘的模块(官网https://tsfresh.readthedocs.io/en/latest/index.html),提取的特征可以用来描述或聚类基于提取特征的时间序列。此外,它们还可以用于构建在时间序列上执行分类/回归任务的模型。
tsfresh能够提取出超过64种特征。本篇主要介绍时间序列时间的特征提取
和特征选择
。编程环境jupyter notebook。
1. 源码和数据地址
链接:https://pan.baidu.com/s/1VjHgdcIx9WY3VigHMkBCKw
提取码:gqs1
2. TsFresh安装
pip install tsfresh
3. 代码部分说明
3.1 数据下载
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()
数据展示:
timeseries.describe()
y.head()
3.2 从文件读取数据
import pandas as pd
import numpy as np
timeseries_csv = pd.read_csv('load_robot_execution_failures_timeseries.csv')
timeseries_csv.describe()
y_csv = pd.read_csv('load_robot_execution_failures_y.csv',usecols = ['index','value'])
y_csv= pd.Series(np.array(y_csv['value']).tolist(),index =np.array(y_csv['index']).tolist())
y_csv.head()
4. 提取特征
提取特征主要通过 extract_features
函数实现,包含有多种参数提取模式,以下给出常见的几种:
- 默认参数
- ComprehensiveFCParameters:全面特征提取,包括所有没有参数的特征和所有有参数的特征,每个特征都有不同的参数组合。 ;已经封装好,并且把以上特征的参数之类的写好,直接提取即可;
- EfficientFCParameters:是 ComprehensiveFCParameters 的子类,用于计算那些时间复杂度低的特征;去除 high computational costs 的特征; 如果运行时性能起主要作用,则可以使用此功能。
- MinimalFCParameters:是 ComprehensiveFCParameters 的子类,选择最小参数进行计算。仅包含少数功能,可用于快速测试。
虽然 tsfresh 能够为时序数据提取多种有效特征,其也有不适合使用的场景,如:
- 用于流式数据(流式数据是指通常用于在线操作的数据,而时间序列数据通常用于离线操作)
- 在提取的特征上训练模型
- 用于高度不规则的时间序列
4.1 默认参数
from tsfresh.feature_extraction import extract_features
extracted_features_0 = extract_features(timeseries, column_id="id", column_sort="time")
extracted_features_0.shape
4.2 ComprehensiveFCParameters参数
from tsfresh.feature_extraction import extract_features, ComprehensiveFCParameters
# 使用ComprehensiveFCParameters参数
settings = ComprehensiveFCParameters()
extracted_features_1 = extract_features(timeseries, column_id="id", column_sort="time",default_fc_parameters=settings)
extracted_features_1.shape
4.3 EfficientFCParameters参数
from tsfresh.feature_extraction import extract_features, EfficientFCParameters
settings = EfficientFCParameters()
extracted_features_2 = extract_features(timeseries, column_id="id", column_sort="time",default_fc_parameters=settings)
extracted_features_2.shape
4.4 MinimalFCParameters参数
from tsfresh.feature_extraction import extract_features, MinimalFCParameters
settings = MinimalFCParameters()
extracted_features_3 = extract_features(timeseries, column_id="id", column_sort="time",default_fc_parameters=settings)
extracted_features_3.shape
5. 特征选择
提取特征主要通过 select_features
函数实现,包含有多种参数提取模式,以下给出常见的几种:
- 默认参数
- ComprehensiveFCParameters参数
- EfficientFCParameters参数
- MinimalFCParameters参数
5.1 默认参数
from tsfresh import select_features
from tsfresh.utilities.dataframe_functions import impute
impute(extracted_features_0)
features_filtered_0 = select_features(extracted_features_0, y) #特征选择
features_filtered_0.shape
5.2 ComprehensiveFCParameters参数
from tsfresh import select_features
from tsfresh.utilities.dataframe_functions import impute
impute(extracted_features_1)
features_filtered_1 = select_features(extracted_features_1, y) #特征选择
features_filtered_1.shape
5.3 EfficientFCParameters参数
from tsfresh import select_features
from tsfresh.utilities.dataframe_functions import impute
impute(extracted_features_2)
features_filtered_2 = select_features(extracted_features_2, y) #特征选择
features_filtered_2.shape
5.4 MinimalFCParameters参数
from tsfresh import select_features
from tsfresh.utilities.dataframe_functions import impute
impute(extracted_features_3)
features_filtered_3 = select_features(extracted_features_3, y) #特征选择
features_filtered_3.shape
6. 特征提取和选择同时进行
提取特征主要通过 extract_relevant_features
函数实现,同样包含有多种参数提取模式。
6.1 默认参数
from tsfresh import extract_relevant_features
features_filtered_direct_0 = extract_relevant_features(timeseries,y, column_id="id", column_sort="time")
features_filtered_direct_0.shape
6.2 ComprehensiveFCParameters参数
from tsfresh.feature_extraction import ComprehensiveFCParameters
from tsfresh import extract_relevant_features
settings = ComprehensiveFCParameters()
features_filtered_direct_1 = extract_relevant_features(timeseries,y, column_id="id", column_sort="time",default_fc_parameters=settings)
features_filtered_direct_1.shape
6.3 EfficientFCParameters参数
from tsfresh.feature_extraction import EfficientFCParameters
from tsfresh import extract_relevant_features
settings = EfficientFCParameters()
features_filtered_direct_2 = extract_relevant_features(timeseries,y, column_id="id", column_sort="time",default_fc_parameters=settings)
features_filtered_direct_2.shape
6.4 MinimalFCParameters参数
from tsfresh.feature_extraction import MinimalFCParameters
from tsfresh import extract_relevant_features
settings = MinimalFCParameters()
features_filtered_direct_3 = extract_relevant_features(timeseries,y, column_id="id", column_sort="time",default_fc_parameters=settings)
features_filtered_direct_3.shape
7. 常用的特征提取函数详解
这里主要参考博客:
tsfresh 中包含有许多提取特征的函数,首先我们导入相应的数据包,如下所示:
from tsfresh.feature_extraction.feature_calculators import *
7.1 abs_energy(x)
【实现功能】:求取时间序列的平方和
【参数介绍】:
- x(pandas.Series) 需要计算特征的时间序列
- 返回值:特征值
- 返回值类型:float
- 函数类型:简单
【函数定义】:
def abs_energy(x):
"""
Returns the absolute energy of the time series which is the sum over the squared values
.. math::
E = \\sum_{i=1,\\ldots, n} x_i^2
:param x: the time series to calculate the feature of
:type x: numpy.ndarray
:return: the value of this feature
:return type: float
"""
if not isinstance(x, (np.ndarray, pd.Series)):
x = np.asarray(x)
return np.dot(x, x)
7.2 absolute_sum_of_changes(x)
【实现功能】:返回序列x的连续变化的绝对值之和
【参数介绍】:
- x(pandas.Series) 需要计算特征的时间序列
- 返回值:特征值
- 返回值类型:float
- 函数类型:简单
7.3 agg_autocorrelation(x, param)
【实现功能】:计算聚合函数f_agg(例如方差或者均值)处理后的自相关性,在一定程度可以衡量数据的周期性质,l表示滞后值,如果某个l计算出的值比较大,表示改时序数据具有l周期性质。
其中,n是时间序列Xi的长度,σ2是方差,μ表示均值
【参数介绍】:
- x(pandas.Series) 需要计算特征的时间序列
- 返回值:特征值
- 返回值类型:float
- 函数类型:简单
7.4 agg_linear_trend(x, param)
【实现功能】:对时序分块聚合后(max, min, mean, meidan),然后聚合后的值做线性回归,算出 pvalue(),rvalue(相关系数), intercept(截距), slope(斜率), stderr(拟合的标准差)。
7.5 approximate_entropy(x, m, r)
近似熵,用来衡量一个时间序列的周期性、不可预测性和波动性。
7.6 ar_coefficient(x, param)
自回归模型系数,适用于极大似然估计的AR(k)模型,参数k是滞后项。
7.7 autocorrelation(x, lag)
滞后lag的自相关系数。
参考资料
【1】 tsfresh官网:https://tsfresh.readthedocs.io/en/latest/text/introduction.html
【2】时序数据处理工具-时间序列数据特征提取TsFresh:https://blog.csdn.net/qq_22290797/article/details/108637240
【3】时间序列 工具库学习(1) tsfresh特征提取、特征选择