1、第第12章章 神经网络预测法神经网络预测法 12.1 神经网络基本理论 12.2 BP神经网络的MATLAB函数 12.3 案例分析 12.3.1 北京市房地产开发投资及销售分析练习与提高(练习与提高(12)12.3.2 深证综合指数预测 12.1 神经网络基本理论12.1.1 人工神经网络人工神经网络人工神经网络(Artificial Neural Network,ANN),是由大量处理单元(神经元Neurons)广泛互连而成的网络,由分布于若干层的节点组成。每个单节点都有自己的输入值、权重、求和与激活函数以及输出值,在处理之前,数据被分为训练数据集(Training Data set)和测
2、试数据集(Testing Data set),然后将权重或输入,指派到第一层的每一个节点。每次重复时,系统处理输入,并与实际值相比较,得到度量后的误差,并反馈给系统,调整权重。大多数情形下,调整后的权重都能更好地预测实际值。当达到预定义的最小误差水平时,处理结束。12.1.2 BP神经网络的基本原理 BP(Back-Propagation Network)是一种多层网络的“逆推”学习算法。其基本思想是:学习过程由信号的正向传播与误差的反向传播组成。正向传播时,输入样本从输入层传入,经隐层逐层处理后传向输出层。若输出层的实际输出与期望输出不符,则转向误差的反向传播阶段。误差的反向传播是将输出误差
3、以某种形势通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程是周而复始地进行。权值不断调整的过程,也就是网络的学习训练过程。此过程一直进行到网络输出的误差减少到可以接受的程度,或进行到预订的设定的学习次数为止。12.1.3 BP神经网络过程1BP网络的结构BP网络是一种单向传播的多层前向网络,具有三层或三层以上的神经网络,包括输入层、中间层(隐层)和输入层。上下层之间实现全连接,每一层神经元之间无连接。输入层 隐层 输出层2传递函数或激活函数一般输入层和隐层的传递函数是S形函
4、数(logsig):正切S形函数(tansig)1()1xf xe1()1xxef xe输出层的是线性函数,用purelin表示3模拟过程首页首页网络通过对已知信息的反复学习训练,运用根据误差来逐步调整与改变神经元连接权重和神经元阈值的方法,使得相似的输入有相似的输出,从而达到处理信息、模拟输入输出关系的目的。(1)读入样本、设定初始权值和阈值;(2)设定参数;(3)计算隐含层输出;(4)计算输出层输出;(5)计算输出值与期望值的误差;(6)判断误差是否小于设定值,是则结束;(7)调整隐层到输出层的权值和阈值;(8)调整输入层到隐层的权值和阈值;(9)返回计算隐含层输出。4学习过程首页首页(1
5、)读入样本;(2)数据处理;(3)创建网络;(4)设定参数;(5)训练网络;(6)模拟输出;(7)调整参数:学习速率、动量系数、训练次数、误差精度等;(8)仿真预测:网络固定,输入新的样本集,模拟输出。12.1.4 BP神经网络预测神经网络预测首页首页BP神经网络通过对以往历史数据的学习,找出数据的变化趋势之间的非线性关系,并将其存储在网络具体的权值和阀值中,从而预测未来数据的走势。用神经网络进行预测,即用神经网络通过一组数据点 来拟合函数f,得出未来 (k1)时刻数据的预测值。1(,)n m knnn mXf XXX1,nnn mXXXnmk1单步预测首页首页当k=1时,且网络的所有输入数据
6、都是时间序列的实际观测值时所做的预测就是单步预测。在进行预测时,把实际的时序观测值 ,这m个数据输入网络,输出是下一时刻的预测值 1,nnn mXXX1n mX若要继续对 的值进行预测,则用实际观测值 作为输入数据,得到预测值 2n mX121,nnn mXXX2n mX2多步预测首页首页当kl时,网络输入m个历史数据,输出 的预测值。多步预测用于股票价格预测误差较大。这是因为在网络运行调整权值和阀值时,每次迭代都要累加前一次k个预测值的误差,从而造成网络难以收敛的情况,甚至导致网络发生振荡。12,n mn mn m kXXX首页首页3滚动预测滚动预测,又可称为迭代一步预测,是先进行单步预测,
7、再将网络输出的预测值反馈给网络输入端作为输入的一部分,用于下一步的预测。若开始预测时输入数据是实际的时序观测值 输出是下一时刻的预测值 ,1,nnn mXXX1n mX将 与 一起作为输入数据对 项进行估计,得到输出的预测值 1n mX12,nnn mXXX2nmX2n mX如此反复迭代,就得到对未来一段时期的预测值。12.2 BP神经网络的MATLAB函数1数据的预处理和后处理数据的预处理和后处理是有效训练神经网络的关键步骤,直接影响到训练后神经网络的性能。常见的方法是将原始数据进行归一化处理,即通过一定的线性变换将输入和输出数据统一限制在0,1或-1,1区间内。利用premnmx或pres
8、td函数可以对输入和目标数据集进行归一化处理,使其落入-1,1区间。首页首页格式:格式:Pn,minp,maxp=premnmx(P)Pn,minp,maxp,Tn,mint,maxt=premnmx(P,T)说明:说明:premnmx函数用于对网络的输入数据或目标数据进行归一化,归一化后的数据将分布在-1,1区间内。归一化公式为:Pn=2*(P-minp)(maxp-minp)-l Tn=2*(T-mint)(maxt-mint)-l其中,P为原始输入数据,maxp和minp分别是P中的最大值和最小值,Pn为归一化后的输入数据。T是原始目标数据,maxt和mint分别是T的最大值和最小值,T
9、n是归一化后的目标数据。格式:格式:P,T=postmnmx(Pn,minp,maxp,Tn,mint,maxt)说明:说明:Postmnmx函数可将premnmx函数所归一化数据进行反归一化处理P=0.5*(Pn+1)*(maxp-minp)+minpT=0.5*(Tn+1)*(maxt-mint)+mint 将输入数据或目标数据转化为区间0,1的归一化处理公式为:Pn=(P-minp)(maxp-minp)Tn=(T-mint)(maxt-mint)其对应的反归一化处理公式 P=Pn*(maxp-minp)+minp T=Tn*(maxt-mint)+mint2.创建网络(1)newff函
10、数:用来建立一个前馈BP网络格式:格式:net=newff(PR,SN,TF,BTF,BLF,PF);说明:说明:PR:表示由每组输入(共P组)元素的最大值和最小值 组成的P2维矩阵;或用函数minmax(P)表示;SN:表示网络隐含层和输出层神经元的个数;TF:表示网络隐含层和输出层的传递函数,tansig(默认),logsig,purelin;BTF:表示网络的训练函数。普通训练traingdm:需设定 学习速率、动量系数,快速训练trainlm(默认):BLF:表示网络权值学习函数,learngdf(默认);PF:表示网络性能函数,mse(默认),网络输出和目标输出的均方误差。3设定参数
11、net=init(net);初始化网络权值和阈值(可不设定)net.trainparam.show=训练状态的显示幅度;(默认25)net.trainparam.lr=学习速率;(权值阈值的调整幅度)net.trainparam.mc=动量系数;(权阈值改变的重复度)net.trainparam.epochs=训练次数;(默认100)net.trainparam.goal=误差精度;(默认0)net.trainparam.time=训练秒数;(可不选)(4.训练网络:格式:格式:net,tr=train(net,P,T)说明:说明:P为输入样本矢量集;T为对应的目标样本矢量集:等号左右两侧的n
12、et分别用于表示训练得到和训练以前的神经网络对象;tr存储训练过程中的步数信息和误差信息,并给出网络误差实时变化曲线。5.BP神经网络的仿真格式:格式:Y,Pf,Af,E,perf=sim(net,P,Pi,Ai,T)说明:说明:输入net为神经网络对象,P为网络输入,Pi为输入延迟的初始状态,Ai为层延迟的初始状态,T为目标矢量,Y为网络输出,Pf为训练终止时的输入延迟状态,Af为训练终止时的层延迟状态,E为输出和目标矢量之间的误差,perf为网络性能值。首页首页6.模拟输出图形输出:plot(横坐标,纵坐标,参数)查看参数:权值:net.IW(层序号)阈值:net.b(层序号)12.3 案
13、例分析12.3.1多指标的股票开盘价预测【例12-1】2015年11月2日至12月31日平安银行股票的开盘价、最高价、最低价和收盘价数据如表12-1所示,试用BP神经网络对股票开盘价进行仿真预测。日 期开盘价最高价最低价收盘价日 期开盘价最高价最低价收盘价2015-11-0211.2711.3211.111.142015-12-0211.712.6411.6612.512015-11-0311.1511.2111.0111.052015-12-0312.3912.7512.2512.452015-11-0411.0811.711.0511.692015-12-0412.3112.3812.08
14、12.122015-11-0511.612.5711.5512.072015-12-0712.1812.2512.0412.152015-11-0612.0212.4111.9212.392015-12-0812.0712.0911.911.962015-11-0912.513.3812.4612.942015-12-0911.9212.1211.911.992015-11-1012.813.0712.6112.752015-12-1011.9512.1411.9111.962015-11-1112.712.7812.3812.552015-12-1111.9111.9211.7311.832
15、015-11-1212.612.6512.2812.42015-12-1411.7312.1111.7112.072015-11-1312.2212.4812.1912.242015-12-1512.0312.0911.8611.922015-11-1612.1312.3912.0912.342015-12-1611.9812.0111.8811.892015-11-1712.4112.712.3612.52015-12-1711.9712.1411.9612.072015-11-1812.4612.712.3112.422015-12-1812.0312.5512.0212.232015-1
16、1-1912.412.5112.3312.52015-12-2112.1412.7212.1112.512015-11-2012.512.5912.4212.552015-12-2212.512.6212.3812.432015-11-2312.5512.612.3812.452015-12-2312.4712.7812.412.482015-11-2412.4112.4512.1612.282015-12-2412.4612.5612.2412.342015-11-2512.2112.3712.1712.322015-12-2512.3812.4712.3312.412015-11-2612
17、.3612.3812.212.232015-12-2812.4312.4611.9811.982015-11-2712.1812.211.5311.732015-12-2911.9912.111.9712.092015-11-3011.7211.8711.511.742015-12-3012.0912.1111.9512.12015-12-0111.711.8611.5111.752015-12-3112.112.1311.9811.99X=11.27 11.32 11.1 11.1411.15 11.21 11.01 11.0511.08 11.7 11.05 11.6911.6 12.57
18、 11.55 12.0712.02 12.41 11.92 12.39%数据太多,在此省略11.99 12.1 11.97 12.0912.09 12.11 11.95 12.112.1 12.13 11.98 11.99;m,n=size(X);%44行、4列ts=X(2:m,1);%第一列开盘价数据作为输出目标,从第二行开始取,直到最后一行tsx=X(1:m-1,:);%全部四列数据都做为输入变量,从第一行开始,最后一行不取%数据预处理TS=ts;%将列转成行,神经网络要求按行输入数据TSX=tsx;Pn1,minp1,maxp1=premnmx(TS)%对TS归一化Pn2,minp2,m
19、axp2=premnmx(TSX)%对TSX归一化rand(state,0);%保证每次仿真结果都相同PR=-1,1;-1,1;-1,1;-1,1;%与四个输入指标个数对应%创建网络,设定参数net=newff(PR,8,1,tansig,purelin,traingdx,learngdm,mse)net.trainparam.show=50;net.trainparam.lr=0.1;net.trainparam.mc=0.9;net.trainparam.epochs=15000;net.trainparam.goal=0.0001;net=init(net);%训练网络net=train(net,Pn2(:,1:40),Pn1(1:40);%选取训练样本1-40个%仿真预测test=Pn2(:,35:43);%测试样本9个(包含训练用过的6个)Y=sim(net,test)%Pn1的预测值%Pn1的预测值%反归一化处理P=postmnmx(Y,minp1,maxp1)%原始数据X的的预测值%误差大小e=(X(36:44,1)-P)./X(36:44,1)%相对误差res=norm(e)%显示相对误差的整个网络误差%画出每日开盘数预测图figure(1)t=36:44plot(t,X(36:44,1),-+,t,P,o)xlabel(交易日天数)ylabel(价格)