基于BP神经网络的地震预测以我国西南某地震常发地区的地震资料作为样本来源,实现基于神经网络的地震预测。根据这些地震资料,提取出7个预测因子和实际的震级M作为输入和目标向量。预测因子为:(1)半年内M大于等于3的地震累计频度;(2)半年内能量释放积累值;(3)b值;(4)异常地震带个数;(5)地震条带个数;(6)是否处于活动期内;(7)相关地震区地震震级。通过数据的收集并对10个样本进行归一化处理,如表1:表10.65630.8974000.50.980.12300.39150.31250.05260000.760.06920.08100.37500.36840000.710.49250.58051.00000.9474110.50.750.03830.99900.50000.26321000.710.49480.21600.43750.7368100.50.6741830.41580.93751.000010.510.631.00000.62100.59380.315810.500.680.54020.28350.53130.315810.50.50.770.47410.3915000000.6200实际震级相关区震级活动周期地震条带个数异常地震群个数b值累计释放能量地震累计频度根据以上数据对这一地区的地震进行预测,其中待测数据如表2,并对该地区的地震定级。表20.37500.47371000.750.25650.16200.71870.578910.50.50.710.80380.54000.62500.421110.50.50.670.58420.68850.59380.68421000.630.43470.49950.43750.2632100.50.680.37900.43200.40620.736810.500.770.36670.17550.18750.21050000.620.07420.0270实际震级相关区震级活动周期地震条带个数异常地震群个数B值累计释放能量地震累计频度一、问题重述以我国西南某地震常发地区的地震资料作为样本来源,基于BP神经网络对该地的地震进行预测。通过对该地区地震的统计,从中提取出7个预测因子作为输入向量,实际的震级作为输出向量,对已有的数据进行归一化处理,建立一个BP神经网络通过训练、仿真,满足允许的一定误差后,对该地区震级进行预测(待测数据如表2)。二、问题分析引发地震的相关性因素很多,其产生机理的复杂性、孕育过程的非线性和认识问题的困难性使得人们很难建立较完善的物理理论模型。对有关物理参数加以精确的描述,只能借助一些观测到的相关现象进行分析、总结和推理。相对于传统的预报方法,神经网络以其容错能力强、预测与识别速度快和避开了特征因素与判别目标的复杂关系描述,特别是公式的描述等特性能够对复杂系统模型进行很好的预测。因此根据已知的资料实现基于BP神经网络的地震预测,利用已知的数据通BP神经网络学习和训练,在这里采用单层隐的BP网络进行地震预测。初步确定隐含层,在三层BP网络中隐含层神经元个数a和输层神经元个数b之间有以下近似关系:a=2b+1。由于输入样本为7维向量,因此,输入层一共有7个神经元,则中间层应该有15个神经元。网络只有1个输出数据,则输出层只有1个神经元,因此,网络应该为[7,15,1]的结构。按照BP网络的一般设计原则,由于输出已被归一化到区间[0,1]中,因此,隐含层神经的激活函数可设定为tansig;输出层神经元的传递函数可以设定为S型对数函数即logsig函数。三、模型假设1、神经网络在外界输入样本的刺激下不断改变网络的连接权值,以使网络的输出不断地接近期望的输出。2、对各连接权值的动态调整。3、权值调整规则,即在学习过程中网络中各神经元的连接权变化所依据的一定的调整规则。4、学习是有有导师学习法。四、符号说明BP神经网络的创建格式及其使用函数1、net=newff(PR,[S1S2...SN1],{TF1TF2...TFN1},BTF,BLF,PF),2、net为创建的新BP神经网络;3、PR为网络输入取向量取值范围的矩阵;4、[S1S2…SNl]表示网络隐含层和输出层神经元的个数;5、{TFlTF2…TFN1}表示网络隐含层和输出层的传输函数,默认为‘tansig’;6、BTF表示网络的训练函数,默认为‘trainlm’;7、BLF表示网络的权值学习函数,默认为‘learngdm’;8、PF表示性能数,默认为‘mse’。9、a=logsig():对数Sigmoid激活函数,对数Sigmoid函数把神经元的输入范围从(-∞,+∞)映射到(0,1)。它是可导函数,适用于BP训练的神经元。10、Net=train():神经网络训练函数。11、Net=sim():神经网络仿真函数。12、a=postmnmx():数据的反归一化处理。五、模型建立1、BP神经网络模型如图1所示,一个具有n个输入的神经元模型12(,,....)nXxxx为神经元的输入,为可调的输入权值,12(,,...)n为偏移信号,用于建模神经元的兴奋阈值.u和f分别表示神经元的基函数和激活函数.基函数u是一个多输入单输出函数,u=u();激活函数f的一般作用是对基函数的输出进行“挤压”:y=f(u),即通过非线性函数f()将u变换到指定范围内.u...1x2xnxfY1w2wnw图1神经网络模型本题中用到的训练样本P为10组,每组7个数据,分别是与震级有关的7个预告因子。在三层BP网络中隐含层神经元个数a和输层神经元个数b之间有以下近似关系:a=2b+1。因此输入层一共有7个神经元,则中间层应该有15个神经元。网络只有1个输出数据,则输出层只有1个神经元,因此,网络应该为[7,15,1]的结构,如图2,地震累计频数累计释放能量b值异常地震群数地震条带个数活动周期相关区震级...震级图2地震预测神经网络模型用输入的10组训练样本P对网络进行训练,使它能够根据输入数据,预测实际震级.网络的实际输出用Y表示。六、模型求解利用表1的数据对网络进行训练,训练后的网络才有可能满足于实际应用的要求,网络的训练次数如图3。由于本题所给的数据已经是经过归一化处理的,在数据反归一化时,不能确定原数据的最大值与最小值。根据我们查阅资料,在此题中我们采用的最大与最小值[4.46.1]。通过训练后的震级Y=0.00870.53130.59380.93770.43750.50000.99500.37500.31220.6563;实际的震级Y1=00.53130.59380.93750.43750.50001.00000.37500.31250.6563;误差值e=0.00870.00000.00000.00020.00000.00000.00500.00000.00030.000;对表2数据经过网络测试:网络输出=0.01200.72660.35150.66310.65540.75700.5027;实际的震级=0.18750.40620.43750.59380.62500.71870.3750;对表2的数据的输出结果经过反归一化处理后得到预报震级和实际震级相比较可得到网络的预报误差(如图4,如表3所示)。图3训练次数123456700.050.10.150.20.250.30.35图4误差值表3预测误差实际震级预测震级预测误差5.40945.26020.14925.59535.86760.27235.62195.54880.07315.75475.81370.05895.78135.80710.02595.86095.89340.03255.56875.67730.1086接着对隐含层的层数进行调整,分别调为3,10,20,13等对网络进行训练和测试,然后与15时的预测结果的误差进行对比(如图5)。使用不同层数与实际震级的对比(如图4),虽然网络训练的精度提高,并不意味着层数越多预测的效果越好,相反取3层得效果要好于20层,但是与15层相比而言,他的精确度要小一些。所以对于BP神经网络的隐含层的层数而言,不是越多越好。123456700.511.5实际值15层3层10层20层13层图5不同层数之间对比七、参考文献1.杨居义,易永宏,基于BP神经网络的地震预测研究[J],微电子学与计算机,1000-7180(2008)10-0129–04。2.刘洪海陈晨,基于BP神经网络的地震预测[J],中国科技信息,2009年第7期.八、附录7.1、clearallclccloseallA=xlsread('dizhenxuexi.xls')%读表一的数据P=A(:,1:7)';T=A(:,8)';%建立7*15*1结构的BP网络net=newff([01;01;01;01;01;01;01],[7,15,1],{'tansig','logsig','purelin'},'traingdx')net.trainParam.goal=0.0001%设定误差net.trainParam.epochs=10000%设定最大迭代次数net=train(net,P,T)%对网络进行训练aa=sim(net,P)%对网络进行访真%画图像,将表一的实际震级与预测震级进行对比,‘-*’表示实际震级,‘-+’表示预测震级figureX=1:10;plot(X,T,'-*',X,aa,'R-+')a=xlsread('dizhenceshi.xls')%读表二的数据p=a(:,1:7)';an=sim(net,p)%对表二的数据进行仿真%对表二的地震预测值反归一处理[ant]=postmnmx(an,4.4,6.1)%对表二的地震实际值进行反归一处理ann=a(:,8)';x_min=min(ann(1,:));x_max=max(ann(1,:));[tt]=postmnmx(ann,4.4,6.1)%画图像,将表二的实际震级与预测震级进行对比,‘-’表示实际震级,‘-+’表示预测震级figurex=1:7;plot(x,tt,'-',x,ant,'R-+')%误差图像c=tt-ant%预测误差;figureplot(x,tt-ant)7.2clearallclccloseall%**********隐含层的层数为15层*************A=xlsread('dizhenxuexi.xls')%读表一的数据P=A(:,1:7)';T=A(:,8)';%建立7*15*1结构的BP网络net=newff([01;01;01;01;01;01;01],[7,15,1],{'tansig','logsig','logsig'},'traingdx')net.trainParam.goal=0.00001%设定误差net.trainParam.epochs=10000%设定最大迭代次数net=train(net,P,T)%对网络进行训练aa=sim(net,P)%对网络进行访真%画图像,将表一的实际震级与预测震级进行对比,‘-*’表示实际震级,‘-+’表示预测震级X=1:10;figure(1)plot(X,T,'-*',X,aa,'R-+')%***********对表2数据进行预测*****************a=xlsread('dizhenceshi.xls')%读表二的数据p=a(:,1:7)';an=sim(net,p)%对表二的数据进行仿真m=1:7;t=a(:,8)';figure(2)plot(m,t,'-',m,an,'-');%对表二的地震预测值反归一处理[ant]=postmnmx(an,4.4,6.1)%对表二的地震实际值进行反归一处理ann=a(:,8)';x_min=min(ann(1,:));x_max=max(ann(1,:));[tt]=postmnmx(ann,4.4,6.1)c=abs(tt-ant)%预测误差;%***********隐含层的层数为3层*****************A=xl