我是靠谱客的博主 大胆钢笔,这篇文章主要介绍心电图心跳信号多分类预测-特征提取(三)1.时间序列数据特征预处理,现在分享给大家,希望可以做个参考。

目录

  • 1.时间序列数据特征预处理
    • 1.1 代码示例
      • 1.1.1. 导入包
      • 1.1.2 数据预处理
      • 1.1.3 使用 tsfresh 进行时间序列特征处理

1.时间序列数据特征预处理

1.1 代码示例

1.1.1. 导入包

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
# 包导入 import pandas as pd import numpy as np import tsfresh as tsf from tsfresh import extract_features, select_features from tsfresh.utilities.dataframe_functions import impute # 数据读取 data_train = pd.read_csv("./data/train.csv") data_test_A = pd.read_csv("./data/testA.csv") print(data_train.shape) print(data_test_A.shape)

在这里插入图片描述

复制代码
1
2
data_train.head()

在这里插入图片描述

复制代码
1
2
data_test_A.head()

在这里插入图片描述

1.1.2 数据预处理

复制代码
1
2
3
4
5
6
7
8
9
10
# 对心电特征进行行转列处理,同时为每个心电信号加入时间步特征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

在这里插入图片描述

复制代码
1
2
3
4
5
6
# 将处理后的心电特征加入到训练数据中,同时将训练数据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)

在这里插入图片描述

复制代码
1
2
data_train[data_train["id"]==1]

在这里插入图片描述
每个样本的心电特征都有205个时间步的心电信号组成。

1.1.3 使用 tsfresh 进行时间序列特征处理

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

这里用了提取了部分特征:

复制代码
1
2
3
4
5
from tsfresh.feature_extraction import extract_features, MinimalFCParameters train_features = extract_features(data_train, column_id='id', column_sort='time',default_fc_parameters=MinimalFCParameters()) train_features

在这里插入图片描述
全部特征:

复制代码
1
2
3
4
5
6
from tsfresh.feature_extraction import extract_features train_features = extract_features(data_train, column_id='id', column_sort='time') train_features

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

复制代码
1
2
3
python from tsfresh.utilities.dataframe_functions import impute impute(train_features_from_file)

在这里插入图片描述

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

复制代码
1
2
3
4
5
6
7
8
from tsfresh import select_features # 按照特征和数据label之间的相关性进行特征选择 train_features_filtered = select_features(train_features_from_file, data_train_label) train_features_filtered

在这里插入图片描述
接下来按照特征和响应变量之间的相关性进行特征选择,这一过程包含两步:

首先单独计算每个特征和响应变量之间的相关性,然后利用Benjamini-Yekutieli procedure 进行特征选择,决定哪些特征可以被保留。

复制代码
1
2
3
4
5
6
7
from tsfresh import select_features # 按照特征和数据label之间的相关性进行特征选择 train_features_filtered = select_features(train_features, data_train_label) train_features_filtered

在这里插入图片描述

经过特征选择,留下了700个特征。

最后

以上就是大胆钢笔最近收集整理的关于心电图心跳信号多分类预测-特征提取(三)1.时间序列数据特征预处理的全部内容,更多相关心电图心跳信号多分类预测-特征提取(三)1内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部