当前位置:
文档之家› BP及RBF神经网络代码及时间序列预测问题
BP及RBF神经网络代码及时间序列预测问题
function MackeyGlass N=60000; t=zeros(N,1); x=zeros(N,1); a=0.2;b=0.1; x(1)=1.2; t(1)=0; h=0.1; tau=17; for k=1:N-1; t(k+1)=t(k)+h; if t(k)<tau; k1=-b*x(k); k2=-b*(x(k)+h*k1/2); k3=-b*(x(k)+k2*h/2); k4=-b*(x(k)+k3*h); x(k+1)=x(k)+(k1+2*k2+2*k3+k4)*h/6; else n=floor((t(k)-tau-t(1))/h+1);
k1=f(x(n))-b*x(k); k2=f(x(n))-b*(x(k)+h*k1/2); k3=f(x(n))-b*(x(k)+k2*h/2); k4=f(x(n))-b*(x(k)+k3*h); x(k+1)=x(k)+(k1+2*k2+2*k3+k4)*h/6; end end figure hold on grid plot(t,x); SamNum=3000; h=0.1; TestSamNum=500; InDim=4; ClusterNum=88; Overlap=1.0; rand('state',sum(3000*clock)) NoiseVar=0.1; Noise=NoiseVar*rand(1,SamNum); SamIn=rand(InDim,SamNum); SamOutNoNoise=rand(1,SamNum); TestSamIn=rand(InDim,TestSamNum); TestSamOut=rand(1,TestSamNum); for k=201:3200 SamIn(1,k-200)=x((k-18)/h+1); SamIn(2,k-200)=x((k-12)/h+1); SamIn(3,k-200)=x((k-6)/h+1); SamIn(4,k-200)=x((k)/h+1); SamOutNoNoise(k-200)=x((k+85)/h+1); end SamOut=SamOutNoNoise+Noise; for l=5001:5500 TestSamIn(1,l-5000)=x((l-18)/h+1); TestSamIn(2,l-5000)=x((l-12)/h+1); TestSamIn(3,l-5000)=x((l-6)/h+1); TestSamIn(4,l-5000)=x((l)/h+1); TestSamOut(l-5000)=x((l+85)/h+1); end Centers=SamIn(:,1:ClusterNum); NumberInClusters=zeros(ClusterNum,1); IndexInClusters=zeros(ClusterNum,SamNum); while 1, NumberInClusters=zeros(ClusterNum,1);
grid plot(t,x); SamNum=3000; h=0.1; TestSamNum=500; HiddenUnitNum=20; InDim=4; OutDim=1; rand('state',sum(3000*clock)) NoiseVar=0.1; Noise=NoiseVar*rand(OutDim,SamNum); SamIn=rand(InDim,SamNum); SamOutNoNoise=rand(OutDim,SamNum); TestSamIn=rand(InDim,TestSamNum); TestSamOut=rand(OutDim,TestSamNum); for k=201:3200 SamIn(1,k-200)=x((k-18)/h+1); SamIn(2,k-200)=x((k-12)/h+1); SamIn(3,k-200)=x((k-6)/h+1); SamIn(4,k-200)=x((k)/h+1); SamOutNoNoise(k-200)=x((k+85)/h+1); end SamOut=SamOutNoNoise+Noise; for l=5001:5500 TestSamIn(1,l-5000)=x((l-18)/h+1); TestSamIn(2,l-5000)=x((l-12)/h+1); TestSamIn(3,l-5000)=x((l-6)/h+1); TestSamIn(4,l-5000)=x((l)/h+1); TestSamOut(l-5000)=x((l+85)/h+1); end MaxEpochs=20000; Ir=0.00005; E0=0.5; W1=0.1*rand(HiddenUnitNum,InDim); B1=0.1*rand(HiddenUnitNum,1); W2=0.1*rand(OutDim,HiddenUnitNum); B2=0.1*rand(OutDim,1); W1Ex=[W1 B1]; W2Ex=[W2 B2]; SamInEx=[SamIn' ones(SamNum,1)]'; ErrHistory=[]; for i=1:MaxEpochs HiddenOut=logsig(W1Ex*SamInEx); HiddenOutEx=[HiddenOut' ones(SamNum,1)]';
说明:在竞争 BP 算法中,隐层数为 1,单层隐节点数为 20;最大训练次数为 20000, 学习率为 0.0005, 误差要求为 0.5; 在隐层权值修正中, 非最大误差神经元权矢量修正为−δ/4; 采用 RSME 测试误差。 3.2 基于聚类的 RBF 网络 算法流程: (1) 初始化:从样本输入中选取前 88 个样本作为初始聚类中心; (2) 计算所有样本输入与聚类中心的距离; (3) 对输入样本进行分类; (4) 重新计算各类的新的聚类中心; (5) 若该次聚类中心与上次重合则进入下一步;否则返回到步骤 2; (6) 确定各隐节点的扩展常数; (7) 将测试的 500 个样本输入进去,得到测试结果,求出测试误差。 程序代码:
NetworkOut=W2Ex*HiddenOutEx; Error=SamOut-NetworkOut; SSE=sumsqr(Error) ErrHistory=[ErrHistory SSE]; if SSE<E0,break,end Delta2=Error; Delta1=W2'*Delta2.*HiddenOut.*(1-HiddenOut); max1=0; d=1; for j=1:HiddenUnitNum norm(Delta1(j,:),2); if max1<=norm(Delta1(j,:),2) max1=norm(Delta1(j,:),2); d=j; end end for j=1:HiddenUnitNum if j==d Delta1(j,:)=Delta1(d,:); else Delta1(j,:)=-Delta1(d,:)/4; end end dW2Ex=Delta2*HiddenOutEx'; dW1Ex=Delta1*SamInEx'; W1Ex=W1Ex+Ir*dW1Ex; W2Ex=W2Ex+Ir*dW2Ex; W2=W2Ex(:,1:HiddenUnitNum); end W1=W1Ex(:,1:InDim) B1=W1Ex(:,InDim+1) W2 B2=W2Ex(:,1+HiddenUnitNum); TestHiddenOut=logsig(W1*TestSamIn+repmat(B1,1,TestSamNum)); TestNNOut=W2*TestHiddenOut+repmat(B2,1,TestSamNum); figure hold on grid plot(5001:5500,TestNNOut,'k-') plot(5001:5500,TestSamOut,'k--') figure hold on grid [xx,Num]=size(ErrHistory);
二、研究进展
所谓时间序列,又称动态数据,指一组按时间顺序排列的数字序列,数据带有随机性, 相互之间存在某种统计上的联系。 时间序列按照性态可分为有确定规律的、混沌的和完全随机的。 20 多年来,国内外许多学者对时间序列的建模预测做了很多工作。90 年代初以前,在 数学界和工程界许多学者的共同努力下。 国外以 1976 年 George E. P. Box 和 Gwilym M. Jenkins 等的专著《 Time Series Analysis: Forecasting and Control》和 1983 年 S.M.Pandit 和 Shien Ming Wu 的专著《Time Series and System Analysis with Applications》为标志。 国内以 1983 年安鸿志、陈兆国的专著《时间序列的分析与应用》和 1991 年杨叔子等 著的《时间序列分析的工程应用》等为标志。 此外,还有专门的期刊 Journal of Time Series Analysis、国际会议和专题讨论,使时间 序列建模预测技术从理论到应用都已经有了长足的发展。 Padgett 提出神经网络在时间序列预测中几种典型应用; EsparciaAlcazar 提出利用遗传算 法优化多层神经网络结构,并将此神经网络用于时间序列预测;A. S. Pandya 对有噪声的时 间序列预测进行了研究;Francesco Masulli 研究了模糊神经系统,并利用该系统对时间序列 进行预测;Roman Rosipal 利用资源分配型 RBF 神经网络对混沌时间序列进行预测; 吴春国等人基于正规正交分解 ( Proper Orthogonal Decomposition,POD) 提出一种适用 于非线性时间序列预测的径向基函数(RBF) 神经网络模型 - POD-RBF 神经网络模型。该 模型在选取中心时考虑了时间序列数据之间的时序关系,并且使得中心的选取具有并行性。 北京航空航天大学的柳萍等人针对混沌时间序列预测问题, 提出了一种基子小波框架的 小波核函数与最小二乘支持向量机相结合的方法。 该方法不仅能够以较高的精度逼近任意函 数,而且还适用于混沌信号的局部分析,提高了最小二乘支持向量机的模型泛化能力。 南京航空航天大学的张军峰基于一种新型聚类算法的 RBF 神经网络对混沌时间序列进 行预测。 文中提出了一种基于高斯基的距离度量,并联合输入输出聚类的策略。 基于 Fisher 可 分离率设计高斯基距离度量中的惩罚因子, 可以提高聚类的性能。 而输入输出聚类策略的引 入,建立了聚类性能与网络预测性能之间的联系。