BP神经网络在中医疾病诊断中的实现

2019-10-31 07:00吴燎
电脑知识与技术 2019年22期
关键词:中医诊断神经网络

吴燎

摘要:疾病的诊断准确性是中医临床用药的关键,利用神经网络诊断中医疾病有利于提高疾病诊断的准确性,有利于中医数字化的发展。在MATLAB环境下,利用BP神经网络技術,通过症状预测糖尿病、高血压、咳嗽、冠心病、胃病。通过数据的整理,并提炼出网络模型,临床验证咳嗽的正确率达到93%,糖尿病正确率达到91%,高血压正确率达到94%,冠心病正确率达到97%,胃病的正确率达到90%,利用人工神经网络成功实现了疾病的诊断。

关键词:中医;神经网络;预测;诊断

中图分类号:G642        文献标识码:A

文章编号:1009-3044(2019)22-0200-03

开放科学(资源服务)标识码(OSID):

1 引言

通过国内期刊数据库对BP神经网络和中医临床诊断检索了87篇相关论文,其中关于神经网络报道16篇,BP神经网络报道27篇,人工神经网络报道10篇,与神经网络相关的论文一共43篇。关于神经网络应用于疾病诊断,关于中医诊断9篇,中医证候9篇,中医专家系统6篇,高血压3篇,哮喘2篇,大肠癌2篇,冠心病3篇,糖尿病3篇。在以前疾病的诊断中,一直试想如何提高诊断率是我们一直在努力思考的问题之一,虽然在利用BP神经网络达到了90%以上的准确率,大多数在92%左右。此研究通过数据整理,增加了样本采集量,准确率可以达到98%左右。之前,研究的病历资源较少,大肠癌症型分类研究中应用数据为338例,糖尿病肾病中医侯症中研究数据为449个,数据量往往只有200至400个左右。本次增加了样本采集量,通过1565个数据实验,其中包括不同的疾病,糖尿病,高血压,冠心病,咳嗽,胃病。使得疾病的类型覆盖面大大提高,得到各种急病的诊断率有所提高。

2 采集数据

采用的数据来四川省各个县市医院的临床数据,由于实际情况临床的诊断对象表现出不止一种病,可能患其他各种疾病,所以研究又引入了高血压、咳嗽、冠心病、胃病等疾病一同建立模型,模拟真实的就医环境。数据针对糖尿病、高血压、咳嗽、冠心病,胃病共1565例。病例包括乏力、便秘、心悸等310个症状,以及Ⅱ型糖尿病、高血压、咳嗽、冠心病、胃病5个疾病诊断。

2.1数据清洗规则

数据的收集过程中,会产生各种难以避免的错误和不规范操作,导致数据库中有噪声(noise),不完整(missing),不一致(inconsistent)的数据[1],要保证数据的规范正确,为此,首先要进行数据的清洗。对于数据的清洗采用:填补遗漏的数据值、平滑噪声数据等[2]。对于疾病的描述不准确、遗漏的数据。采取舍去的方法,保证数据的完整性。对于症状与描述的不统一,疾病的诊断不统一。按照国家中医药管理局发布的术语规范进行规范化降噪,保证数据的一致性和真实性。对于空白,错误的数据,一律舍去,保证数据的正确和完整。在数据清洗之后,将数据整理,进行数字化编码处理。数字化编码以0、1编码[3],0代表不存在,1代表存在。

2.2清洗方法

数据预处理:删除错误和空白的数据,保证数据的正确性。替换不规范的数据,保证数规范统一,得到1020例正确数据。其中确诊糖尿病590例,确诊高血压61例,确诊咳嗽205例,确诊冠心病21例,确诊胃病143例。

主成分分析:对归一化处理后的数据进行主成分分析[4],由于1565条数据涵盖的症状有302个。如果将每一个症状输入神经网络,会大大增加网络复杂度。所以在不影响诊断的情况下,选择主成分即可。主成分的选定标准为频数大于15的症状,经过筛选前27个症状的频数大于15,输入症状从302个提炼至27个。

3 BP神经网络设计

3.1网络层数

BP神经网络[6]可以包含一个或者多个隐含层,理论上已经证明,单个隐含层可以通过适当增加神经元节点的个数实现任意非线性映射。对于大多数应用场合,单个隐含层即可满足需要。但如果样本过多,增加一个隐含层可以明显减少网络规模。因为样本数据输入层有27个输入节点,所构成的网络较复杂,因此采用2个隐藏层。

3.2输入层节点数

输入层节点数由于输入向量的维数决定。此研究输入27个症状,所以有27个输入节点。

3.3隐含层节点数

隐含层节点数[7]决定了神经网络的结构。目前对确定隐含层节点个数没有一个明确方法,需要参考公式,再结合实验调整节点个数,确定最佳的训练效果。经过实验调整,最终确定了两个隐含层个数为6和3的训练的时间最短,网络误差最小,最后的准确率也较高。

3.4输出层神经元个数

输出层的神经元个数即为需要预测的疾病个数。本次研究分别有糖尿病、咳嗽、冠心病、高血压、胃病五个疾病,所以对应有五个输出节点。

3.5隐含层传输函数的选择

BP网络的输入节点传递函数[8]有多种。最常见的两种为Log-sigmoid和Tan-sigmoid。Log-sig型函数的输入值可以取任意的值,输出值一般为(0,1)之间,Tansig函数的输入值可以为任意值,输出值一般在(-1,1)之间。由于本次研究的期望输出都是(0,1),所以选择对应的Log-sig作为传递函数。输出节点转移函数选用tansig函数或purelin函数。对于函数的选择,本实验分别试用了两个函数,结果表明tansig函数在65次达到最小梯度,purelin函数在15次达到最小梯度。所以采用purelin函数的训练效果较好。

3.6训练函数选择

训练函数[9]的选择用trainlm( Levenberg-Marquardt )提供数非线性最小化的数值解。此算法能借由执行时修改参数达到结合高斯-牛顿算法以及梯度下降法的优点,并对两者之不足作改善。函数的速度很快,但该函数运行过程会消耗大量的内存资源。如果计算机内存不够大,采用训练函数trainbfg或trainrp。虽然这两个函数的运行速度比较慢,但它们的共同特点是内存占用量小,不至于出现训练过程死机的情况。

4 BP神经网络建立

在MATLAB 7.0 环境下,建立BP 网络模型。该网络包括一个输入层、2个隐含层和一个输出层, 其中输入层包含27個输入神经元;2个隐含层分别有6、3个神经元;输出层包含4个输出神经元。2个隐含层之间通过正切S型传递函数(tansig)连接,隐含层与输出层之间用对数s型传递函数(logsig)连接。设定网络的系统误差为小于0.001,最大迭代次数为 2000次,最小下降梯度为1*e-7。

4.1 BP网络的输出方式

将具有糖尿病、高血压、冠心病、咳嗽、胃病5种证型诊断样本的期望输出值分别定为(1,0),(1,0),(1,0),(1,0),(1,0)。

4.2 BP网络的训练

第1次训练经过20次迭代以后,网络的误差低于0.0082363289,训练自动停止;第2次训练经过 42次迭代后,网络的系统误差降至0.0013009759;上述数值均小于规定的最小误差0.01, 网络趋于稳定,网络性能达标,训练自动停止。

4.3 BP网络的测试

将研究的数据分为三份,其中两份数据作为训练数据,一份数据用于检验。用检验数据对训练好的神经网络做检验。并重复三次实验,测试结果,保证训练方法的正确性。

4.4结果与讨论

从结果中可以看到,该网络模型对于糖尿病,具有较高的辨识率相对稳定可靠。糖尿病、咳嗽和高血压、胃病准确率达90%以上,冠心病准确率达97%。每种疾病的准确率不相同,其中冠心病的准确率最高,三次测试,达到了97%,而胃病、糖尿病的准确率相比之下较低,为92%左右。造成准确率不同的原因有多种,可能与训练数据的量有关,可能与疾病本身的症状相关。此次研究糖尿病的病例最多,糖尿病590例,咳嗽205例,冠心病21例,高血压61例,胃病143例。冠心病的数据量相对较少,但是准确率也很高,可能和疾病的本身特异性症状相关。高血压准比例数量较多,但确率较低,可能和共有症状混淆有关。我们从临床上了解到,高血压和糖尿病常为并发疾病,糖尿病的患者同时也容易患高血压[10],二者的症状常常共同出现,在1020例数据中,同时患有高血压和糖尿病的达55例,所以糖尿病的诊断很可能会影响到高血压的诊断,对于高血压的诊断造成一定的误诊。但是此猜想还有待今后的研究进一步确认。

5 结论

此实验基于模拟真实的就诊环境,利用真实的电子临床数据,结合matlab软件,可以辅助预测了糖尿病,咳嗽,高血压,冠心病的诊断。说明BP神经网络不仅可以成功地模拟非线性关系,从大量的数据中学习,自主的进行判断,从而几乎完美的逼近真实的数据。而且此网络模型成功地预测了多种疾病。但是,本次实验还有诸多问题需要改进。

5.1 数据的量小,质量不高

虽然本次处理的数据达到了1565条,但是跟实际的临床环境需要的大量数据还是有很大的差距。一个良好的神经网络要学到几十年中医的临床经验,其需要的训练量是百万级别的。所以数据量还远远不够。而且,本次实验从1565条数据中清理后只剩下了1020条数据.其中不合格的数据量达到了34.8%,说明电子数据的质量还有待提高。

5.2 数据编码得不断优化

本次处理数据采用二进制编码对症状编码。每一个症状只有0,1两种输入选项。所以此方法造成BP神经网络输入的节点数庞大,而且并没有涵盖所有的症状。为此,以后的研究中可以通过分类编码的方式。将所有的症状分类,并且在每一个类别中进行编码。这样既可以减少输入节点的数量,也可以涵盖所有的症状。最终减少了网络的规模,也保证了数据的完整性。

5.3 诊断复杂度不够

研究采用的数据涵盖了五个疾病诊断。包括咳嗽,糖尿病,高血压,冠心病,胃病。五种疾病在症状上的差异较大,正确率很高。以后要研究在症状相似的疾病间的诊断,增加复杂度。这样才能真正做到模拟中医思维,提高疾病的诊断率。

中医诊断智能模型从不同的症状,共有症状之间去辨别,利用症状之间的联系和差别从而诊断出不同的疾病,成功地模拟了临床的诊断。此研究在matlab环境下实现了神经网络的疾病诊断,未来人工智能应用是医疗行业发展的方向,期待将神经网络模型应用于现实的医院HIS系统,进一步完善神经网络在医疗行业的应用。

参考文献:

[1] 孟祥逢, 鲁汉榕, 郭玲. 基于遗传神经网络的相似重复记录检测方法[J]. 计算机工程与设计, 2010,31(7):1550-1553.

[2] 覃华, 苏一丹, 李陶深. 基于遗传神经网络的数据清洗方法[J]. 计算机工程与应用, 2004,40(3):45-46.

[3] 宋擒豹, 沈钧毅. 神经网络数据挖掘方法中的数据准备问题[J]. 计算机工程与应用, 2000,36(12):102-104.

[4] 贺昌政, 俞海. BP人工神经网络主成分分析预测模型及应用[J]. 数量经济技术经济研究, 2001,18(9):104-106.

[5] 邱龙金, 贺昌政. 神经网络稳定性的交叉验证模型[J]. 计算机工程与应用, 2010,46(34):43-45.

[6] 陈朝阳, 行小帅, 李玥. 共轭梯度BP算法在Matlab 7.0中的实现[J]. 现代电子技术, 2009,32(18):125-127.

[7] 沈花玉, 王兆霞, 高成耀,等. BP神经网络隐含层单元数的确定[J]. 天津理工大学学报, 2008,24(5):13-15.

[8] 张晓文,杨煜普,许晓鸣. 神经网络传递函数的功能分析与仿真研究[J]. 计算机仿真, 2005,22(10):176-178.

[9] 陈杨,王茹,林辉. Matlab6.0版本中神经网络工具箱训练算法的使用与比较[J]. 电脑与信息技术, 2002(3):1-6.

[10] 孔德坤, 张晓斌. 糖尿病与高血压[J]. 中华内分泌代谢杂志, 2005,21(5):68-70.

【通联编辑:王力】

猜你喜欢
中医诊断神经网络
神经网络抑制无线通信干扰探究
窄带成像联合放大内镜在胃黏膜早期病变诊断中的应用
关于中西医结合治疗乳腺增生病38例临床观察
基于神经网络的拉矫机控制模型建立
复数神经网络在基于WiFi的室内LBS应用
基于支持向量机回归和RBF神经网络的PID整定