matlab连续使用两次hold,GRNN连续运行两次(每次运行前都clear all)所得结果不一致....
function[grnn_prediction_result]=GRNNQuake(get_data_p,get_data_t,test_data_number,predict_data_number)
%% 相关参数说明
%%%使用GRNN神经网络方法进行反演
%%%输入参数
%test_data_number,数据库中,用于参与测试(检验的)实际值的个数
%predict_data_number,需要反推weight的个数
%%%输出参数
%grnn_prediction_result,预测值
close all;
nntwarn off;
format bank;
%% 相关数据赋值,这只在程序调试阶段用,实际通过参数传递[/align][align=left]p=get_data_p;
t=get_data_t;[/align][align=left]% 载入数据并将数据分成训练和预测两类
p_train=p(1:test_data_number,:);
t_train=t(1:test_data_number,:);
p_test=p(test_data_number+1:test_data_number+predict_data_number,:);
t_test=t(test_data_number+1:test_data_number+predict_data_number,:);
%% 交叉验证
desired_spread=[];
mse_max=10e20;
desired_input=[];
desired_output=[];
result_perfp=[];
indices = crossvalind('Kfold',length(p_train),4);
h=waitbar(0,'正在寻找GRNN优化参数....');
k=1;
for i = 1:4
perfp=[];
% disp(['以下为第',num2str(i),'次交叉验证结果'])
test = (indices == i); train = ~test;
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);
p_cv_test=tramnmx(p_cv_test,minp,maxp);
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);
error=t_cv_test-test_Out;
% disp(['当前网络的mse为',num2str(mse(error))])
perfp=[perfp mse(error)];
if mse(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;
% 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);
close(h)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
