1、% 注本程序代码主体部分引自MATLAB神经网络30个案例分析% 为大家使用方便,本人在文件读入和输出部分做了修改,同时对关键语句进行了注释% 清空环境变量clc;clear allclose allnntwarn off;% 载入数据%建模数据_训练样本load D:NNSin.txt load D:NNSout.txt%检验数据_测试样本load D:NNStestin.txtload D:NNStestout.txt% 载入数据并将数据分成训练和预测两类p_train=in;t_train=out;p_test=testin;t_test=testout;% 交叉验证desired_sp
2、read=;mse_max=10e20;desired_input=;desired_output=;result_perfp=;indices = crossvalind(Kfold,length(p_train),4);%交叉验证函数,这里的4表示4折,即将length(p_train)个样本分成4组。h = waitbar(0,正在寻找最优化参数.) %进度条,h为句柄k=1;for i = 1:4 %这里4是将元数据分为4份,其中3/4用来训练,1/4用来检验 perfp=; disp(以下为第,num2str(i),次交叉验证结果) %disp:显示函数,num2srt:数字转字符
3、test = (indices = i); train = test; %为test及train赋值,注意这里的test及train均为逻辑值 p_cv_train=p_train(train,:); %通过逻辑值实现数据调取,从建模数据中选取 t_cv_train=t_train(train,:); %通过逻辑值实现数据调取,从建模数据中选取 p_cv_test=p_train(test,:); %通过逻辑值实现数据调取,从建模数据中选取 t_cv_test=t_train(test,:); %通过逻辑值实现数据调取,从建模数据中选取 p_cv_train=p_cv_train; %转置 t
4、_cv_train=t_cv_train; %转置 p_cv_test= p_cv_test; %转置 t_cv_test= t_cv_test; %转置 p_cv_train,minp,maxp,t_cv_train,mint,maxt=premnmx(p_cv_train,t_cv_train); %premnmx():将网络的输入数据或输出数据进行归一化,归一化后的数据将分布在-1,1区间内。 p_cv_test=tramnmx(p_cv_test,minp,maxp); %tramnmx():使网络所用的新数据和样本数据接受相同的预处理。 for spread=0.1:0.1:2; n
5、et=newgrnn(p_cv_train,t_cv_train,spread); waitbar(k/80,h); disp(当前spread值为, num2str(spread); test_Out=sim(net,p_cv_test); test_Out=postmnmx(test_Out,mint,maxt); %postmnmx()依照预处理的最大值最小值反向归一化。 error=t_cv_test-test_Out; disp(当前网络的mse为,num2str(mse(error) %mse()为均方函数。 perfp=perfp mse(error); if mse(error
6、)mse_max mse_max=mse(error); desired_spread=spread; desired_input=p_cv_train; desired_output=t_cv_train; end k=k+1; end result_perfp(i,:)=perfp;end;close(h)disp(最佳spread值为,num2str(desired_spread)disp(此时最佳输入值为)desired_input;disp(此时最佳输出值为)desired_output;% 采用最佳方法建立GRNN网络net=newgrnn(desired_input,desire
7、d_output,desired_spread);p_test=p_test;p_test=tramnmx(p_test,minp,maxp); %依照预定最大值及最小值进行归一化。grnn_prediction_result=sim(net,p_test); %利用已经建立的网络模型进行预测。grnn_prediction_result=postmnmx(grnn_prediction_result,mint,maxt); grnn_prediction_result = grnn_prediction_result; %转置预测结果。grnn_error=t_test-grnn_predi
8、ction_result; %模拟与实测误差。disp(GRNN神经网络三项流量预测的误差为,num2str(mse(grnn_error)% 预测结果导出模块save D:OUTgrnn_desired_input.txt desired_input -ascii; %导出优化建模数据-输入save D:OUTgrnn_desired_output.txt desired_output -ascii; %导出优化建模数据-输出save D:OUTgrnn_ p_test.txt p_test -ascii; %导出预测输入数据% 可对比save D:OUTgrnn_t_test.txt t_test -ascii; %导出实测数据save D:OUTgrnn_prediction_result.txt ninhao grnn_prediction_result -ascii; %导出预测数据