1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【Datawhale|天池】心跳信号分类预测 (3) - 特征工程 ☞ tsfresh 时序特征提取

【Datawhale|天池】心跳信号分类预测 (3) - 特征工程 ☞ tsfresh 时序特征提取

时间:2021-10-02 23:59:37

相关推荐

【Datawhale|天池】心跳信号分类预测 (3) - 特征工程 ☞ tsfresh 时序特征提取

目录

导入包读取数据数据预处理使用 tsfresh 提取特征References

导入包

import pandas as pdimport numpy as npimport tsfresh as tsffrom tsfresh import extract_features, select_featuresfrom tsfresh.utilities.dataframe_functions import impute

读取数据

# 数据读取data_train = pd.read_csv("data/train.csv", dtype)data_test_A = pd.read_csv("data/testA.csv")print(data_train.shape)print(data_test_A.shape)

(100000, 3)(20000, 2)

data_train.head()

data_test_A.head()

数据预处理

# 对心电特征进行行转列处理,同时为每个心电信号加入时间步特征timetrain_heartbeat_df = data_train["heartbeat_signals"].str.split(",", expand=True).stack()train_heartbeat_df = train_heartbeat_df.reset_index()train_heartbeat_df = train_heartbeat_df.set_index("level_0")train_heartbeat_df.index.name = Nonetrain_heartbeat_df.rename(columns={"level_1":"time", 0:"heartbeat_signals"}, inplace=True)train_heartbeat_df["heartbeat_signals"] = train_heartbeat_df["heartbeat_signals"].astype(float)train_heartbeat_df

20500000 rows × 2 columns

# 将处理后的心电特征加入到训练数据中,同时将训练数据label列单独存储data_train_label = data_train["label"]data_train = data_train.drop("label", axis=1)

data_train = data_train.drop("heartbeat_signals", axis=1)

data_train = data_train.join(train_heartbeat_df)

data_train.head()

data_train.shape

(20500000, 3)

使用 tsfresh 提取特征

特征抽取Tsfresh(TimeSeries Fresh)是一个Python第三方工具包。 它可以自动计算大量的时间序列数据的特征。此外,该包还包含了特征重要性评估、特征选择的方法,因此,不管是基于时序数据的分类问题还是回归问题,tsfresh都会是特征提取一个不错的选择.

# 特征提取train_features = extract_features(data_train, column_id='id', column_sort='time')train_features

Feature Extraction: 100%|██████████| 200/200 [46:18<00:00, 13.89s/it]

100000 rows × 787 columns

特征选择 train_features中包含了heartbeat_signals的 787 种常见的时间序列特征(所有这些特征的解释可以去看官方文档),这其中有的特征可能为NaN值(产生原因为当前数据不支持此类特征的计算),使用以下方式去除NaN值:

# 去除抽取特征中的NaN值impute(train_features)

/data1/wanggengxin/anaconda3/envs/tf15/lib/python3.7/site-packages/tsfresh/utilities/dataframe_functions.py:172: RuntimeWarning: The columns ['heartbeat_signals__query_similarity_count__query_None__threshold_0.0'] did not have any finite values. Filling with zeros.df.iloc[:, np.where(is_col_non_finite)[0]].columns.values), RuntimeWarning)

100000 rows × 787 columns

接下来,按照特征和响应变量之间的相关性进行特征选择,这一过程包含两步:首先单独计算每个特征和响应变量之间的相关性,然后利用Benjamini-Yekutieli procedure [1] 进行特征选择,决定哪些特征可以被保留。

# 按照特征和数据label之间的相关性进行特征选择train_features_filtered = select_features(train_features, data_train_label)train_features_filtered

100000 rows × 707 columns

可以看到经过特征选择,留下了 707 个特征。

保存到文件,避免特征丢失:

train_features_filtered.to_csv('data/train_features_filtered_col707.csv', index_label='id')

References

[1] Benjamini, Y. and Yekutieli, D. (2001). The control of the false discovery rate in multiple testing under dependency. Annals of statistics, 1165–1188

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。