一个不成熟的开源小方案:关于2018中国生理信号挑战赛(CPSC-2018)(2)

数据与预处理

数据库介绍

正如我们前面所提到的,我们用到的数据库是来自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)。具体分布见下表:

 

不过这里需要注意一个问题。部分记录属于多个类别,官方给出的规则是,只要能预测为其中任意一类就认为是正确的。而上面的表是根据第一标记统计得来的。最终算法是根据9类的平均F1值来评估。如果还不知道什么是F1,那还是先去补一下基础。数据是以大家喜闻乐见的.mat格式给出的。更多的信息可以参照比赛的官网:http://2018.icbeb.org/Challenge.html

 

数据预处理

1) 信息与信号分离:每个记录的mat文件包含的并非是一个单纯的矩阵,而是一个struct,除了信号本身,还有年龄和性别信息。我们这里将信号和年龄性别信息分开处理。年龄性别信息另存为.csv文件。

2) 降采样:每条记录的采样率是500 Hz,其实对于ECG信号来说,采样率偏高。为了降低计算负担,我们将所有的信号降采样至250 Hz。另外我们后面的算法均是基于Python平台,所以这里另保存为Numpy的.npy格式。

在开源的代码中,info_age_gen.csv文件即为我们保存的年龄性别信息。DataSet_250Hz文件夹下存放每个个体的.npy文件。由于体积比较大,所以没有直接上传github,而是放在了百度网盘:(链接:https://pan.baidu.com/s/1bgYR3YiJrvlJMVPpPN9csg 提取码:wvk3)。下载解压后直接替换掉空的DataSet_250Hz文件夹即可。

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分量,使用剩下的分量进行重构,得到滤波后的信号。

数据集平衡

从上面的分布表中可以看出,数据库中各类样本是不平衡的,这对算法的训练来说有消极作用。这里采用了过采样的方法减轻数据不平衡带来的影响。具体地,以样本数最多的类别为基准,若最大的类别样本数是某一类的2倍及以上,则对这一类直接复制相应的倍数;若最大样本数比某一类超出不足1倍,则在该类中随机抽取所差的样本数补齐。过采样仅在训练集和验证集中进行,调参也是以过采样后的平衡验证集表现为参考。

 

待续……

发布了30 篇原创文章 · 获赞 205 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_15746879/article/details/85495496