概述
文章目录
- 前言
- 一、学习目标
- 二、内容介绍
- 三、代码示例
- 总结
前言
此部分为零基础入门数据挖掘-心跳信号分类预测的 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 特征提取前言一、学习目标二、内容介绍三、代码示例总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复