我是靠谱客的博主 洁净月饼,最近开发中收集的这篇文章主要介绍心电图信号分类预测——Task3 特征提取前言一、学习目标二、内容介绍三、代码示例总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • 一、学习目标
  • 二、内容介绍
  • 三、代码示例
  • 总结


前言

此部分为零基础入门数据挖掘-心跳信号分类预测的 Task3 特征工程部分,带你来了解时间序列特征工程以及分析方法


提示:以下是本篇文章正文内容,下面案例可供参考

一、学习目标

  • 学习时间序列数据的特征预处理方法
  • 学习时间序列特征处理工具 Tsfresh(TimeSeries Fresh)的使用

二、内容介绍

1.数据预处理

  • 时间序列数据格式处理
  • 加入时间步特征time

2.特征工程

  • 时间序列特征构造
  • 特征筛选
  • 使用 tsfresh 进行时间序列特征处理

三、代码示例

1.读入数据

import pandas as pd
import numpy as np
import tsfresh as tsf
#载入数据
path = 'C:\Users\TINKPAD\Desktop\python_work\kaggle心电图信号多分类预测\'
data_train = pd.read_csv(path+'train.csv')
data_test_A = pd.read_csv(path+'testA.csv')

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

输出的结果如下:

       time  heartbeat_signals
0         0           0.991230
0         1           0.943533
0         2           0.764677
0         3           0.618571
0         4           0.379632
    ...                ...
99999   200           0.000000
99999   201           0.000000
99999   202           0.000000
99999   203           0.000000
99999   204           0.000000

[20500000 rows x 2 columns]

接下来

# 将处理后的心电特征加入到训练数据中,同时将训练数据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的数据集形式如下所示:

          id  time  heartbeat_signals
0          0     0           0.991230
0          0     1           0.943533
0          0     2           0.764677
0          0     3           0.618571
0          0     4           0.379632
     ...   ...                ...
99999  99999   200           0.000000
99999  99999   201           0.000000
99999  99999   202           0.000000
99999  99999   203           0.000000
99999  99999   204           0.000000

[20500000 rows x 3 columns]
#可以看到,每个样本的心电特征都由205个时间步的心电信号组成
data_train[data_train["id"]==1]
   id  time  heartbeat_signals
1    1     0           0.971482
1    1     1           0.928969
1    1     2           0.572933
1    1     3           0.178457
1    1     4           0.122962
..  ..   ...                ...
1    1   200           0.000000
1    1   201           0.000000
1    1   202           0.000000
1    1   203           0.000000
1    1   204           0.000000

[205 rows x 3 columns]

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

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

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

可以得到提取出来的特征:

id		sum_values		abs_energy		mean_abs_change		mean_change 	...
0			38.927945			18.216197			0.019894					-0.004859			...
1			19.445634			7.705092			0.019952					-0.004762			...
2			21.192974			9.140423			0.009863					-0.004902			...
...		...						...						...								...						...
99997	40.897057			16.412857			0.019470					-0.004538			...
99998	42.333303			14.281281			0.017032					-0.004902			...
99999	53.290117			21.637471			0.021870					-0.004539			...

100000 rows × 779 columns
  • 3.2特征选择 train_features中包含了heartbeat_signals的779种常见的时间序列特征(所有这些特征的解释可以去看官方文档),这其中有的特征可能为NaN值(产生原因为当前数据不支持此类特征的计算),使用以下方式去除NaN值:
from tsfresh.utilities.dataframe_functions import impute

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

可以看到经过特征选择,留下了700个特征。


总结

tsfresh模块的安装较为麻烦,如果没有安装VC++的话,建议从网上下载tsfresh的安装包,再进行安装;其次特征提取对电脑配置的要求较高,花费时间较长,只要有耐心一个小时左右基本上还是能够提取出来的.

最后

以上就是洁净月饼为你收集整理的心电图信号分类预测——Task3 特征提取前言一、学习目标二、内容介绍三、代码示例总结的全部内容,希望文章能够帮你解决心电图信号分类预测——Task3 特征提取前言一、学习目标二、内容介绍三、代码示例总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部