入门数据挖掘-心电图信号预测datawhale组队学习笔记-task 1

[1] 本文参考datawhale3月组队学习.team-learning-data-mining/HeartbeatClassification

1.赛题概况

比赛地址:天池心跳信号分类预测
比赛要求选手根据给定的数据集,建立模型,预测不同的心跳信号。赛题以预测心电图心跳信号类别为任务,数据来自某平台心电图数据记录,总数据量超过20万,主要为1列心跳信号序列数据,其中每个样本的信号序列采样频次一致,长度相等。为了保证比赛的公平性,将会从中抽取10万条作为训练集,2万条作为测试集A,2万条作为测试集B,同时会对心跳信号类别(label)信息进行脱敏。

1.1 数据概况

train.csv

  • id 为心跳信号分配的唯一标识
  • heartbeat_signals 心跳信号序列(数据之间采用“,”进行分隔)
  • label 心跳信号类别(0、1、2、3)

testA.csv

  • id 心跳信号分配的唯一标识
  • heartbeat_signals 心跳信号序列(数据之间采用“,”进行分隔)

1.2 预测指标

选手需提交4种不同心跳信号预测的概率,选手提交结果与实际心跳类型结果进行对比,求预测的概率与真实值差值的绝对值(abs-sum)。
真实值: y t r u e = [ y 1 , y 2 , y 3 , y 4 ] y_{true} = [y_1, y_2, y_3, y_4] ytrue=[y1,y2,y3,y4], 预测值: y p r e d = [ a 1 , a 2 , a 3 , a 4 ] y_{pred} = [a_1, a_2, a_3, a_4] ypred=[a1,a2,a3,a4],
a b s − s u m = ∑ j = 1 n ∑ i = 1 4 ∣ y i − a i ∣ abs - sum = \sum_{j=1}^n\sum_{i=1}^4 |y_i - a_i| abssum=j=1ni=14yiai

1.3 多分类算法常见评估指标

1.3.1 混淆矩阵 Confuse Matrix

实际\预测+-
+TPFN
-FPTN

1.3.2 准确率 Accuracy

代表整体 预测准确程度,包括正负样本。不适合样本不均衡情况,医疗大数据大部分都是样本不均衡数据。
A c c u r a c y = C o r r e c t T o t a l = T P + T N T P + T N + F P + F N Accuracy = \frac{Correct}{Total} = \frac{TP+TN}{TP+TN+FP+FN} Accuracy=TotalCorrect=TP+TN+FP+FNTP+TN

1.3.3 精确率 P

代表所有被预测为的样本中实际为正样本的概率。代表预测的正样本结果中的准测准确程度。
P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP} Precision=TP+FPTP

1.3.4 召回率 R

实际为正的样本中被预测为正样本的概率。
R e c a l l = T P T P + F N Recall = \frac{TP}{TP+FN} Recall=TP+FNTP

1.3.5 F1

F 1 = 2 ∗ P ∗ R P + R F1 = \frac{2*P*R}{P+R} F1=P+R2PR

1.3.6 其它

macro: 先求每个样本的P/R/F1,然后求平均值。
micro: 先将confuse matrix 的TP,FP,TN,FN对应位置求平均,然后求P/R/F1。

1.4 赛题分析

  • 典型多分类问题, 4个类别。
  • 应用 xgb、lgb、catboost模型。

2. baseline

流程:

导入第三方库
读取数据
数据预处理
准备训练/测试数据
训练模型
预测结果
  • 导入第三方库:lightgbm, xgboost, catboost, sklearn

  • 读取数据:.head(), .descirbe(), .info()

  • 数据预处理:

    • 定义减少使用内存函数reduce_mem_usage:根据每列数据最大,最小值确定数字精度,保存格式。np.int8/16/32/64及np.float16/32/64; object类保存为’category’。
    • for loop + append,连接train数据每行id, 心跳信号序列,label,生成train_list;同理连接test数据每行id, 心跳信号序列,生成test_list。
    • 将两列表变为pd.DataFrame, 并对列命名:id,s_1, …, s_n, (label)。
  • 准备训练/测试数据: 将train数据分为输入(去掉id和label列), 输出(‘label’), test数据去掉id为test输入。

  • 训练模型:

    • 定义abs_sum指标函数
    • 交叉验证:kf = kFold(n_splits, shuffle, random_state),这里nsplits=5(运行5批), shuffle=True(每次划分批次前打乱顺序),并定义seed,保证随机过程的结果可复现。
      用kf.split(train_x, train_y)将数据划分为train dataset 和 validation datatset.
    • 使用lgb(boosting)分类器并定义超参数
    • lgb.train函数
    • train: early_stopping_rounds=200:训练到valid 分数200轮均无提高则停止。
    • model.predict() 得到val_pred和test_pred.
    • 将val_y标签变为单热向量(每个样本的四个概率仅有1个为1,其余为0)。
    • 用预定义的abs_sum函数评分。val_y和valid_pred计算每个batch得分,取k次平均值作为最后模型分数。
    • 最后得到k次预测概率矩阵test_pred的平均值作为test预测结果。
  • 预测结果:使用lgb分类器,将生成test数据集预测结果按照官方提供格式’sample_submit.csv’保存成csv文件。

3. 提交成绩

在这里插入图片描述
之后进行EDA, 调参及模型融合。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值