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设置,具体用法见操作文档。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 xhj的博客!