基于机器学习的心电图诊断识别

  1. 人工智能导论
  2. 心电数据预处理
  3. 基于机器学习的心电图诊断识别
  4. 基于集成学习的心电图诊断识别
    基于机器学习的心电图诊断识别_第1张图片

实验报告,实验截图,截图内容是自己程序执行后的输出

人工智能领域主要包括计算机视觉(CV)、自然语言处理(NLP)、跨媒体分析推理、自主无人系统、智能芯片等关键技术。

TensorFlow是一个免费的开源软件库,用于跨一系列任务的数据流和可微分编程。它是一个符号数据库,也可用于机器学习应用程序,如神经网络。TensorFlow由谷歌大脑团队开发,供谷歌内部使用。

Scikit-learn是一个常用的机器学习库,提供了丰富的机器学习算法和工具。

使用Scikit-learn库的基本步骤:

1、安装Scikit-learn库

2、导入所需模板

3、准备数据集

4、划分训练集和测试集

5、构建训练模型

6、模型评估;

一、心电数据预处理

(一)案例目的

本案例的目标:

1、针对心电数据进行去噪,并实现QRS、P、T波形识别。

2、针对心电数据进行“正常、房颤、房性早搏、偶发房性早搏、频发房性早搏、房性心动过速、房颤伴快速心室率”,这七种诊断的智能识别分类。

(二)硬件要求

可以在单个虚机上完成,也可以在虚拟集群环境下完成。单虚机上完成本案例实验时,建议硬件配置为:

Windows虚拟机:4CPU,8GB 以上内存,100GB 以上硬盘。

Linux虚拟机:8CPU,8GB 以上内存,40GB 以上硬盘。

(三)软件工具

本案例所涉及的软件及工具包括:Matlab、 Python、等。

相关操作系统、软件及工具的版本建议如下:

Windows:Windows 7

Matlab R2014b

Linux:Ubuntu 14.04

系统自带python 2.7

(四)案例任务

(1)编写matlab程序,实现心电数据的预处理

(2)了解机器学习的基本原理

(3)编写python脚本,设计机器学习算法模型,进行心电数据的模型训练

(4)编写python脚本,实现算法模型的集成。

1、什么是ECG

心电图(ECG)是利用心电图机从体表记录心脏每一心动周期所产生的电活动变化图形的技术。

2、ECG的结构

基于机器学习的心电图诊断识别_第2张图片
一个完整周期的ECG信号有QRS P T波组成,不同的人对应不同的波形,同一个人在不同的阶段波形也不同。

3、心电数据的读取

(代码存放目录C:\ecgmatlab\code,数据文件目录C:\ecgmatlab\data)

首先须要到MIT-BIH数据库中下载ECG信号,从下面这个官方链接页面可以下载到所有48组MIT-BIH心电数据:

使用MATLAB读取其中一条数据:

打开桌面matlab,新建matlab脚本,保存为C:\ecgmatlab\dataread.m文件,编写如下脚本,点击“运行”按钮执行以下内容:

一个心电记录由三个部分组成:

(1)头文件[.hea],存储方式为ASCII码字符。

(2)数据文件[.dat],按二进制存储,每三个子节存储两个数,一个数12bit。

(3)注释文件[.art],按二进制存储,包含诊断及R波位置。

4、心电数据的去噪

5、检测QRS,P,T波

(1)QRS波识别

QRS检測是处理ECG信号的基础,不管最后实现什么样的功能,QRS波的检測都是前提。所以准确的检測QRS波是特征提取的前提。我们采用基于二进样条4层小波变换。在3层的细节系数中利用极大极小值方法能够非常好的检測出R波。3层细节系数的选择是基于R波在3层系数下表现的与其它噪声区别最大。
打开桌面matlab,新建matlab脚本,保存为C:\ecgmatlab\test.m文件,编写如下脚本,点击“运行”按钮执行以下内容:

(2)P波识别

(3)T波识别

(五)实验过程

打开桌面matlab,新建matlab脚本,保存为C:\ecgmatlab\dataread.m文件,编写如下脚本,点击“运行”按钮执行以下代码:

基于机器学习的心电图诊断识别_第3张图片
将心电记录由三个部分组成:1、头文件[.hea];2、数据文件[.dat];3、注释文件[.art];

基于机器学习的心电图诊断识别_第4张图片

(1)心电图数据的读取

基于机器学习的心电图诊断识别_第5张图片
(2)心电数据的去噪

基于机器学习的心电图诊断识别_第6张图片

第七行的ecgmatlab改为echmalab

271行,去掉注解

(3)ECG信号的各波波段检测

基于机器学习的心电图诊断识别_第7张图片

该实验利用matlab实现心电数据的预处理,针对心电数据进行去噪,并实现QRS、P、T波形检测。

二、基于机器学习的心电图诊断识别

(一)基础概念

1、机器学习是人工智能一个实现途径。深度学习是机器学习的一个方法发展而来。数据挖掘是试图从海量数据中找出有用的知识供机器学习。

基于机器学习的心电图诊断识别_第8张图片

2、机器学习算法大致分为三类:

(1)监督学习算法(Supervised Algorithms):在监督学习训练过程中,可以由训练数据集学到或建立一个模式(函数/learning model),并依此模式推测新的实例。该算法要求特定的输入/输出,首先需要决定使用哪种数据作为范例。

(2)无监督学习算法(Unsupervised Algorithms):这类算法没有特定的目标输出,算法将数据集分为不同的组。

(3)强化学习算法(Reinforcement Algorithms):强化学习普适性强,主要基于决策进行训练,算法根据输出结果(决策)的成功或错误来训练自己,通过大量经验训练优化后的算法将能够给出较好的预测。在运筹学和控制论的语境下,强化学习被称作为“近似动态规划”。

3、数据挖掘可以看做是机器学习和数据库的交叉。

基于机器学习的心电图诊断识别_第9张图片

(二)实验过程

1、打开终端方式:在桌面打开终端

cd /root/ecgpy/
jupter-notebook --allow-root

基于机器学习的心电图诊断识别_第10张图片

2、新建python文档

3、使用scikit-learn建模四步骤:

(1)、调用需要使用的模型类;(2)、模型初始化(创建一个模型实例);(3)、模型训练;(4)、模型预测

基于机器学习的心电图诊断识别_第11张图片

4、安装pandas,s1rd,sklearn

!pip install pandas
换源
!pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
!pip install xlrd==1.2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
!pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple

基于机器学习的心电图诊断识别_第12张图片

5、数据预处理

基于机器学习的心电图诊断识别_第13张图片

基于机器学习的心电图诊断识别_第14张图片

基于机器学习的心电图诊断识别_第15张图片

线性求解不能求解非线性的

基于机器学习的心电图诊断识别_第16张图片

6、Logistic Regression

Logistic 回归是机器学习从统计学领域借鉴过来的另一种技术。它是二分类问题的首选方法。

像线性回归一样,Logistic 回归的目的也是找到每个输入变量的权重系数值。但不同的是,Logistic 回归的输出预测结果是通过一个叫作「logistic 函数」的非线性函数变换而来的。

Logistic Regression(LR) 是传统机器学习中的一种分类模型,由于算法的简单和高效,在实际应用非常广泛。它是直接对分类可能性进行建模,无需事先假设数据分布,这样就避免了假设分布不准确所带来的问题。它不仅可以预测出所属类别,同时可以得到近似概率预测,这对许多需利用概率辅助决策的任务很有用。
基于机器学习的心电图诊断识别_第17张图片

7、决策树

基于机器学习的心电图诊断识别_第18张图片

8、支持向量机SVM

支持向量机(support vector machine,SVM)不仅具有坚实的统计学理论基础,还可以很好地应用于高维数据、避免维度灾难问题。是一种备受关注的机器学习分类技术。

基于机器学习的心电图诊断识别_第19张图片

9、普斯贝叶斯算法

(1)BernoulliNB
基于机器学习的心电图诊断识别_第20张图片
朴素贝叶斯是一类比较简单的算法,scikit-learn中朴素贝叶斯类库的使用也比较简单。相对于决策树,KNN之类的算法,朴素贝叶斯需要关注的参数是比较少的,这样也比较容易掌握。在scikit-learn中,一共有3个朴素贝叶斯的分类算法类。分别是GaussianNB,MultinomialNB和BernoulliNB。其中GaussianNB就是先验为高斯分布的朴素贝叶斯,MultinomialNB就是先验为多项式分布的朴素贝叶斯,而BernoulliNB就是先验为伯努利分布的朴素贝叶斯。这三个类适用的分类场景各不相同,一般来说,如果样本特征的分布大部分是连续值,使用GaussianNB会比较好。如果样本特征的分布大部分是多元离散值,使用MultinomialNB比较合适。而如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。

(2)GaussianNB:

基于机器学习的心电图诊断识别_第21张图片

10、神经网络

基于机器学习的心电图诊断识别_第22张图片

11、KNN算法

KNN是通过测量不同特征值之间的距离进行分类。它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

基于机器学习的心电图诊断识别_第23张图片

12、小结

该实验涉及机器学习相关知识,采用LRLogistic Regression、决策树、SVM、KNN等分类模型实现心电数据识别。

三、基于集成学习的心电图诊断识别

(一)基础知识

集成学习的目的是通过组合多个基础模型的预测结果,以获得更好的整体性能和泛化能力。常见的集成学习方法包括投票(Voting)、平均(Averaging)、堆叠(Stacking)等。

集成学习的主要目标包括:

1、提高预测准确性:通过集成多个基础模型的预测结果,可以减少单个模型的偏差和方差,从而提高整体的预测准确性。不同的基础模型可能对数据的不同方面有更好的拟合能力,集成这些模型可以综合各自的优势,得到更准确的预测结果。

2、降低过拟合风险:集成学习可以减少单个模型的过拟合风险。由于集成模型综合了多个基础模型的预测结果,他们的泛化能力通常更强,因此对未见过的数据更具有鲁棒性。

3、增加模型稳定性:通过集成多个具有差异性的基础模型,集成模型可以更好地应对数据的变化和噪声。单个模型可能对数据中的特定模式过于敏感,而集成模型可以平衡各个模型的预测结果,减少局部错误的影响。

4、发现隐含模式:集成学习可以帮助发现数据中的隐藏模式或结构。不同的基础模型可能从不同的角度对数据进行建模,并关注不同的特征或关系,从而揭示数据中更深层次的结构。

集成学习的目标通过整合多个模型的预测结果,提高模型的鲁棒性、准确性和泛化能力。它在各种机器学习和数据挖掘任务中都具有广泛应用,如分类、回归、聚类等。

(二)实验过程

(1)打开juypter

基于机器学习的心电图诊断识别_第24张图片

基于机器学习的心电图诊断识别_第25张图片

(2)机器学习

基于机器学习的心电图诊断识别_第26张图片

(3)AdaBoost

集成学习中最具有代表性的两个算法, 一个是随机森林,另一个就是AbaBoost,都是利用若干个弱模型组合成为强者的例子,但是他们的实现过程有很大的不同。

在随记森林中每个weak Learning之间相互独立,属于一种并联的结构,而在AdaBoost中,每个后置的weak learning都建立在前一个的基础上,从而可以更专注于解决之前无法解决的问题,使模型的整体性能逐步提高。

另一个显著的优点是,相比于随机森林算法, AdaBoost充分考虑了每个样本点的权重,而不是简单粗暴的将每个weak learning的输出又利用均值整合为一个。这意味着,对于负责的问题,模型的最终结果会比随机森林更高。
(顺序,级联的结构+利用权重组合结果)
基于机器学习的心电图诊断识别_第27张图片

你可能感兴趣的:(人工智能,机器学习,人工智能)