一种基于改进人工神经网络的哮喘病诊断方法与流程

文档序号:20695274发布日期:2020-05-12 14:53阅读:327来源:国知局
一种基于改进人工神经网络的哮喘病诊断方法与流程

本发明涉及数据挖掘领域,具体涉及一种基于改进的神经网络的哮喘病诊断方法及装置。



背景技术:

支气管哮喘(简称哮喘),是一种常见的呼吸系统疾病,是一种表现为反复发作性咳嗽,喘鸣和呼吸困难,并伴有气到高反应性的可逆性、梗阻性的呼吸道疾病。哮喘是一种严重危害人类身体健康的常见慢性呼吸道疾病,其发病率高,常表现为反复发作的慢性病程,严重影响了患者的生活及活动,不少患者由于治疗不及时或者采用了不当的治疗方法,最终使肺功能受损。严重哮喘发作时,若未得到有效的及时的治疗,甚至危及患者的生命。

哮喘病的发病率在全世界范围内呈上升趋势,由于哮喘治疗的规范化,使诊断日益成为哮喘防治的重要问题。但是这需要从业人员有大量的专业知识和诊断经验,但是专业人员的数量相对较少,而患病人数又在不断增多,除了给工作人员带来疲劳,还极易导致误诊的发生,而且因为诊断方法缺乏临床指标,不同的医生会出现不同的诊断结果,具有非常大的限制性和危险性。有些病人常以发作性咳嗽为唯一症状,临床上常易误诊为支气管炎,有的青少年病人则以运动时出现胸闷,气紧为唯一临床表现,若对哮喘的认识不够,或临床诊断思路不正确,很容易导致误诊或漏诊。

本文针对哮喘病这项疾病,利用医疗门诊部门的关于此类病人的相关数据,结合机器学习的相关数据挖掘算法,提取出有关于哮喘病的临床医学数据的分类提取规则,达到早期诊断的目的,以辅助临床诊断,做到早诊断,早治疗,提高哮喘病人的治愈几率。



技术实现要素:

针对上述问题,本发明提出了一种基于改进的神经网络的哮喘病诊断方法,利用改进的神经网络模型对医院相关部门提供的数据进行训练,来确定最终的哮喘病诊断模型,并使用训练过后的模型对用户进行是否患病的诊断。

具体的技术方案如下:

1、一种基于改进的bp神经网络的哮喘病诊断方法包括多个步骤,首先要对采集到的体检血常规数据进行预处理,然后进行使用一种基于多评价标准融合的特征选择方法进行特征选择,接着构建一个改进过的bp神经网络模型,并使用处理过的数据进行训练,最后根据训练好的模型进行系统的构建。

2、进一步的,上述步骤中,数据清洗,包括缺失值清洗,格式内容清洗,逻辑错误清洗,非需求数据清洗,关联性验证等步骤:

2.1)其中缺失值清洗步骤有:确定缺失值范围,对每个字段计算缺失值比例,按照缺失值比例和字段重要性,分别制定策略。去除不需要的字段,将一些无意义的字段删除,例如患者的体检编号等。

2.2)填充缺失值的内容,对于不同特征的缺失值,采用不同的填充方法,例如采用医生的经验进行缺失值填充,或采用均值填充,中位数填充,众数填充等。

2.3)重新取数,因为某些特征非常重要但是缺失比例过高,所以需要和门诊方面联系,进行重新取数。

2.4)格式内容清洗包括以下问题的解决:时间日期数值等显示格式不一致,内容中存在不该存在的字符,字段内容与该字段应有内容不符等等。

2.5)逻辑错误清洗的工作是去掉一些使用简单逻辑推理就可以直接发现问题的数据,防止分析结果走偏。主要包括去重,去除不合理值,修正矛盾内容等等。

2.6)非需求数据清洗就是对不需要的字段进行删除处理。

2.7)关联性验证是为了在数据来源于多张表或数据库的情况下,保证数据之间关联的正确性,防止数据之间出现关联错误或是互相矛盾的情况。

3、进一步的,上述步骤中,对于数据的预处理,包括以下步骤:

3.1)对于连续型数据,采用规范化方法对数据进行处理,数据的标准化是将数据按一定的比例进行缩放,使之落入一个小的特定区间。去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权,采用离差标准化的方法对原始数据进行线性变换,使数据统一映射到[0,1]区间上,方法详细介绍如下:

对序列x1,x2,······,xn进行变换:

则新序列y1,y2,······,yn∈[0,1]且无量纲。

3.2)对于离散型数据,即分类特征,这些特征值并不是连续的,是离散的,无序的,所以我们不能进行通常情况下的编码方案,要对其进行特征数字化,本发明中对其采用one-hot编码方案。one-hot编码,又称为一位有效编码,主要是采用n位状态寄存器来对n个状态进行编码方案,每个状态都有他独立的寄存器位,并且在任意时候只有一位有效。one-hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值,然后,每个整数值被表示为二进制向量,除了整数的索引之外,其它都是零值,索引被标记为1。使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点,因为特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。

4、进一步的,上述步骤中,基于多评价标准融合的特征选择方法,包括以下步骤:

首先采用决策树标准进行特征评价,首先需要构建决策树,为了更好的区分特征之间的重要性,采用cart决策树,构建过程如下:

1)对数据集的所有特征计算基尼系数,对每一个特征a,取一个可能取到的值a,根据a将训练样本分为d1和d2,然后计算a=a的基尼系数

其中:

2)在所有可能的特征以及所有可能的值里选择基尼系数最小的特征及其切点a作为最优特征及切分点,从结点生成两个子结点,将训练数据集分配到子节点中。

3)递归调用1,2直到所有特征都已经用完

4)生成分类决策树。

根据生成的分类树的结点顺序对所有特征进行权重值的分配,叶子节点为1,其父节点依次乘以2,直到根节点为2n,得到基于决策树评价标准的特征重要度。

然后,使用逻辑回归标准进行评价,首先需要构建逻辑回归模型,步骤如下:

选择合适的激活函数,这里选择sigmoid函数

2)构造损失函数,表示预测的输出和训练数据类别之间的偏差,具体如下

3)使用梯度下降法进行权重的更新,目标是使损失函数达到最小值,梯度下降的过程表示为

4)在损失函数达到最小值后,选择当前的各项参数为模型的最终参数。

根据得到的各个特征的权重wi对各个特征进行排序,得到基于逻辑回归评价标准的特征重要度。

因为决策树模型是通过层次反映特征的重要程度,而逻辑回归模型是通过数值反应特征的重要程度,在进行标准融合的时候,希望能够保留各自的特征,所以采用求均值的方法进行融合。

设di表示特征i在决策树标准下的重要度,wi表示特征i在逻辑回归标准下的重要度,则特征i的最终重要度为:

通过观察特征的重要度,发现,不重要的特征其特征重要度较小,而重要特征的特征重要度远大于不重要特征或无关特征,所以采用所有特征重要度的标准差作为阈值。

保留特征中特征重要度大于σ的特征作为特征选择的结果。

5、进一步的,上述步骤中,采用了一种基于特征重要度的改进的dropout方法,包括以下步骤:

在机器学习模型中,如果模型的参数太多,而训练样本又较少,则训练出来的模型很难容易产生过拟合现象。过拟合现象具体表现在:模型在训练数据上损失函数较小,预测准确率较高,但在测试数据上损失函数较大,预测准确率较低。

dropout方法,简单的说,就是在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以是模型的泛华性能更强,因为它不会太依赖某些局部的特征,毕竟这些特征随时有可能被丢弃掉。

传统dropout方法的具体步骤如下:

1)随机删除掉网络中一部分隐藏的神经元,输入输出神经元保持不变。

2)把输入x通过修改后的网络前向传播,把得到的结果通过修改后的网络反向传播,在一个批量的样本执行完这个过程之后,在未被删除的神经元上按损失函数的优化方法进行权重更新。

3)修复被删除的神经元。

重复1-3直到满足停止条件。

而改进的dropout方法与传统方法不同的是,给每个隐藏层神经元重新计算重要度,然后基于神经元重要度给予每个神经元一个权重,在进行概率丢弃神经元的时候根据这个权重进行计算概率。

每个神经元重要度的计算公式为:

其中,为第i层第j个神经元的重要度,为上一层第k个神经元的第j个权重。

每个神经元的再丢弃概率计算公式为:

采用改进的dropout的网络计算公式为:

其中randomvertor(p,l)表示以概率p随机生成长度为l的含有p*l个0,其余位置为1的向量。selectmorevector(v,n)表示从向量v中选择n个出现次数最多的值,放入一个新的向量中。

6、进一步的,上述步骤中,采用了一种基于动态学习率的梯度下降算法,包括以下步骤:

因为传统sgd算法需要人为的指定一个固定的学习率,很难找到合适的学习率,而且梯度下降的过程中,学习率过大容易越过最小值,产生错误结果,而且对一个样本进行频繁的参数更新,可能导致目标函数值产生震荡,学习率过小会导致模型训练缓慢,浪费大量时间。

所以采用了一种新的基于动态学习率的梯度下降算法,根据历史损失函数值的变化对学习率进行按比例的动态更新,同时为了避免学习率趋于无限小导致算法不再学习,添加一个基于数据集特征大小的阈值,进行学习率最小值的控制。

传统梯度下降算法的过程为:

确定预测函数hθ(x)

确定损失函数,一般使用均方误差函数

进行梯度下降:

1.向损失函数中代入样本x的值,将损失函数转化为关于θ的函数j(θ)i=f(θ)

2.求样本点损失函数的梯度向量

3.初始化函数的参数θ0=<x0,x1,···,xn>,得到对应的梯度向量,然后将θ0代入,得到θ0处的损失为梯度向量为

根据梯度下降步长,进行梯度下降分别将每一次的损失代入到梯度下降公式中求出下一次的梯度向量和损失,如此循环,直到损失j(θ)满足一定的终止条件。

改进的梯度下降算法过程为:

与传统梯度下降方法不同的地方在于改进的梯度下降方法的学习率是根据前两次损失函数的值的比例进行动态变化的。但是这样做有一个缺点,伴随着损失的越来越小,学习率也会变得越来越小,使最终的学习过程效率变得越来越低而可能达不到极小值,随意设置一个基于数据集特征大小的约束参数,作为一个阈值,使得当学习率过小的时候不再继续缩小,适时停止学习率的变化。

改进的梯度下降公式如下:

其中t为基于数据集特征数量的一个预设值。

7、进一步的,上述步骤中,采用了全局梯度下降算法,包括以下步骤:

全局梯度下降,为了避免传统梯度下降算法中容易收敛到局部极小值的问题,虽然可以采用遗传算法,蚁群算法等来进行优化,来减少陷入局部极小值的概率,但是有的时候仍是会发生,而我们要解决的问题是医疗问题,是严谨而精密的,不容许丝毫的误差,因为这有可能就会导致一场医疗事故,所以为了完全避免这种事情的发生,我们采用全局梯度下降的方法来进行模型的训练。

首先,方法源于一种持续性的迭代判断算法,假设存在一种映射关系yi=f(xi),i=1,2,3...n,其中n为样本量,xi为第i个样本,yi为第i个样本的损失,根据一定的间距从样本中间隔抽取样本,记为x1,x2,x3...然后根据映射关系yi=f(xi)得到一些列的y1,y2,y3...,接着确定一个极小的变量δx,令y'=f(x+δx),然后对比y1,y2,y3...和y1',y2',y3'...的值,如果yi<yi',则说明当前xi处于函数的递增区间,而通过梯度下降算法要找的是函数的最小值,所以要剔除掉这一部分处于递增区间上的xi,对剩下的xi中,取相同区间上yi最小的xi,对所有区间上的xi分别进行梯度下降,然后对所有的极小值进行对比,找到最小值。

关于间距值的选择,因为为了保证数据的准确性,所以采用一种由小及大的方法,一开始可以将数据集映射到一维空间观察数据集的波动程度,也可以直接对每个点进行梯度的判断,然后对梯度上升的点进行剔除,这样就得到了很多不同的区间,即每个梯度下降的区间,然后取每个区间中的最小值点,即可以得到关于整个图像上的每个不同单调区间的上的较小值点,然后分别以这些较小值点为起始点进行梯度下降,就可以得到这个图像上的所有极值点,然后对所有极值点进行比较,即可以得到整个图像上的最小值点,而且这个点一定是整个数据域上的最小值点。

8、进一步的,上述步骤中,根据训练好的模型进行系统的构建,并制作可视化的界面,用户可以通过将自己的体检数据输入到系统中,然后系统会根据用户给出的各项信息对用户进行是否患病的预诊断。经过大量数据测试,系统的验证准确率能达到96%以上,具有良好的预诊断效果。

本发明有以下有益效果:

因为进行哮喘病诊断的时候,医生需要根据病人的症状和体征以及辅助的检查进行判断,而本发明只要根据病人的体检数据就可以进行诊断,能够极大的辅助医生进行对患者是否患有哮喘病的临床诊断。并且新构建的模型使用了基于哮喘病本身特征的初始权重更新系数,和改进过的梯度下降方法,全局梯度下降,能够极大的提高模型的训练效率和准确率。也间接的提高了模型的诊断效果。

附图说明

图1为本发明的方法流程图。

图2为bp神经网络算法的流程图。

图3为哮喘病诊断模型的模型图。

具体实施方式

为使本发明的技术方案更加清晰明确,下面结合附图及实施例对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,本发明公开了一种基于逻辑回归算法的哮喘病诊断方法及装置,其具体步骤如下:

步骤1,从医院门诊部门获取到的病人的体检数据,以及正常人的体检数据共计1800条,其中1400条为正常人,400条为患病者,门诊数据主要涉及病人的基本信息及各项哮喘相关的检测指标。

步骤2,进行数据清洗,包括缺失值清洗,格式内容清洗,逻辑错误清洗,非需求数据清洗,关联性验证等步骤:

2.1)其中缺失值清洗步骤有:确定缺失值范围,对每个字段计算缺失值比例,按照缺失值比例和字段重要性,分别制定策略。去除不需要的字段,将一些无意义的字段删除,例如患者的体检编号等。

2.2)填充缺失值的内容,对于不同特征的缺失值,采用不同的填充方法,例如采用医生的经验进行缺失值填充,或采用均值填充,中位数填充,众数填充等。

2.3)重新取数,因为某些特征非常重要但是缺失比例过高,所以需要和门诊方面联系,进行重新取数。

2.4)格式内容清洗包括以下问题的解决:时间日期数值等显示格式不一致,内容中存在不该存在的字符,字段内容与该字段应有内容不符等等。

2.5)逻辑错误清洗的工作是去掉一些使用简单逻辑推理就可以直接发现问题的数据,防止分析结果走偏。主要包括去重,去除不合理值,修正矛盾内容等等。

2.6)非需求数据清洗就是对不需要的字段进行删除处理。

2.7)关联性验证是为了在数据来源于多张表或数据库的情况下,保证数据之间关联的正确性,防止数据之间出现关联错误或是互相矛盾的情况。

步骤3,对于数据的预处理,包括以下步骤:

3.1)对于连续型数据,采用标准化的方法对数据进行处理,数据的标准化是将数据按一定的比例进行缩放,使之落入一个小的特定区间。去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权,采用离差标准化的方法对原始数据进行线性变换,使数据统一映射到[0,1]区间上,方法详细介绍如下:

对序列x1,x2,……,xn进行变换:

则新序列y1,y2,……,yn∈[0,1]且无量纲。

3.2)对于离散型数据,即分类特征,这些特征值并不是连续的,是离散的,无序的,所以我们不能进行通常情况下的编码方案,要对其进行特征数字化,本发明中对其采用one-hot编码方案。one-hot编码,又称为一位有效编码,主要是采用n位状态寄存器来对n个状态进行编码方案,每个状态都有他独立的寄存器位,并且在任意时候只有一位有效。one-hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值,然后,每个整数值被表示为二进制向量,除了整数的索引之外,其它都是零值,索引被标记为1。使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点,因为特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,将离散型特征使用one-hot编码,会让特征之间的距离计算更加合理。

步骤4,进行特征选择,包括以下步骤:

首先采用决策树标准进行特征评价,首先需要构建决策树,为了更好的区分特征之间的重要性,采用cart决策树,构建过程如下:

1)对数据集的所有特征计算基尼系数,对每一个特征a,取一个可能取到的值a,根据a将训练样本分为d1和d2,然后计算a=a的基尼系数

其中:

2)在所有可能的特征以及所有可能的值里选择基尼系数最小的特征及其切点a作为最优特征及切分点,从结点生成两个子结点,将训练数据集分配到子节点中。

3)递归调用1,2直到所有特征都已经用完

4)生成分类决策树。

根据生成的分类树的结点顺序对所有特征进行权重值的分配,叶子节点为1,其父节点依次乘以2,直到根节点为2n,得到基于决策树评价标准的特征重要度。

然后,使用逻辑回归标准进行评价,首先需要构建逻辑回归模型,步骤如下:

选择合适的激活函数,这里选择sigmoid函数

2)构造损失函数,表示预测的输出和训练数据类别之间的偏差,具体如下

3)使用梯度下降法进行权重的更新,目标是使损失函数达到最小值,梯度下降的过程表示为

4)在损失函数达到最小值后,选择当前的各项参数为模型的最终参数。

根据得到的各个特征的权重wi对各个特征进行排序,得到基于逻辑回归评价标准的特征重要度。

因为决策树模型是通过层次反映特征的重要程度,而逻辑回归模型是通过数值反应特征的重要程度,在进行标准融合的时候,希望能够保留各自的特征,所以采用求均值的方法进行融合。

设di表示特征i在决策树标准下的重要度,wi表示特征i在逻辑回归标准下的重要度,则特征i的最终重要度为:

通过观察特征的重要度,发现,不重要的特征其特征重要度较小,而重要特征的特征重要度远大于不重要特征或无关特征,所以采用所有特征重要度的标准差作为阈值。

保留特征中特征重要度大于σ的特征作为特征选择的结果。

步骤5,进行神经网络模型的构建,包括以下步骤:

5.1)进行网络的初始化:

假设输入层的节点个数为n,隐含层的节点个数为l,输出层的节点个数为m。输入层到隐含层的权重wij,隐含层到输出层的权重为wjk,输入层到隐含层的偏置为aj,隐含层到输出层的偏置为bk。学习速率为η,激励函数为g(x)。其中激励函数为取sigmoid函数。形式为:

5.2)得到隐含层的输出和输出层的输出:

根据上文所述构建三层bp网络,隐含层的输出hj为

输出层的输出ok为:

5.3)进行误差的计算,误差的计算采用交叉熵函数:

其中yk为期望输出。同时记yk-ok=ek

5.4)接下来进行权重和偏置的更新:

权重的更新公式为:

这里解释一下权重的更新公式,这是误差反向传播的过程,目标是使得误差函数达到最小值,使用上文提到的改进过的梯度下降法。

偏置的更新公式为:

5.5)判断算法迭代是否结束

有很多的方法可以判断算法是否已经收敛,常见的有指定迭代的代数,判断相邻的两次误差之间的差别是否小于指定的值等等。

步骤6,进行可视化界面的构建,包括以下步骤:

根据训练好的模型进行系统的构建,并制作可视化的界面,用户可以通过将自己的体检数据输入到系统中,然后系统会根据用户给出的各项信息对用户进行是否患病的预诊断。经过大量数据测试,系统的验证准确率能达到96%以上,具有良好的诊断效果。

以上所述,仅是本发明的较佳实施例而已,并非是对本发明作其它形式的限制,任何熟悉本专业的技术人员可能利用上述揭示的技术内容加以变更或改型为等同变化的等效实施例应用于其它领域,但是凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与改型,仍属于本发明技术方案的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1