数据挖掘之心跳信号分类预测--笔记三--特征工程

数据挖掘之心跳信号分类预测--笔记三--特征工程

tsfresh是什么

tsfresh是用于从时间序列中自动提取特征的python包。
tsfresh官网.这个包的使用从官网中的例子能较好的快速上手。

特征提取

tsfresh提取特征的过程比较吃内存,也很耗时间,得谨慎使用。
当然也可以使用一些技巧,例如将数据划分几块分别进行特征提取最后再拼接在一起。

原始数据

特征提取前的原始数据,如下图所示:
在这里插入图片描述

数据预处理

需要进行一些预处理才能使用tsfresh进行特征提取。因为heartbeat_signals是一个序列而不是数值,无法进行统计计算。
这里先对heartbeat_signals以逗号为分隔符,划分出heartbeat_signals每个时间点的数据值,然后对index和columns进行reset。

# 对心电特征进行行转列处理,同时为每个心电信号加入时间步特征time
train_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 = None
train_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

结果如下图所示:
在这里插入图片描述
tsfresh还需要一个id列

# 将处理后的心电特征加入到训练数据中,同时将训练数据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

结果如下图所示:
在这里插入图片描述

特征提取

将data_train这dataframe放到tsfresh中进行特征提取:

from tsfresh import extract_features
train_features = extract_features(data_train, column_id='id', column_sort='time')
train_features

结果生成了787行特征,部分特征如下图所示:
在这里插入图片描述

处理NaN值

其中共有12列存在空值
在这里插入图片描述
先清除空值

from tsfresh.utilities.dataframe_functions import impute

# 去除抽取特征中的NaNimpute(train_features)

一开始我以为这个清除空值是将存在空值的列删除掉。
但其实tsfresh进行了一个补全操作,原文:
在这里插入图片描述
原文中说到,遇到NaN值会用同一列的均值进行替换;同时遇到-inf值会用同一列的最小值替换;遇到+inf值会用同一列的最大值替换。

特征筛选

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

from tsfresh import select_features

train_features_filtered = select_features(train_features, data_train_label)
train_features_filtered

观察了一下结果最终保留了707列数据,应该是删除了一些值全部相同的列(没找到官网对这一部分算法的解释):
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值