目录
背景
第一部分 tsfresh包安装
第二部分 特征提取及介绍
第三部分 特征参数设置
第四部分 特征选择和过滤
参考文献及资料
背景
时间序列类型的数据是我们数据处理经常遇到的数据类型,这类数据主要特征是具备时间属性,即数据按照时间顺序先后产生。
https://www.iotword.com/4212.html
tsfresh是一个时间序列数据特征提取和特征选取工具包,主要用于时间序列数据的特征工程。官网地址为:https://github.com/blue-yonder/tsfresh 。
第一部分 tsfresh包安装
安装tsfresh可以使用pip命令进行安装:
1 | pip install tsfresh |
包文件介绍:
第一部分 项目结构
第二部分 特征提取及介绍
tsfresh中的特征提取代码在tsfresh/feature_extraction/feature_calculators.py中。我们逐个介绍这些特征的包。
对于特征分为两类:
- 简单类:特征提取只输出有个单个数值。
- 组合类:
1、时间序列平方和
函数:tsfresh.feature_extraction.feature_calculators.abs_energy(x)
$$
E=\sum_{i=1}^{n} x_{i}^{2},其中{x_i}_{i=1}^n为时间序列;
$$
源码如下:
1 | def abs_energy(x): |
2、时间序列一阶差分绝对和
函数:tsfresh.feature_extraction.feature_calculators.absolute_sum_of_changes(x)
$$
\sum_{i=1}^{n-1}\left|x_{i+1}-x_{i}\right|
$$
源码如下:
1 | def absolute_sum_of_changes(x): |
3、时间序列各阶自相关系数的聚合统计特征
函数:tsfresh.feature_extraction.feature_calculators.agg_autocorrelation(x, param)
该特征为各阶自相关系数的聚合统计特征。
$$
R(l)=\frac{1}{(n-l) \sigma^{2}} \sum_{i=1}^{n-l}\left(x_{i}-\mu\right)\left(x_{i+l}-\mu\right)
$$
parma(list) 包含一个字典{“f_agg”: x, “maxlag”, n} 其中x为聚合函数名,n为最大差分阶数。函数返回时序数据的各阶差分值之间的聚合(方差、均值)统计特征。
1 | def agg_autocorrelation(x, param): |
4、时间序列基于分块时序聚合值的线性回归
函数:tsfresh.feature_extraction.feature_calculators.agg_linear_trend(x, param)
源代码:
1 | def agg_linear_trend(x, param): |
5、时间序列近似熵
函数:tsfresh.feature_extraction.feature_calculators.approximate_entropy(x, m, r)
源代码如下:
1 | def approximate_entropy(x, m, r): |
6、时间序列自回归系数
函数:tsfresh.feature_extraction.feature_calculators.ar_coefficient(x, param)
衡量时序数据的的周期性、不可预测性和波动性。
源代码:
1 | def ar_coefficient(x, param): |
7、时间序列ADF检验
函数:tsfresh.feature_extraction.feature_calculators.augmented_dickey_fuller(x, param)
测试一个自回归模型是否存在单位根,衡量时序数据的平稳性。
源代码:
1 | def augmented_dickey_fuller(x, param): |
8、时间序列lag阶自相关性
函数:tsfresh.feature_extraction.feature_calculators.autocorrelation(x, lag)
计算lag阶滞后时序数据的自相关性(浮点数)
源代码:
1 | def autocorrelation(x, lag): |
9、时间序列分组熵
函数:tsfresh.feature_extraction.feature_calculators.binned_entropy(x, max_bins)
1 | def binned_entropy(x, max_bins): |
10、时序数据非线性度量
函数:tsfresh.feature_extraction.feature_calculators.c3(x, lag)
- 基于物理学的时序数据非线性度量(浮点数)
1 | def c3(x, lag): |
11、时间序列给定区间的统计量
函数:tsfresh.feature_extraction.feature_calculators.change_quantiles(x, ql, qh, isabs, f_agg)
1 | def change_quantiles(x, ql, qh, isabs, f_agg): |
12、时间序列复杂度
函数:tsfresh.feature_extraction.feature_calculators.cid_ce(x, normalize)
用来评估时间序列的复杂度,越复杂的序列有越多的谷峰。 (浮点数)
1 | def cid_ce(x, normalize): |
13、时间序列高于均值个数
函数:tsfresh.feature_extraction.feature_calculators.count_above_mean(x)
源码如下:
1 | def count_above_mean(x): |
14、时间序列低于均值个数
函数:tsfresh.feature_extraction.feature_calculators.count_below_mean(x)
源代码:
1 | def count_below_mean(x): |
15、时间序列Ricker小波分析
函数:tsfresh.feature_extraction.feature_calculators.cwt_coefficients(x, param)
- 连续的小波分析,ricker子波是地震勘探中常用的子波类型,ricker子波是基于波动方程严格推导得到的。(pandas.Series)
16、时间序列分块局部熵比率
tsfresh.feature_extraction.feature_calculators.energy_ratio_by_chunks(x, param)
将时序数据分块后,计算目标块数据的熵与全体的熵比率。当数据不够均分时,会将多余的数据在前面的块中散布。(浮点数)
17、时间序列绝对傅里叶变换的谱统计量
tsfresh.feature_extraction.feature_calculators.fft_aggregated(x, param)
18、时间序列傅里叶变换系数
tsfresh.feature_extraction.feature_calculators.fft_coefficient(x, param)
19、时间序列第一个最大值位置
函数:tsfresh.feature_extraction.feature_calculators.first_location_of_maximum(x)
源代码:
1 | def first_location_of_maximum(x): |
20、时间序列第一个最小值位置
函数:tsfresh.feature_extraction.feature_calculators.first_location_of_minimum(x)
源代码:
1 | def first_location_of_minimum(x): |
21、时间序列Langevin模型拟合的多项式系数
tsfresh.feature_extraction.feature_calculators.friedrich_coefficients(x, param)
22、时间序列数值是否有重复
函数:tsfresh.feature_extraction.feature_calculators.has_duplicate(x)
1 | def has_duplicate(x): |
23、时间序列最大值是否有重复
函数:tsfresh.feature_extraction.feature_calculators.has_duplicate_max(x)
1 | def has_duplicate(x): |
24、时间序列最小值是否有重复
函数:tsfresh.feature_extraction.feature_calculators.has_duplicate_min(x)
1 | def has_duplicate_min(x): |
25、时间序列分位数索引
tsfresh.feature_extraction.feature_calculators.index_mass_quantile(x, param)
26、时间序列峰度
tsfresh.feature_extraction.feature_calculators.kurtosis(x)
描述数据分布形态的陡缓程度
1 | def kurtosis(x): |
27、时间序列标准差是否大于r倍偏差
函数:tsfresh.feature_extraction.feature_calculators.large_standard_deviation(x, r)
源代码:
1 | def large_standard_deviation(x, r): |
28、时间序列最后一个最大值位置
函数:tsfresh.feature_extraction.feature_calculators.last_location_of_maximum(x)
源代码如下:
1 | def last_location_of_maximum(x): |
29、时间序列最后一个最大值位置
函数:tsfresh.feature_extraction.feature_calculators.last_location_of_minimum(x)
源代码:
1 | def last_location_of_minimum(x): |
30、时间序列的长度
函数:tsfresh.feature_extraction.feature_calculators.length(x)
源代码:
1 | def length(x): |
31、时间序列线性回归分析
tsfresh.feature_extraction.feature_calculators.linear_trend(x, param)
32、时间序列均值上的最长连续自列长度
tsfresh.feature_extraction.feature_calculators.longest_strike_above_mean(x)
33、时间序列均值下的最长连续自列长度
tsfresh.feature_extraction.feature_calculators.longest_strike_below_mean(x)
34、时间序列最大langevin不动点
tsfresh.feature_extraction.feature_calculators.max_langevin_fixed_point(x, r, m)
35、时间序列最大值
函数:tsfresh.feature_extraction.feature_calculators.maximum(x)
该特征为时间序列最大值。
$$
MAX = max{x_{i}}_{i=1}^{n}
$$
源代码为:
1 | def maximum(x): |
36、时间序列平均值
函数:tsfresh.feature_extraction.feature_calculators.mean(x)
该特征为时间序列平均值。
$$
Mean = Mean{x_{i}}_{i=1}^{n}
$$
源代码为:
1 | def mean(x): |
37、时间序列一阶差分绝对平均值
函数:tsfresh.feature_extraction.feature_calculators.mean_abs_change(x)
$$
\frac{1}{n}\sum_{i=1}^{n-1}\left|x_{i+1}-x_{i}\right|
$$
源代码如下:
1 | def mean_abs_change(x): |
38、时间序列一阶差分平均值
函数:tsfresh.feature_extraction.feature_calculators.mean_change(x)
$$
\frac{1}{n} \sum_{i=1}^{n-1}x_{i+1}-x_{i}
$$
源代码如下:
1 | def mean_change(x): |
39、时间序列二阶导数的中心均值
函数:tsfresh.feature_extraction.feature_calculators.mean_second_derivative_central(x)
$$
\frac{1}{n} \sum_{i=1}^{n-1}\frac{1}{2} (x_{i+2} - 2 \cdot x_{i+1} + x_i)
$$
源代码如下:
1 | def mean_second_derivative_central(x): |
40、时间序列中位数
函数:tsfresh.feature_extraction.feature_calculators.median(x)
$$
median = median{x_{i}}_{i=1}^{n}
$$
源代码如下:
1 | def median(x): |
41、时间序列最小值
函数:tsfresh.feature_extraction.feature_calculators.minimum(x)
$$
min = min{x_{i}}_{i=1}^{n}
$$
源代码如下:
1 | def minimum(x): |
42、时间序列的交叉次数
函数:tsfresh.feature_extraction.feature_calculators.number_crossing_m(x, m)
这个特征通俗的讲:给定阀值m,查找时间序列中任意两个连续值组成的数值区间是否涵盖m值。例如时间序列[1,2,1,2,3],对于给定的m=1.5,那么交叉数为3。
需要注意的:如果连续数值为a<b,数值区间为[a,b)。
1 | def number_crossing_m(x, m): |
43、时间序列搜寻不同峰值
函数:tsfresh.feature_extraction.feature_calculators.number_cwt_peaks(x, n)
使用连续小波变换寻找时间序列中的波峰。
1 | from scipy.signal import cwt, find_peaks_cwt, ricker, welch |
44、时间序列领域支撑峰值数量
函数:tsfresh.feature_extraction.feature_calculators.number_peaks(x, n)
对于给定的n值(整型),
源代码:
1 | def number_peaks(x, n): |
45、
tsfresh.feature_extraction.feature_calculators.partial_autocorrelation(x, param)
$$
\alpha_k = \frac{ Cov(x_t, x_{t-k} | x_{t-1}, \ldots, x_{t-k+1})}
{\sqrt{ Var(x_t | x_{t-1}, \ldots, x_{t-k+1}) Var(x_{t-k} | x_{t-1}, \ldots, x_{t-k+1} )}}
$$
46、时间序列重复数字个数占比
函数:tsfresh.feature_extraction.feature_calculators.percentage_of_reoccurring_datapoints_to_all_datapoints(x)
源代码如下:
1 | def percentage_of_reoccurring_datapoints_to_all_datapoints(x): |
47、时间序列重复数字占比
tsfresh.feature_extraction.feature_calculators.percentage_of_reoccurring_values_to_all_values(x)
源代码如下:
1 | def percentage_of_reoccurring_values_to_all_values(x): |
48、时间序列分数位
函数:tsfresh.feature_extraction.feature_calculators.quantile(x, q)
源代码:
1 | def quantile(x, q): |
49、时间序列指定区间数值个数
函数:tsfresh.feature_extraction.feature_calculators.range_count(x, min, max)
源代码如下:
1 | def range_count(x, min, max): |
50、时间序列sigma原则
函数:tsfresh.feature_extraction.feature_calculators.ratio_beyond_r_sigma(x, r)
源码入下:
1 | def ratio_beyond_r_sigma(x, r): |
51、时间序列唯一值数量占整体的比例
函数:tsfresh.feature_extraction.feature_calculators.ratio_value_number_to_time_series_length(x)
源代码如下:
1 | def ratio_value_number_to_time_series_length(x): |
52、时间序列样本熵
函数:tsfresh.feature_extraction.feature_calculators.sample_entropy(x)
通过度量信号中产生新模式的概率大小来衡量时间序列复杂性,新模式产生的概率越大,序列的复杂性就越大。样本熵的值越低,序列自我相似性就越高;样本熵的值越大,样本序列就越复杂。
源代码如下:
1 | def sample_entropy(x): |
53、
tsfresh.feature_extraction.feature_calculators.set_property(key, value)
54、时间序列分布偏度
函数:tsfresh.feature_extraction.feature_calculators.skewness(x)
偏度是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。
1 | def skewness(x): |
55、
tsfresh.feature_extraction.feature_calculators.spkt_welch_density(x, param)
56、时间序列的标准方差
函数:tsfresh.feature_extraction.feature_calculators.standard_deviation(x)
源代码如下:
1 | def standard_deviation(x): |
57、时间序列重复数据的总个数
函数:tsfresh.feature_extraction.feature_calculators.sum_of_reoccurring_data_points(x)
源代码如下:
1 | def sum_of_reoccurring_data_points(x): |
58、时间序列重复数据的和
函数:tsfresh.feature_extraction.feature_calculators.sum_of_reoccurring_values(x)
源代码如下:
1 | def sum_of_reoccurring_values(x): |
59、时间序列和
函数:tsfresh.feature_extraction.feature_calculators.sum_values(x)
该特征为时间序列和。
$$
SUM = \sum_{i=1}^{n} x_{i}^{2}
$$
源代码如下:
1 | def sum_values(x): |
60、
tsfresh.feature_extraction.feature_calculators.symmetry_looking(x, param)
61、
tsfresh.feature_extraction.feature_calculators.time_reversal_asymmetry_statistic(x, lag)
62、时间序列某个值的个数
函数:tsfresh.feature_extraction.feature_calculators.value_count(x, value)
源代码:
1 | def value_count(x, value): |
63、时间序列方差
函数:tsfresh.feature_extraction.feature_calculators.variance(x)
源代码如下:
1 | def variance(x): |
64、时间序列方差是否大于标准方差
函数:tsfresh.feature_extraction.feature_calculators.variance_larger_than_standard_deviation(x)
代码如下:
1 | def variance_larger_than_standard_deviation(x): |
65、
tsfresh.feature_extraction.feature_calculators.linear_trend_timewise(x, param)
第三部分 特征参数设置
第四部分 特征选择和过滤
https://gitmemories.com/cuge1995/awesome-time-series
第五部分 附录
案例数据下载:
参考文献及资料
1、https://blog.csdn.net/qq_39478403/article/details/115057005
2、https://tsfresh.readthedocs.io/en/latest/text/quick_start.html