入门数据挖掘-心电图信号预测datawhale组队学习笔记-task 1
心电图信号多分类预测挑战赛-Task1 baseline学习笔记
- 1.赛题概况
- 1.1 数据概况
- 1.2 预测指标
- 1.3 多分类算法常见评估指标
- 1.3.1 混淆矩阵 Confuse Matrix
- 1.3.2 准确率 Accuracy
- 1.3.3 精确率 P
- 1.3.4 召回率 R
- 1.3.5 F1
- 1.3.6 其它
- 1.4 赛题分析
- 2. baseline
- 3. 提交成绩
[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| abs−sum=j=1∑ni=1∑4∣yi−ai∣
1.3 多分类算法常见评估指标
1.3.1 混淆矩阵 Confuse Matrix
| 实际\预测 | + | - |
|---|---|---|
| + | TP | FN |
| - | FP | TN |
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+R2∗P∗R
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, 调参及模型融合。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
