数据挖掘————HeartbeatClassification

Task3 特征工程
在这一篇中以天池比赛的HeartbeatClassification提供的数据作为对象,提取数据特征,这在数据挖掘中是非常关键的步骤,通过此步骤可以得到大量优秀的特征,方便接下来使用机器学习方法或其他方法建模。
由于本次比赛的数据是时间序列数据,所以主要介绍提取时间序列特征的tsfresh包里的方法。这在比赛中是经常见到的工具。

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('Train.csv')
data_test_A=pd.read_csv('TestA.csv')
print(data_train.shape)
print(data_test_A.shape)
data_test_A.head()

数据挖掘————HeartbeatClassification

data_train.head()

数据挖掘————HeartbeatClassification
可以看到数据共有三列,其中第二列是心跳信号,是本次比赛的自变量,是在不同的时间上获取的心跳信号,第三列是label也就是因变量,反应此人是否健康。
3.3.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

数据挖掘————HeartbeatClassification

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

数据挖掘————HeartbeatClassification

data_train[data_train['id']==1]#可以看到每个人有205个时间步

数据挖掘————HeartbeatClassification
可以看到,每个人的心跳信号有206个,分别是206个时间步
3.3.3 使用tsfresh进行时间序列处理
特征提取时间很长

from tsfresh import extract_features

train_features=extract_features(data_train,column_id='id',column_sort='time')
# 按时间排序
train_features

数据挖掘————HeartbeatClassification
特征选择train_features中包含了heartbeat_signals的779种常见的时间序列特征,这其中的特征可能为NaN值,这是由于当前数据不支持此类特征的计算,使用以下方法去除:

在这里插入代码片from tsfresh.utilities.dataframe_functions import impute
# 去除抽取特征中的NaN值
impute(train_features)

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


from tsfresh import select_features
train_features_filtered=select_features(train_features,data_train_label)
train_features_filtered

数据挖掘————HeartbeatClassification
可以看到经过特征选择,留下700个特征。

上一篇:论文笔记 DXSLAM: A Robust and Efficient Visual SLAM System with Deep Features


下一篇:高翔myslam前端代码