首页 理论教育心律失常数据集的贝叶斯分析在医药领域的应用

心律失常数据集的贝叶斯分析在医药领域的应用

【摘要】:实验数据本书采用的数据集是心律失常数据集,曾被用于“一种用于心律失常分析的有监督的机器学习算法”,目的是用心电图记录来确定心律失常的类型。表5-4所示的是心律失常数据集的部分数据。表5-4心律失常数据集表5-5手工标记的实验数据类别此心律失常数据集有452条数据,每条数据有279个属性。在幼儿及心动过速的情况下,PR间期相应缩短。在老年人及心动过缓的情况下,PR间期可略延长,但不超过0.22s。

1.基于Hadoop的心律失常数据集的贝叶斯算法

算法执行过程如下:

Step1执行命令,准备输入文件和加载算法程序文件

Step1.1执行命令cd/usr/local/run,进入hadoop运行路径;

Step1.2执行命令hadoop fs-mkdir-p/jobs/bayes/input/data,创建输入文件目录;

Step1.3执行命令hadoop fs-put test.txt/jobs/bayes/input/data/,进入本地txt文件所在目录,上传txt文件到hdfs;

Step2预处理数据(Mapper阶段)

Step 2.1 line.rstrip('\n').split(',')解析全数据;

Step 2.2 x.append(list(map(eval,item))[1:280])将特征向量加入列表x;

Step 2.3 y.append(list(map(eval,item))[280])将数据特征加入列表y。

Step3在hadoop平台利用数据训练的过程,并输出模型(Reducer阶段)

Step3.1 x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.5,stratify=y)随机分层抽样划分训练集和测试集,保证训练集和测试集数据同分布;

Step3.2 BernoulliNB()建立伯努利贝叶斯模型;

Step3.3 dtc.fit(x_train,y_train)在划分好的训练集上训练数据。

Step4用输出的模型对测试集文档进行分类测试,输出每个测试文档的分类结果和计算评价指标(Reducer阶段)

Step4.1 y_pred=clf.predict(x_test)输入训练集特征向量,输出决策树模型预测分类类别;

Step4.2 t=classification_report(y_test,y_pred)输入预测向量和真实标签向量,按格式输出每一个类别的precision、recall、fl-score值;

Step4.3 print(t)打印评价指标表。

2.实验设计

(1)实验环境

在PC机上搭建整体测试环境,硬件配置Intel(R)Core(TM)i5-6200U CPU@2.30GHz 2.40GHz,内存8.0GB,硬盘500G,操作系统:Windows10、Centos7.7.1,Java环境:JDK1.8,开发工具Pycharm,Hadoop版本Hadoop2.7.2。

(2)Hadoop平台配置

Hadoop平台搭建过程:在上述PC中安装虚拟机VirtualBox之后安装Centos7.7.1;设置SSH无密匙登录;修改平台参数;启动Hadoop并格式化;配置完所有后,在浏览器中就可以查看运行状况(注:具体搭建过程请看软件程序手册文件)。

(3)实验数据

本书采用的数据集是心律失常数据集,曾被用于“一种用于心律失常分析的有监督的机器学习算法”,目的是用心电图记录来确定心律失常的类型。表5-4所示的是心律失常数据集的部分数据。

数据集中有452条数据,共分为16类(数据集的最后一列是类代码)。其中1类是指“正常”心电图分类,2~15类是指不同的心律失常,16类是指其他未分类的,具体类别信息如表5-5所示。

表5-4 心律失常数据集

表5-5 手工标记的实验数据类别

此心律失常数据集有452条数据,每条数据有279个属性。279个属性由心电图中每个导联(国际通用导联体系共有十二导联)的波和波段值组成。

导联是指在记录心电图时电极在人体体表的放置位置及电极与放大器的连接方式。国际通用导联体系共有十二导联,其中,Ⅰ(右上肢连接的是负极,左上肢连接的是正极)、Ⅱ(右上肢连接的是负极,左下肢连接的是正极)、Ⅲ(右上肢连接的是负极,左下肢连接的是正极)、aVL(左上肢连接的是正极,右上肢和左下肢共同连接的是负极)、aVF(左下肢连接的是正极,左上肢和右上肢共同连接负极)、aVR(右上肢连接的是正极,左上肢和左下肢共同连接的是负极)是肢体导连;而vl(第4肋间隙胸骨右缘)、v2(第4肋间隙胸骨左缘)、v3(V2导联和V4导联之间)、v4(第5肋间隙左锁骨中线上)、v5(第5肋间隙左腋前线上)、v6(第5肋间隙左腋中线上)是胸部导联。

心电图中的波和波段包括:P波、P-R间期、P-R段、QRS波群、Q波、Q-T间期、ST段、T波、U波。

P波,它记录的是窦房结激动的右、左心房的激动。P波宽度正常值是0.11s(儿童<0.09s),P波振幅在肢体导联一般小于0.25mV,胸导联一般小于0.2mV。

P-R间期,从P波的起点至QRS波群的起点,代表心房开始除极的时间。正常情况下,PR间期为0.12~0.20s。在幼儿及心动过速的情况下,PR间期相应缩短。在老年人及心动过缓的情况下,PR间期可略延长,但不超过0.22s。

P-R段,是自P波终点至QRS波起点这段时限,主要反映激动在心房内的传导时间。通常P-R段在等电位线上,时限为0.06~0.14s。

QRS波群,继P波之后出现的一个狭窄但振幅高的波群,因此可以将其看作是心室收缩开始的心电图表现。QRS波的宽度为0.06~0.10s(儿童为0.04~0.08s)。六个肢体导联的QRS波群振幅一般不应都小于0.5mV,六个胸导联的QRS波群振幅一般不应都小于0.8mV。

Q波,是室间隔除极向量所形成的。正常时限在0.02左右,不超过0.04,振幅<1/4R(小于1/4通导连R波)。

Q-T间期,指QRS波群的起点至T波终点的间距,代表心室肌除极和复极全过程所需的时间。心率在60~100次/分时,QT间期的正常范围为0.32~0.44s。

ST段,自QRS波群的终点至T波起点间的线段,代表心室缓慢复极过程。正常的ST时常范围为0.05~0.15s,多在等电位线,即振幅为0。

T波,上个波群暂停之后出现的波代表着心室的复极(心室的舒张),以备下一次心室的除极。正常T波时限为0.10~0.25s,T波振幅在肢体导联的正常上限值男性为0.54mV,女性为0.45mV;而在胸导联,男性为1.44mV,女性为0.9mV。

U波,正常U波时限约为0.1~0.2s,振幅<1/2T波。

因为原数据集中部分数据的数据样本量太少,在分类时训练分类模型效果差,导致实验结果不理想。所以,在分类实验中我们筛选出实例数≥44的样本进行实验,如表5-6所示。

表5-6 分类实验数据

(4)算法测评机制

机器学习性能评估指标有多种,在分类中常用的评测指标有正确率(Precision)、召回率(Recall)和F1。本书中将用上述这三个指标对贝叶斯分类的分类器进行性能评价。其具体定义为,

Precision:P=TP/(TP+FP)

Recall:R=TP/(TP+FN)

P和R的调和平均:F1=2PR/(P+R)

注:TP是指统计初始情况下的分类和贝叶斯分类两种情况下,各个类公有的实例数(即针对各个类分类正确的数据条数)。FN是指初始情况下的各个类总数目减去结果正确的数目。FP是指贝叶斯分类得到的各个类的总数目减去结果正确的数目。

由此可见,Precision就是被分对的样本数除以所有的样本数,即找对率;Recall就是从关注领域中召回目标类别的比例,即找全率。通常来说,正确率越高,分类器越好;召回率越高,分类器越好。而F1综合了P和R的结果,用于综合反映整体的指标,当F1较高时则能说明试验方法比较有效。

3.实验过程与结果

随机选取数据集中一部分数据作为训练集训练分类模型,剩余数据(226条)作为测试集来验证分类模型的性能。

(1)启动hadoop-master

输入密码后,出现[root@hadoop-master~]#,如图5-31所示,说明已经启动hadoopmaster。(www.chuimin.cn)

图5-31 启动hadoop-master

(2)启动hadoop-slave1

输入密码后,出现[root@hadoop-slave1~]#,如图5-32所示,说明已经启动hadoopslave1。

图5-32 启动hadoop-slave1

(3)启动hadoop-slave2

输入密码后,出现[root@hadoop-slave2~]#,如图5-33所示,说明已经启动hadoopslave2。

图5-33 启动hadoop-slave2

(4)启动MobaXterm并连接到主机

图5-34 启动MobaXterm

图5-35 成功连接主机

(5)启动hadoop集群

输入此命令后,如图5-36所示,表示hadoop集群已经启动。

图5-36 启动hadoop集群

(6)离开安全模式

输入此命令后,如图5-37所示,表示已经离开安全模式。

图5-37 离开安全模式

(7)创建目录并将.txt上传到HDFS中的路径

第一条命令是创建目录,结果如图5-38所示。

第二条命令是将.txt上传到HDFS中的路径,结果如图5-38所示。

第三条命令是查看.txt是否上传成功,结果如图5-39所示。

图5-38 创建目录并将.txt上传到HDFS中的路径

图5-39 查看.txt是否上传成功

(8)运行hadoopStreaming命令

运行hadoopStreaming命令如图5-40所示。

输入次命令来运行Streaming MapReduce程序。

图5-40 运行hadoopStreaming命令

贝叶斯分类测试实验结果如图5-41所示。

图5-41 贝叶斯分类运行结果

心律失常数据集的贝叶斯分类效果如表5-7所示。

表5-7 心律失常数据集的贝叶斯分类效果

根据测评机制和实验结果我们可以看出,整体的分类效果良好。且由F1可以看出,此分类器对“正常”这一类样本的分类效果最佳。

4.十折交叉验证

十折交叉验证,英文名叫作10-fold cross-validation,用来测试算法准确性,是常用的测试方法。将数据集分成十份,轮流将其中九份作为训练数据,一份作为测试数据,进行试验。每次试验都会得出相应的正确率(或差错率)。十次结果的正确率(或差错率)的平均值作为对算法精度的估计。每次实验的结果如表5-8所示,最终实验结果如表5-9所示。

表5-8 基于贝叶斯的心律失常数据集的十折交叉验证分类效果

表5-9 基于贝叶斯的心律失常数据集的十折交叉验证分类效果

从表5-9中的F1看出,贝叶斯分类器对“正常”这一类样本的分类效果最佳;从总平均值看出,分类效果良好。

本节筛选部分心律失常数据(实例数≥44)作为实验数据集在Hadoop平台进行医学数据的贝叶斯分类算法研究。实验结果显示,此分类对“正常”这一类样本的分类效果最佳,且根据实验结果和验证结果可知贝叶斯分类模型良好。