%% 注本程序代码主体部分引自《MATLAB神经网络30个案例分析》
%% 为大家使用方便,本人在文件读入和输出部分做了修改,同时对关键语句进行了注释
%% 清空环境变量 clc; clear all close all nntwarn off;
%% 载入数据
%建模数据_训练样本 load D:\\NNS\\in.txt load D:\\NNS\\out.txt %检验数据_测试样本 load D:\\NNS\\testin.txt load D:\\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;
for i = 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():使网络所用的新数据和样本数据接受相同的预处理。 for spread=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=[perfp mse(error)]; if mse(error) 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' \导出预测数据

