2021-03-22零基础入门数据挖掘-心跳信号分类预测


TASK03 特征工程

一、理论基础

1.学习目标

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

2.学习内容

  • 数据预处理
    – 时间序列数据格式处理
    – 加入时间步特征time
  • 特征工程
    – 时间序列特征构造
    – 特征筛选
    – 使用 tsfresh 进行时间序列特征处理

3.主要函数介绍

3.1Tsfresh 介绍

  • tsfresh是一个Python的时序数据特征挖掘的模块(官网https://tsfresh.readthedocs.io/en/latest/index.html),提取的特征可以用来描述或聚类基于提取特征的时间序列。此外,它们还可以用于构建在时间序列上执行分类/回归任务的模型。(链接:https://www.jianshu.com/p/de2f7d333b9f https://zhuanlan.zhihu.com/p/102186988)
  • 安装
    pip install tsfresh
    豆瓣源:pip install tsfresh -i http://pypi.douban.com/simple
    (这里我在安装的时候,在python3.8.2的版本下,虽然安装成功,但是在import tsfresh as tsf 的时候报错:找不到指定模块:DLL load failed while importing cympx.但是我在python3.5.3和python3.7.6版本下使用都是正常的,不知道是不是tsfresh0.18.0不支持python3.8.2.)
  • 特点
    TsFresh能自动地计算出大量的时间序列特征,即所谓的特征,这些特征描述了时间序列的基本特征,如峰数、平均值或最大值或更复杂的特征,如时间反转对称统计。同时通过假设检验来将特征消减到最能解释趋势的特征,称为去相关性。然后,可以使用这些特征集在时间序列上构造统计或机器学习模型,例如在回归或分类任务中使用。

3.2 tsfresh子模块介绍

官网https://tsfresh.readthedocs.io/en/latest/api/tsfresh.html
3.2.1.tsfresh.convenience package
Submodules

  • tsfresh.convenience.bindings module
    在给定列名和提取设置的情况下,在分组的dask dataframe上提取特征。
  • tsfresh.convenience.relevant_extraction module
    从时间序列容器中提取时间序列特征的高级便利函数。
    然后返回特征矩阵X,该特征矩阵X可能根据目标向量y的相关特征扩展。

3.2.2tsfresh.examples package
Submodules

  • tsfresh.examples.driftbif_simulation module
    对dissipative soliton的m维速度模拟了n个时间序列。
  • tsfresh.examples.har_dataset module
    下载并加载人类活动识别数据集。
  • tsfresh.examples.robot_execution_failures module
    下载机器人执行单元故障数据集。

3.2.3tsfresh.feature_extraction package
Submodules

  • tsfresh.feature_extraction.data module
    对数据应用包装特征提取函数“f”。在此之前,将数据转换为可用于特征提取的时间序列实例的正确形式。在调用之后,将其转换回dataframe以进行进一步处理。
  • tsfresh.feature_extraction.extraction module
    与tsfresh交互:提取特征
  • tsfresh.feature_extraction.feature_calculators module
  • tsfresh.feature_extraction.settings module

3.2.4 tsfresh.feature_selection package
Submodules

  • tsfresh.feature_selection.relevance module
  • tsfresh.feature_selection.selection module
  • tsfresh.feature_selection.significance_tests module

3.2.5 tsfresh.scripts package
Submodules

  • tsfresh.scripts.measure_execution_time module
  • tsfresh.scripts.run_tsfresh module
  • tsfresh.scripts.test_timing module

3.2.6 tsfresh.transformers package
Submodules

  • tsfresh.transformers.feature_augmenter module
  • tsfresh.transformers.feature_selector module
  • tsfresh.transformers.per_column_imputer module
  • tsfresh.transformers.relevant_feature_augmenter module

3.2.7 tsfresh.utilities package
Submodules

  • tsfresh.utilities.dataframe_functions module
  • tsfresh.utilities.distribution module
  • tsfresh.utilities.profiling module
  • tsfresh.utilities.string_manipulation module

4.时间序列预测方法介绍

借鉴来自:
https://zhuanlan.zhihu.com/p/67832773

序号方法
1时间序列基本规则法-周期因子法
2线性回归-利用时间特征做线性回归
3传统时序建模方法,ARMA/ARIMA等线性模型
4时间序列分解,使用加法模型或乘法模型将原始序列拆分为4部分:长期趋势变动T、季节变动S(显式周期,固定幅度、长度的周期波动)、循环变动C(隐式周期,周期长不具严格规则的波动)和不规则变动I
5特征工程着手,时间滑窗改变数据的组织方式,使用xgboost/LSTM模型/时间卷积网络等
6转化为监督学习数据集,使用xgboot/LSTM模型/时间卷积网络/seq2seq(attention_based_model)
7Facebook-prophet,类似于STL分解思路
8深度学习网络,结合CNN+RNN+Attention,作用各不相同互相配合
9将时间序列转化为图像,再应用基于卷积神经网络的模型做分析

二、代码实现

#导入包
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
#读取数据
train = pd.read_csv(r'D:\wy\data mining\for study\202103datawhale\train.csv')
test = pd.read_csv(r'D:\wy\data mining\for study\202103datawhale\testA.csv')
print(train.shape)
print(test.shape)

数据展示:
在这里插入图片描述
把心跳信号以逗号分隔拆开:
在这里插入图片描述
设置行的index
在这里插入图片描述
把level_0设置为index
在这里插入图片描述
把level_0的名字去掉
在这里插入图片描述
把之前的列名‘level_1’改为time,0改为heartbeat_signals
在这里插入图片描述
把心跳信号那列数据类型改为float
在这里插入图片描述
把训练集中的标签数据拿出来。
在这里插入图片描述
把训练集的label列去掉
在这里插入图片描述
把训练集的心跳信号去掉,留下id
在这里插入图片描述
把id和以逗号分隔后的训练集心跳信号时序数据合并
在这里插入图片描述
查看每个样本有多少个心跳信号
在这里插入图片描述
可以看到,每个样本的心电特征都由205个时间步的心电信号组成。

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

这部分我的电脑(内存8GB,CPU I5)没跑出来,内存不够。
在这里插入图片描述
下面贴一下别人跑出来的情况:
在这里插入图片描述
train_features数据展示如下:
在这里插入图片描述
特征选择 train_features中包含了heartbeat_signals的787种常见的时间序列特征。下面,这其中有的特征可能为NaN值(产生原因为当前数据不支持此类特征的计算),使用以下方式去除NaN值:

from tsfresh.utilities.dataframe_functions import impute
impute(train_features)

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

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

在这里插入图片描述

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值