BP神经网络在疾病预测中的应用
【摘要】 目的: 探讨BP神经在疾病预测中的应用。方法:设计合适的BP神经网络模型,用Matlab7.0编写模型程序,利用精神分裂症影响因素拟合模型。结果:BP神经网络在精神分裂症发病与否的预测中取得了较好的效果。结论:BP神经网络在流行病学中有良好的应用前景。
【关键词】 BP神经网络; 疾病预测; BP算法; 精神分裂症
BP神经网络是人工神经网络的一种,它通过模仿生物大脑神经系统信息处理功能实现输入与输出之间的任意非线性优化映射,有着传统统计方法无法比拟的适应性、容错性及自组织性等优点,特别是用传统统计方法效果不好或不能达到目的时,采用BP神经网络往往能收到较好的效果,它在疾病预测中有着广阔的应用前景。
1 BP神经网络基本结构及BP算法基本原理
BP神经网络的基本处理单元是神经元(即节点),大量神经元广泛连接构成神经网络。BP网络通常含有输入层、隐含层(中间层)和输出层,每层均包括多个神经元,输入层与输出层各有一层,隐含层根据需要可以设多层,也可不设。神经元之间通过权相互连接,前一层神经元只对下一层神经元作用,同层神经元之间无相互作用,权值的大小代表上一级神经元对下一级神经元的影响程度,如图1 所示。网络中作用于神经元的激励函数通常采用的是S 型函数(sigmoid 可微函数),见式(1)。
f(x)=(1+e-Qx)-1(1)
式中Q 为调节激励函数形式的参数,称增益值。Q 值越大,S 形曲线越陡峭;反之,曲线越平坦,通常取Q =1。
BP算法(Back Propagation) 是为了解决多层前向神经网络的权值调整而提出来的,也称为反向传播算法,即网络权值的调整规则是向后传播学习算法,具体来说,BP算法是建立在梯度下降法的基础上的,训练过程由正向传播和反向 传播组成,在正向传播过程中,输入信息由输入层经隐含层逐层处理,并传向输出层,如果输出层得不到期望的输出,则转入反向传播,逐层递归的实际输入与期望输入的差即误差,将误差信号沿原来的连接通道返回,通过修改各层神经元的权值,最终使得误差信号最小。
2 BP网络的建模过程及模型设计要点
在流行病学中,可以应用BP网络建立疾病的预测模型,建模的基本过程如下:首先收集导致疾病发生的主要影响因素及疾病发生的结果;然后把影响因素及疾病结果输入到设计好神经网络模型中进行反复训练,直到网络收敛(即达到预期的训练误差),在训练过程中可适当采用一定的技巧使网络的训练速度最快、误差最小、模型最优;最后用建立好的模型进行疾病预测。下面具体探讨网络模型的设计要点。
2.1 确定训练样本
训练样本应来源于研究总体的一个随机无偏样本,并且按随机、对照、重复及盲法等原则收集资料、整理资料、分析资料,保证训练结果的无偏性。训练样本含量适宜,含量过大会造成训练速度偏慢,训练结果过分逼近训练集(或者说是该研究的外部真实性较差),使得网络的推广泛化能力降低,况且,大样本的收集大大增加了工作量;样本过小其代表性不够,使训练结果不够可靠(或者说是该研究的内部真实性较差)。一般来说,网络的结构越复杂,所需样本越多,结构越简单,所需样本可相应减少。对于单层BP网络可参照Logistic回归对样本含量的一般要求,当样本含量与连接权的个数比为10:1时[1],就基本能够满足要求,多层BP网络的样本量应在此基础上根据网络的复杂程度适当增加。
2.2 变量值的归一化处理
归一化处理的目的是把变量值归一到区间[-1,1]内,此原因大致有两个:一是因为BP网络中非线性传递函数的值域一般在区间[-1,1]内,因此输入及输出变量的取值都限于这个区间之内。二是为了使输入值(特别是那些比较大的输入值)均落在Sigmoid传递函数变化较大的区间,使网络的训练速度最快,改善网络的性能,当然如果输入及输出值原本就位于[0, 1]区间内,可不进行的归一化处理,归一化处理可采取以下两种形式:
xbji=xji/ (xji,max-xji,min)(2)
xbji=xji/ (xji,max)(3)
上式中xbji 为归一化后样本中第j 个样品的第i 个输入变量,xji 为原始资料第j个样品的第i 个输入变量; xji,max 与xji,min 为原始资料第j 个样品的第 i个输入变量的最大值和最小值。
2.3 BP网络的初始化
开始训练时,首先进行网络权值的初始化,这是因为如果初始权值选择不当,有可能造成训练时间过长,误差平面陷入局部极小[2],甚至不收缩。所以网络的初始权值一般取[-1 1]之间的随机数,这样可保证每个神经元的权值都能够在 型传递函数变化梯度最大的地方进行调节。
2.4 输入层的设计
输入层仅设一层,输入神经元的个数与输入变量的个数相同。
2.5 隐含层的设计
一是隐含层的层数,对BP而言,一个三层BP网络就可以完成任意的n维到m维的映射,一般情况下,采用单隐层的网络就可满足要求;二是隐含层神经元的个数,隐单元数目的确定比较复杂,与资料的特点、输入输出单元的数目都有关系,往往根据设计者的经验和多次试验来确定,本文采取类似于统计学中建立"最优"多元回归方程中逐步向前法和向后法的方式来确定隐单元的数目,该方法如下:先根据以下公式[3]确定一个隐单元数的范围,n1=n+m+a(4) 式中n 为输入单元数,m 为输出单元数,a 为[1,10]之间的常数。
然后放入足够多的隐单元,通过训练将那些不起作用的隐单元逐步剔除,直到不收缩为止(此即灵敏度修剪算法[4]);或者在开始时放入比较少的神经元,逐步增加隐单元的数目,直到达到比较合理的隐单元数目为止。
2.6 输出层的设计
输出层仅有一层,输出层神经元的个数与所希望得出的预测变量数目相等。
3 其它需要注意的问题
如何提高网络的泛化能力。网络的泛化能力,通俗的说就是网络对新样本的预测能力。网络的泛化能力与网络的结构和训练样本的特性有关,一般说来,网络的隐节点数与隐层数越少,网络的泛化能力越强,因此在实际应用时尽可能采用较少的隐节点数和隐层数来得到较优的网络,另外,加入噪声等也可以提高网络的泛化能力[5]。
如何提高网络的训练速度与收敛速度。为提高训练速度,可采用变化的学习速率或自适应的学习速率[6]。
如何克服局部极小。BP算法可以使权值收缩到某个值,但并不能保证其误差平面的全局最小值,这是因为采用梯度下降发可能会产生一个局部最小值。对于这个问题,可采用附加动量法[7]、遗传算法等。
4 模型拟合实例
某市通过随机抽样、多因素逐步Logistic回归分析该市的4所精神病的精神分裂症新发病例及其对照各131例,筛选出影响精神分裂症发病的主要因素共10个:X1(本人学历)、X2(母亲学历)、X3(婚姻状况)、X4(事件经)、X5(性格)、X6(工作学习压力)、X7(母亲孕龄)、X8(出生体重)、X9(家族史)、X10(非双亲抚养史)。变量赋值如表1。表1 精神分裂症发病影响因素及量化(略)
4.1 确定训练样本及测试样本。以上述131对样品作为训练样本,另外选取精神分裂症患者及正常人各20例作为测试样本。
4.2 设计合适的神经网络参数。输入神经元10个,单层隐含层,隐含层神经元数目4~13个之间,通过灵敏度修剪算法确定隐含层的最佳神经元个数,输出层神经元个数为1;训练次数1000次,训练目标0.01,学习速率0.1;隐含层采用 型正切函数tansig,输出层采用 型对数函数logsig ,网络训练的函数设定为trainlm。
4.3 编写程序。应用Matlab7.0编写BP神经网络程序如下:p=[ 0 1 3 1 0 0 3 0 1 0;0 1 1 2 2 1 4 1 2 1;......] '; %输入训练样本的输入变量p
for i=1:10
P(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:))); %输入变量的归一化处理
end t=[1 1 1 1 1 1 1...... ]'; %输入训练样本的输出变量tthreshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1]; %限定输入变量的最大值与最小值no=[4 5 6 7 8 9 10 11 12 13 14];%隐含层神经元的个数 for i=1:11net=newff(threshold,K[no(i),1],{ 'tansig','logsig'},'trainlm'); %设定网络训练函数net.trainParam.epochs=1000; %设定训练次数net.trainParam.goal=0.01; %设定训练目标LP.lr=0.1;%设定学习速率net=init(net); %网络的初始化net=train(net,P,t); %网络训练
p_test=[0 1 3 1 0 0 3 0 1 0;0 1 1 2 2 1 4 1 2 1;......]'; %输入预测样本的输入变量for i=1:10
P_test(i,:)=(p_test(i,:)-min(p_test(i,:)))/(max(p_test(i,:))-min(p_test(i,:))); %归一化处理 end
Out=sim(net,P_test); %输出预测变量X=[1 1 1 1 1 1 1 1......]; %输入预测样本的实际结果
plot(1:40,X-Out); %绘制预测误差曲线
4.4 训练结果。通过反复训练发现,当隐含层神经元个数为8时,网络的训练速度最快,仅需要9次训练便达到到了预期的训练误差,训练的速度也比均匀,网络振荡最小。
4.5 测试样本的前瞻性考核。把40个测试样本的调查资料输入上述训练好的BP神经网络模型进行前瞻性考核,如果按照预报误差大于0.05时为预测错误的标准,则病例中有2例预测错误,正常人有3例预测错误,灵敏度及特异度分别为90%、85%,预测的一致率为87.5%,前瞻性考核的效果较好,通过预测误差曲线也可看出,如图2。
5 讨论
BP神经网络是一种非传统的多元非线性模型,可以识别变量间复杂的非线性关系,功能十分强大,而且无论变量是何种类型,是否满足正态性、独立性等条件均可用于BP网络建模。疾病的发病过程亦是一个受多因素影响的复杂过程,利用传统的统计方法预测疾病的发生过程往往存在很大的局限性,而BP神经网络的优点恰恰适合预测疾病的发生过程。BP神经网络的设计直接关系到网络的应用效果,在应用时按照资料的特点从每一细节考虑网络的设计。当然,BP网络在流行病学领域的应用刚刚起步,尚存在一些问题有待解决,如权重系数的假设检验,权重系数的可信区间,含隐含层时权重系数的流行病学意义,输入变量的选择等都还需要进一步研究。
【】
1 Martin S,Werner V,Reinhard R.Neural networks and logostoc regression:Part I.Comp Stat Data Analy ,1996,21:661.
2 Haykin,S.神经网络原理(叶世伟等译).第2版.机械出版社,2004.
3 飞思科技产品研发中心.神经网络理论与MATLAB7实现.第1版.工业出版社,2005 .
4 邓伟,金丕焕,林果为.BP神经网络修剪算法筛选白血病预后危险因素.复旦学报(医 学版),2003,2:154~157.
5 HolmstromL,KoistinenP -Using Additive Noise in Back-Propagation-IEEE Trans·Neural Networks.1992,3:24~38.
6 张洪,邹乐君,沈晓华. BP神经网络在测井岩性识别中的应用.地质与勘探 ,2002,38(6):63~65.
7 武妍,施鸿宝.一种模糊规则动态调整BP算法中参数的方法.计算机研究与,1998,35(8):689~693.