赞
踩
main.m文件
clear close all clc format shortg addpath('func_defined') data=xlsread('数据8(A1-II00)','Sheet1','A1:I100'); input=data(:,1:end-1); output=data(:,end); N=length(output); %全部样本数 testNum=7; %测试样本数 trainNum=N-testNum; %训练样本数 net.dividefcn='';%关闭过拟合解烨功能 input_train = input(1:trainNum,:)'; output_train =output(1:trainNum)'; input_test =input(trainNum+1:trainNum+testNum,:)'; output_test =output(trainNum+1:trainNum+testNum)'; [inputn,inputps]=mapminmax(input_train,-1,1); [outputn,outputps]=mapminmax(output_train); inputn_test=mapminmax('apply',input_test,inputps); inputnum=size(input,2); outputnum=size(output,2); disp('/') disp('神经网络结构...') disp(['输入层的节点数为:',num2str(inputnum)]) disp(['输出层的节点数为:',num2str(outputnum)]) disp(' ') disp('隐含层节点的确定过程...') net.dividefcn='';%关闭神经网络的过拟合解烨功能 MSE=1e+5; %最小误差 for hiddennum=20:30 [IW,B,LW,TF,TYPE] = elmtrain(inputn,outputn,hiddennum); an0=elmpredict(inputn,IW,B,LW,TF,TYPE); %仿真结果 mse0=mse(outputn,an0); %仿真的均方误差 disp(['隐含层节点数为',num2str(hiddennum),'时,训练集的均方误差为:',num2str(mse0)]) if mse0<MSE MSE=mse0; hiddennum_best=hiddennum; end end disp(['最佳的隐含层节点数为:',num2str(hiddennum_best),',相应的均方误差为:',num2str(MSE)]) [IW,B,LW,TF,TYPE] = elmtrain(inputn,outputn,hiddennum_best); %隐含层神经元个数hiddennum_best不是随便设置的,是通过经验 an=elmpredict(inputn_test,IW,B,LW,TF,TYPE); %仿真 test_simu=mapminmax('reverse',an,outputps); % 反归一化 error=test_simu-output_test; %误差 figure plot(output_test,'bo-','linewidth',1.2) hold on plot(test_simu,'r*-','linewidth',1.2) legend('期望值','预测值') xlabel('测试样本编号'),ylabel('指标值') title('神经网络测试集预测值和期望值的对比') set(gca,'fontsize',12) figure plot(error,'ro-','linewidth',1.2) xlabel('测试样本编号'),ylabel('预测偏差') title('神经网络测试集的预测误差') set(gca,'fontsize',12) [~,len]=size(output_test); SSE1=sum(error.^2); MAE1=sum(abs(error))/len; MSE1=error*error'/len; RMSE1=MSE1^(1/2); MAPE1=mean(abs(error./output_test)); r=corrcoef(output_test,test_simu); %corrcoef计算相关系数矩阵,包括自相关和互相关系数 R1=r(1,2); disp(' ') disp('/') disp('预测误差分析...') disp(['误差平方和SSE为: ',num2str(SSE1)]) disp(['平均绝对误差MAE为: ',num2str(MAE1)]) disp(['均方误差MSE为: ',num2str(MSE1)]) disp(['均方根误差RMSE为: ',num2str(RMSE1)]) disp(['平均百分比误差MAPE为: ',num2str(MAPE1*100),'%']) disp(['相关系数R为: ',num2str(R1)]) disp(' ') disp('/') disp('打印测试集预测结果...') disp(' 编号 实际值 预测值 误差') for i=1:len disp([i,output_test(i),test_simu(i),error(i)]) end
func_defined文件之elmpredict.m文件
function Y = elmpredict(P,IW,B,LW,TF,TYPE) % 计算隐含层的输出值 Q = size(P,2); BiasMatrix = repmat(B,1,Q); tempH = IW * P + BiasMatrix; switch TF case 'sig' H = 1 ./ (1 + exp(-tempH)); case 'sin' H = sin(tempH); case 'hardlim' H = hardlim(tempH); end Y = (H' * LW)'; if TYPE == 1 temp_Y = zeros(size(Y)); for i = 1:size(Y,2) [max_Y,index] = max(Y(:,i)); temp_Y(index,i) = 1; end Y = vec2ind(temp_Y); end
func_defined文件之elmtrain.m文件
function [IW,B,LW,TF,TYPE] = elmtrain(P,T,N,TF,TYPE) %P输入矩阵 %T输出矩阵 %N隐含神经元 %TF激励 %TYPE 0回归、1分类 %IW 权值 %B 阈值 %LW 连接权值 if nargin < 3 N = size(P,2); end if nargin < 4 TF = 'sig'; end if nargin < 5 TYPE = 0; end [R,Q] = size(P); if TYPE == 1 T = ind2vec(T); end [S,Q] = size(T); IW = rand(N,R) * 2 - 1; B = rand(N,1); BiasMatrix = repmat(B,1,Q); tempH = IW * P + BiasMatrix; switch TF case 'sig' H = 1 ./ (1 + exp(-tempH)); case 'sin' H = sin(tempH); case 'hardlim' H = hardlim(tempH); end LW = pinv(H') * T';
神经网络结构... 输入层的节点数为:8 输出层的节点数为:1 隐含层节点的确定过程... 隐含层节点数为20时,训练集的均方误差为:0.069271 隐含层节点数为21时,训练集的均方误差为:0.063343 隐含层节点数为22时,训练集的均方误差为:0.065061 隐含层节点数为23时,训练集的均方误差为:0.065559 隐含层节点数为24时,训练集的均方误差为:0.060345 隐含层节点数为25时,训练集的均方误差为:0.059529 隐含层节点数为26时,训练集的均方误差为:0.063012 隐含层节点数为27时,训练集的均方误差为:0.056661 隐含层节点数为28时,训练集的均方误差为:0.061978 隐含层节点数为29时,训练集的均方误差为:0.063928 隐含层节点数为30时,训练集的均方误差为:0.062316 最佳的隐含层节点数为:27,相应的均方误差为:0.056661 / 预测误差分析... 误差平方和SSE为: 3399145.4068 平均绝对误差MAE为: 463.1936 均方误差MSE为: 485592.201 均方根误差RMSE为: 696.8445 平均百分比误差MAPE为: 17.1643% 相关系数R为: -0.28122 / 打印测试集预测结果... 编号 实际值 预测值 误差 1 3505 3200.9 -304.13 2 2480.3 4180.6 1700.3 3 3012.7 3125.7 113.04 4 2818.2 2352.1 -466.09 5 2872.5 2539.2 -333.33 6 2976.1 2709.5 -266.57 7 2846.8 2905.7 58.9
如有需要代码和数据的同学请在评论区发邮箱,一般一天之内会回复,请点赞+关注谢谢!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。