数据挖掘————HeartbeatClassification

本文介绍了在天池比赛HeartbeatClassification中如何使用tsfresh库处理时间序列数据,包括数据预处理,如行转列和添加时间步特征,以及特征提取和选择。通过tsfresh提取了779个特征,并进一步筛选出700个与目标变量相关性高的特征,为后续的建模工作奠定了基础。
摘要由CSDN通过智能技术生成

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

在这里插入图片描述

data_train.head()

在这里插入图片描述
可以看到数据共有三列,其中第二列是心跳信号,是本次比赛的自变量,是在不同的时间上获取的心跳信号,第三列是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

在这里插入图片描述

# 将处理后的心电特征加入到训练数据中,同时将训练数据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]#可以看到每个人有205个时间步

在这里插入图片描述
可以看到,每个人的心跳信号有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

在这里插入图片描述
特征选择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

在这里插入图片描述
可以看到经过特征选择,留下700个特征。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值