Grnn神经网络实现程序(基于Matlab).doc
《Grnn神经网络实现程序(基于Matlab).doc》由会员分享,可在线阅读,更多相关《Grnn神经网络实现程序(基于Matlab).doc(3页珍藏版)》请在冰点文库上搜索。
%%注本程序代码主体部分引自《MATLAB神经网络30个案例分析》
%%为大家使用方便,本人在文件读入和输出部分做了修改,同时对关键语句进行了注释
%%清空环境变量
clc;
clearall
closeall
nntwarnoff;
%%载入数据
%建模数据_训练样本
loadD:
\NNS\in.txt
loadD:
\NNS\out.txt
%检验数据_测试样本
loadD:
\NNS\testin.txt
loadD:
\NNS\testout.txt
%载入数据并将数据分成训练和预测两类
p_train=in;
t_train=out;
p_test=testin;
t_test=testout;
%%交叉验证
desired_spread=[];
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;
fori=1:
4%这里4是将元数据分为4份,其中3/4用来训练,1/4用来检验
perfp=[];
disp(['以下为第',num2str(i),'次交叉验证结果'])%disp:
显示函数,num2srt:
数字转字符
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_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():
使网络所用的新数据和样本数据接受相同的预处理。
forspread=0.1:
0.1:
2;
net=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=[perfpmse(error)];
ifmse(error)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,desired_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_prediction_result;%模拟与实测误差。
disp(['GRNN神经网络三项流量预测的误差为',num2str(mse(grnn_error))])
%%预测结果导出模块
save'D:
\OUT\grnn_desired_input.txt'desired_input-ascii;%导出优化建模数据-输入
save'D:
\OUT\grnn_desired_output.txt'desired_output-ascii;%导出优化建模数据-输出
save'D:
\OUT\grnn_p_test.txt'p_test-ascii;%导出预测输入数据
%可对比
save'D:
\OUT\grnn_t_test.txt't_test-ascii;%导出实测数据
save'D:
\OUT\grnn_prediction_result.txt'"ninhao"grnn_prediction_result-ascii;%导出预测数据