Tsfresh——自动化特征工程工具

改进模型的潜在途径之一是:生成更多的潜在特征,输入更多的样本。

Tsfresh是处理时间序列数据的特征工程工具,能够自动计算大量时间序列特征,如平均值、最大值、峰度等。之后,可以使用这些特征集构建机器学习模型。

本文以天池-心跳信号分类预测为例,演示tsfresh工具的用法。

使用示例

1. 合并train和test数据

合并数据集,对整体数据做统一的特征工程。(注意需要为test数据添加label列,值为-1,方便后续操作)

1
2
data_test['label'] = -1
all_data = pd.concat((data_train, data_test)).reset_index(drop = True)
2. 对原特征一列拆成多列,并为每条数据添加时间特征time
1
all_heatbeat_df = all_data['heartbeat_signals'].str.split(',', expand = True).stack()
3. Index处理
1
2
3
4
5
all_heatbeat_df = all_heatbeat_df.reset_inex()
all_heatbeat_df = all_heatbeat_df.set_inex('level_0')
all_heatbeat_df.index.name = None
all_heatbeat_df.rename(columns={'level_1':'time', 0:'heartbeat_signals', inpalce = True})
all_heatbeat_df['heartbeat_signals'].astype(float)
4. label列单独存储,不进入tsfresh
1
2
3
all_data_label = all_data['label']
all_data = all_data.drop['label', axis=1].drop['heartbeat_signals', axis=1]
all_data = all_data.join(all_heatbeat_df)
5. tsfresh特征抽取
1
2
from tsfresh import extract_features
all_features = extract_features(all_data, column_id='id', column_sort='time')
6.特征选择
1
2
3
#删除nan值
from tsfresh.utilities.dataframe_functions import impute
impute(all_features)
7.相关性特征提取

衍生众多特征之后,许多特征之间可能有很多相关性,需进一步筛选。

1
2
from tsfresh import select_features
all_features_filtered = select_features(all_features, all_data_label)
8.特征重命名,重新添加label
1
2
3
num = all_features_filtered.columns.size
all_features_filtered.columns = ['f_' + str(i) for i in range (0, num)]
all_features_filtered['label'] = all_data_label

tsfresh包深入探究

1. 筛选特征的方法

上文采用了手工打标签的方式划分训练集和测试集,略显麻烦,可以通过tsfresh的内置方法来提取训练数据。

1
kind_to_fc_parameters = tsfresh.feature_extration.settings.from_columns(directed_features)

生成的params为训练集的特征字典,可以当作参数传入后续计算中。

2. 自定义特征衍生规则

tsfresh自带的衍生规则以字典的形式存放,可以直接调用,也可以自定义。

1
2
3
4
5
6
#单个特征计算
tsfresh.feature_extraction.feature_calculators.abs_energy(x)

#设定衍生规则
from tsfresh.featureextraction import extractfeatures
params = {'fft_coefficient:[{'coef':0, 'attr':'abs'}], 'kurtosis': None, 'skewness': None}

后续可以在extractfeatures中设置defaultparameters = params,具体用法见操作文档

3. 减小内存使用

tsfresh默认参数太吃内存,且耗时长,笔者i7的16G笔记本最多只能跑到60%的进度就会卡住,天池notebook和谷歌colab都是没跑出结果就断线了,硬要跑的话只能租个高配服务器,或者调整衍生特征的数量,通过chunksize设置,具体用法见操作文档

欢迎关注我们的公众号
0%