ECG学习记录(1)

本文介绍了作者作为研一学生如何使用深度学习技术(CNN+RNN)对2018年中国生理信号挑战赛数据进行ECG分类,包括数据预处理(降采样、滤波、平衡)、实验流程(切片、网络结构、HRV特征融合)、模型融合(XGBoost整合)和关键步骤代码链接。
摘要由CSDN通过智能技术生成

作为一个研一小白,研究方向是关于ECG信号的,在CSDN上看了很多大佬写的博客,用此来记录一下学习过程。
最近学习了一个大佬写的ECG分类项目,记录一下。下附链接:
https://blog.csdn.net/qq_15746879/article/details/8549549
代码链接也附在这里:https://gitcode.net/mirrors/Aiwiscal/CPSC_Scheme?utm_source=csdn_github_accelerator
下面开始学习叭!
**

==数据库介绍

**:
数据库是来自2018年中国生理信号挑战赛(China Physiological Signal Challenge 2018)的数据。该数据库是由11家医院中收集而来,官方公开的训练集中包含了6877条记录,男性3699,女性3178。此外还有2954条记录作为测试集,不对外公开,用作比赛时的评分。信号的采样率为500 Hz,每条记录包含标准12导联,同时也给出了个体的年龄和性别。各条记录不等长,最短的有6 s,最长的,官方页面中称是60 s,但在处理中发现最长的应该是达到了144 s。
数据集共包含了9类,分别为:
正常(Normal)
心房颤动(Atrial fibrillation,AF)
I度房室阻滞(First-degree atrioventricular block,I-AVB)
左束支阻滞(Left bundle branch block,LBBB)
右束支阻滞(Right bundle branch block,RBBB)
房性早搏(Premature atrial contraction,PAC)
室性早搏(Premature ventricular contraction,PVC)
ST段降低(ST-segment depression,STD)
ST段抬升(ST-segment elevated,STE)

==数据预处理

1.信息与数据分离:每个记录的.mat文件包含的并非是一个单纯的矩阵,而是一个数据结构体,除了信号本身,还有年龄和性别信息。将信号和年龄性别信息分开处理。年龄性别信息另存为.csv文件:info_age_gen.csv文件为年龄性别信息。
2.降采样:将采样率为500 Hz的每条信号,降采样至250 Hz。后面的算法均是基于Python平台,所以这里另保存为Numpy的.npy格式:DataSet_250Hz文件夹下存放每个个体的.npy文件(每条记录,即数据)
**3.滤波:**采用文献:Martis R J, Acharya U R, Min L C. ECG beat classification using PCA, LDA, ICA and discrete wavelet transform [J].Biomedical Signal Processing and Control, 2013, 8(5): 437-448. 中所采用的滤波方法,使用db6小波对信号进行9级小波分解,去除D1,D2,A9分量,使用剩下的分量进行重构,得到滤波后的信号。
4.数据集平衡
用过采样的方法减轻数据不平衡带来的影响:以样本数最多的类别为基准:
若最大的类别样本数是某一类的2倍及以上,则对这一类直接复制相应的倍数;
若最大样本数比某一类超出不足1倍,则在该类中随机抽取所差的样本数补齐。过采样仅在训练集和验证集中进行,调参也是以过采样后的平衡验证集表现为参考。

==实验过程

**总体框架:**采用CNN和RNN(双向LSTM)的混合网络,对每一个导联都搭建一个对应的模型训练,最终再进行综合。
1.数据(每条记录)切片方式:CPSC-2018数据库中,最短的记录有6 s,最长的有144 s,最长是最短的24倍。
对于每条记录统一切取24个片段,每条片段的长度为6s。
因此最长的144 s的记录可以比较正常的,片段之间无重叠地切取,其他长度的记录的片段与片段之间都需要重叠才能满足条件,就像下图所示:
在这里插入图片描述
具体重叠的采样点长度,可以根据公式计算,设采样率为fs = 250 Hz,记录实际长度为L, 需要切取的片段数为n = 24,每片长度为l = 6 s则片段之间的重叠长度ol为:
在这里插入图片描述
若记录长度就是6 s,则可以选择直接复制24次,当然,还可以在信号长度后延拓24-1个点,使得上式有意义。每条记录就被处理成了同样形式的24 * 6s片段组。同时,除了极少数极端短记录存在很小的人为延拓外,其他都尽量保持了原有的数据信息。
**网络结构:**用24个独立的1维卷积(与池化)层组合处理24个片段。24个片段是按照记录的时间顺序切取的,片段之间存在时间序列特性。然后使用双向LSTM汇总,强化这种时间序列特性。再级联一个全连接层输出最后的分类结果。
具体网络结构如下图所示:
在这里插入图片描述
一条记录的24个片段,作为一个整体,输入到不同的24个1维的CNN结构,每个CNN结构处理的是一个6s的局部片段,有利于增强其对局部特征的感知,最终24个分支由一个双向LSTM强化它们之间的时间序列属性,然后由全连接层输出其最终的结果
由于片段之间一般互有覆盖,信息存在冗余,为减轻这种情况,在CNN与双向LSTM之间增加dropout,减轻过拟合,提升泛化能力,而keep_prob按照经验值设为0.5。
整个网络基于keras(TensorFlow as backend)搭建, 采用SGD + Momentum的方法进行训练。

人工HRV特征提取与模型融合

基于QRS波定位便可轻易得到的RR间期,进行心率变异性(Heart Rate Variability,HRV)分析是一个足够鲁棒的选择,同时,HRV分析在房颤,早搏等异常诊断上也常有应用,也有其相应的医学意义。
使用CNN自动学习特征的长处在于局部细节特征的提取,而HRV分析中的特征,例如计算RR间期的标准差,是一个典型的统计特征,CNN对类似的特征并未有特殊的设计,因此在深度学习网络基础上,补充一些HRV特征,或是跟RR间期相关的统计特征,能形成比较良好的互补。因此引入了以下特征:所有导联是同时采集的,在时间上是完全平行的,所以以下特征均以II导联为基准:
1.RR间期标准差
2.最大RR间期
3.最小RR间期
4.平均RR间期
5.pNN50:相邻RR间期差距大于50ms的比率
6.R波密度:R波个数/记录长度
7.RMSSD:相邻RR间期差值的均方根
8.RR间期的采样熵:衡量RR间期变化混乱度
2
数据库也提供了每条记录所属个体的年龄和性别,这里也把这2个特征引入进来(共9+2=11个特征

==模型融合

对于每个12导联记录,现在我们得到了12个针对每个导联的深度学习模型,以及相应的人工特征。我们使用12个网络得到12组-9类别softmax概率,取前8个概率(由于所有概率相加为1,因此取8个就足够表示),共12*8=96个数值作为特征;加上我们的人工特征9+2=11个(根据参数设定,采样熵最终有两个返回值),得到107维特征。
基于这样的特征组合,再训练一个各类算法竞赛中大名鼎鼎的XGBoost,融合以上所有信息,得到最后的结果。同样,XGBoost的调参也仅针对平衡后的验证集进行。

==总结

信号切片代码存于CPSC_utils.py
网络结构实现和人工特征设计代码存于CPSC_model.py,单导联网络训练存于CPSC_train_single_lead.py
所有导联网络训练存于CPSC_train_multi_leads.py
人工特征的处理存于CPSC_extract_features.py
最终的融合存于CPSC_mix.py。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值