ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据挖掘心电图分类(三)之特征提取

2021-03-21 21:33:57  阅读:304  来源: 互联网

标签:features df 心电图 特征提取 train 数据挖掘 heartbeat data 特征


在读取完数据,进行了数据分析之后,我们就要对样本进行特征提取来建模了。所谓的特征就是希望可以通过特征来得到、分辨出这一个样本是由什么组成的。

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("../dataset/train.csv")
data_test_A = pd.read_csv("../dataset/testA.csv")

print(data_train.shape)
print(data_test_A.shape)

可以看到结果和上一节的是一样的((100000, 3) 以及 (20000, 2))
然后接着打印,查看一下数据是否正确:

data_train.head()

在这里插入图片描述

data_test_A.head()

在这里插入图片描述
对心电特征进行行转列处理,同时为每个心电信号加入时间步特征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

在这里插入图片描述
将处理后的心电特征加入到训练数据中,同时将训练数据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[data_train["id"]==1]

在这里插入图片描述
接下来就是本节的主要内容:特征抽取,
Tsfresh(TimeSeries Fresh)是一个Python第三方工具包。 它可以自动计算大量的时间序列数据的特征。
此外,该包还包含了特征重要性评估、特征选择的方法,
因此,不管是基于时序数据的分类问题还是回归问题,tsfresh都会是特征提取一个不错的选择。

from tsfresh import extract_features

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

过程要很久,我这里花了将近40分钟,一开始我还以为是程序卡掉了。
在这里插入图片描述
查看特征

train_features

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

from tsfresh.utilities.dataframe_functions import impute

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

在这里插入图片描述
接下来,按照特征和响应变量之间的相关性进行特征选择。
这一过程包含两步:
首先单独计算每个特征和响应变量之间的相关性,然后进行特征选择,决定哪些特征可以被保留

from tsfresh import select_features

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

查看过滤后的特征:

train_features_filtered

在这里插入图片描述

标签:features,df,心电图,特征提取,train,数据挖掘,heartbeat,data,特征
来源: https://blog.csdn.net/weixin_40586929/article/details/115056241

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有