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

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

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()

数据挖掘心电图分类(三)之特征提取_第1张图片

data_test_A.head()

数据挖掘心电图分类(三)之特征提取_第2张图片
对心电特征进行行转列处理,同时为每个心电信号加入时间步特征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

数据挖掘心电图分类(三)之特征提取_第3张图片
将处理后的心电特征加入到训练数据中,同时将训练数据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

数据挖掘心电图分类(三)之特征提取_第4张图片

data_train[data_train["id"]==1]

数据挖掘心电图分类(三)之特征提取_第5张图片
接下来就是本节的主要内容:特征抽取,
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

数据挖掘心电图分类(三)之特征提取_第6张图片
可以看到:特征选择 train_features中包含了heartbeat_signals的787种常见的时间序列特征(所有这些特征的解释可以去看官方文档),
这其中有的特征可能为NaN值,因为当前数据不支持此类特征的计算,所以我们可以使用以下方式去除NaN值:

from tsfresh.utilities.dataframe_functions import impute

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

数据挖掘心电图分类(三)之特征提取_第7张图片
接下来,按照特征和响应变量之间的相关性进行特征选择。
这一过程包含两步:
首先单独计算每个特征和响应变量之间的相关性,然后进行特征选择,决定哪些特征可以被保留

from tsfresh import select_features

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

查看过滤后的特征:

train_features_filtered

数据挖掘心电图分类(三)之特征提取_第8张图片

你可能感兴趣的:(Python,机器学习,机器学习,数据分析,python)