我是靠谱客的博主 苹果指甲油,这篇文章主要介绍Datawhale 零基础入门数据挖掘-Task3 特征工程Datawhale 零基础入门数据挖掘-Task3 特征工程,现在分享给大家,希望可以做个参考。

Datawhale 零基础入门数据挖掘-Task3 特征工程

此部分为零基础入门心电图分类的 Task3 特征工程部分,带来了解各种特征工程以及分析方法,欢迎大家后续多多交流。

赛题:零基础入门数据挖掘 - 零基础入门心电图分类

3.1 学习目标

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

3.2 内容介绍

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

3.3 代码示例

3.3.1 导入包并读取数据

复制代码
1
2
3
4
5
6
7
# 包导入 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
复制代码
1
2
3
4
5
6
7
# 数据读取 data_train = pd.read_csv("train.csv") data_test_A = pd.read_csv("testA.csv") print(data_train.shape) print(data_test_A.shape)
复制代码
1
2
3
(100000, 3) (20000, 2)
复制代码
1
2
data_train.head()
复制代码
1
2
3
4
5
6
7
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
复制代码
1
2
data_test_A.head()
复制代码
1
2
3
4
5
6
7
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 数据预处理

复制代码
1
2
3
4
5
6
7
8
9
10
# 对心电特征进行行转列处理,同时为每个心电信号加入时间步特征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
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 × 2 columns
复制代码
1
2
3
4
5
6
7
8
# 将处理后的心电特征加入到训练数据中,同时将训练数据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
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 × 3 columns
复制代码
1
2
data_train[data_train["id"]==1]
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 × 3 columns

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

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

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

在这里插入图片描述

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

]

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

复制代码
1
2
3
4
5
6
7
from tsfresh import select_features # 按照特征和数据label之间的相关性进行特征选择 train_features_filtered = select_features(train_features, data_train_label) train_features_filtered

在这里插入图片描述

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

个人收获

第一次接触时序数据的特征工程处理,发现tsfresh包挺好用的,会自动生成特征,有点featureTools的意思,就是还不知道这样生成的数据用处怎么样,相互之间会不会出现特征冗余的情况,如果出现了特征冗余的情况,那我该怎么样继续做特征工程。

最后

以上就是苹果指甲油最近收集整理的关于Datawhale 零基础入门数据挖掘-Task3 特征工程Datawhale 零基础入门数据挖掘-Task3 特征工程的全部内容,更多相关Datawhale内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部