Task3 特征工程

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

赛题:零基础入门数据挖掘-心跳信号分类预测

项目地址:
比赛地址:

3.1 学习目标

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

3.2 内容介绍

  • 数据预处理

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

3.3 代码示例

3.3.1 导入包并读取数据

# 包导入
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)
(100000, 3)
(20000, 2)
data_train.head()
     id      heartbeat_signals                                   label
0       0           0.9912297987616655,0.9435330436439665,0.764677…     0.0
1       1           0.9714822034884503,0.9289687459588268,0.572932…     0.0
2       2           1.0,0.9591487564065292,0.7013782792997189,0.23…     2.0
3       3           0.9757952826275774,0.9340884687738161,0.659636…     0.0
4       4           0.0,0.055816398940721094,0.26129357194994196,0…     2.0
data_test_A.head()
     id      heartbeat_signals
0       100000  0.9915713654170097,1.0,0.6318163407681274,0.13…
1       100001  0.6075533139615096,0.5417083883163654,0.340694…
2       100002  0.9752726292239277,0.6710965234906665,0.686758…
3       100003  0.9956348033996116,0.9170249621481004,0.521096…
4       100004  1.0,0.8879490481178918,0.745564725322326,0.531…

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
         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.00000020500000 rows × 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
         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.0
99999   99999   201     0.0
99999   99999   202     0.0
99999   99999   203     0.0
99999   99999   204     0.020500000 rows × 4 columns
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.0
1           1           201     0.0
1           1           202     0.0
1           1           203     0.0
1           1           204     0.0205 rows × 4 columns

可以看到,每个样本的心电特征都由205个时间步的心电信号组成。

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

  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
  1. 特征选择
    train_features中包含了heartbeat_signals的779种常见的时间序列特征(所有这些特征的解释可以去看官方文档),这其中有的特征可能为NaN值(产生原因为当前数据不支持此类特征的计算),使用以下方式去除NaN值:
from tsfresh.utilities.dataframe_functions import impute# 去除抽取特征中的NaN值
impute(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

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

from tsfresh import select_features# 按照特征和数据label之间的相关性进行特征选择
train_features_filtered = select_features(train_features, data_train_label)train_features_filtered
id       sum_values      fft_coefficient__attr_"abs"__coeff_35     fft_coefficient__attr_"abs"__coeff_34     ...
0           38.927945           1.168685                                                                0.982133                                                                ...
1           19.445634           1.460752                                                                1.924501                                                                ...
2           21.192974           1.787166                                                                2.1469872                                                               ...
...     ...                     ...                                                                         ...                                                                         ...
99997   40.897057           1.190514                                                                0.674603                                                                ...
99998   42.333303           1.237608                                                                1.325212                                                                ...
99999   53.290117           0.154759                                                                2.921164                                                                ...100000 rows × 700 columns

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

References

[1] Benjamini, Y. and Yekutieli, D. (2001). The control of the false discovery rate in multiple testing under dependency. Annals of statistics, 1165–1188

【算法竞赛学习】心跳信号分类预测-特征工程相关推荐

  1. 【数据挖掘】心跳信号分类预测 之 赛题理解 —— 学习笔记(一)

    目录 一.赛题理解 1.1 学习目标 1.2 了解赛题 1.2.1 赛题概况 1.2.2 数据概况 1.2.3 预测指标 1.2.4 赛题分析 1.3 Baseline 学习与解读 1.3.1 导入依 ...

  2. 《Python自然语言处理-雅兰·萨纳卡(Jalaj Thanaki)》学习笔记:05 特征工程和NLP算法

    05 特征工程和NLP算法 5.1 理解特征工程 5.1.1 特征工程的定义 5.1.2 特征工程的目的 5.1.3 一些挑战 5.2 NLP中的基础特征 5.2.1 句法解析和句法解析器 5.2.2 ...

  3. 数据挖掘-Task1:心跳信号分类预测(赛题理解)

    目录 前言 一.赛题 1.1 赛题概况 1.2 数据概况 1.3 预测指标 1.4 赛题分析 二.代码示例 2.1 数据读取 (导入pandas) 2.2 分类指标计算示例 2.3 baseline ...

  4. 天池大赛-心跳信号分类预测:探索性数据分析

    比赛地址:零基础入门数据挖掘-心跳信号分类预测 参考资料:由DataWhale开源的学习资料,Seaborn官方文档 1. EDA 目标 EDA的价值主要在于熟悉数据集,了解数据集,对数据集进行验证来 ...

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

    零基础入门数据挖掘-心跳信号分类预测TASK02 1.学习目标: 2.学习内容 2.1载入库 2.2载入数据 2.3数据总览 2.4数据缺失和异常 2.5预测值分布 1.学习目标: 数据探索性分析ED ...

  6. 天池大赛-心跳信号分类预测:赛题理解与baseline解析

    比赛地址:零基础入门数据挖掘-心跳信号分类预测 参考资料:由DataWhale开源的学习资料 1. 赛题简介 本次新人赛是Datawhale与天池联合发起的0基础入门系列赛事 -- 心跳信号分类预测. ...

  7. 天池大赛-心跳信号分类预测:建模与调参

    比赛地址:零基础入门数据挖掘-心跳信号分类预测 参考资料:由DataWhale开源的学习资料 1 内容介绍 逻辑回归模型: 理解逻辑回归模型: 逻辑回归模型的应用: 逻辑回归的优缺点: 树模型: 理解 ...

  8. [深度学习]Part2 数据清洗和特征工程Ch06——【DeepBlue学习笔记】

    本文仅供学习使用 数据清洗和特征工程Ch06 1. 特征工程 1.1 特征工程介绍 1.2 特征预处理 1.2.1 数据清洗 1.2.1.1 数据清洗-预处理 1.2.1.2 数据清洗-格式内容错误数 ...

  9. 天猫用户重复购买预测——特征工程

    天猫用户重复购买预测--特征工程 1.特征工程 1.1 概念 1.2 特征归一化 1.3 类别型特征转换 1.4 高维组合特征的处理 1.5 组合特征 1.6 文本表示模型 2. 赛题特征工程思路 3 ...

最新文章

  1. Visual C#访问接口
  2. 每一个开发人员都应该懂的 UML 规范
  3. python模块批量安装方法_python离线批量安装依赖包
  4. DB2 SQL 递归实现多行合并
  5. iOS 使用NJKWebViewProgress做webview进度条(加载网页时获取加载进度)
  6. Android Framebuffer设置分辨率
  7. 升级设置win2008r2开发环境,遇到问题小结
  8. php常见问题辨析(二)
  9. vue组件化的基本使用
  10. 【JavaScript】JS中的自定义对象
  11. html如何提取图片颜色代码,解析CSS 提取图片主题色功能(小技巧)
  12. 用turtle绘图做一个钟表时钟
  13. 旅行商问题和背包问题
  14. 透明、柔性指纹传感器问世
  15. dsolve 的 用法
  16. JVM - 双亲委派机制的优势和劣势
  17. OneDrive无法登陆正常使用 There was a problem connecting to onedrive
  18. CPU、内存、磁盘的性能瓶颈及理解
  19. MSF Project Management Discipline
  20. 如何在 Mac 上强制退出应用

热门文章

  1. Qt 中pro文件换行注意的问题
  2. Android开发之Retrofit常见错误@FieldMap parameters can only be used with form encoding. (parameter #1)
  3. 想问一下C++里queue要怎么遍历
  4. 禅道 11.4.1 版本发布,主要优化细节
  5. Spring、Spring MVC、Struts2、、优缺点整理
  6. java并发编程一:基础知识
  7. RabbitMQ系列(一)RabbitMQ在Ubuntu上的环境搭建
  8. 用SwiftGen管理UIImage等的String-based接口
  9. [iOS]利用通知实现监听系统键盘
  10. CCNA笔记之第十九节:RIP协议(大实验3)