clc;
clear all
close all
nntwarn off;
% tic;
% a=xlsread('shuru'); %读入原始的输入数据
% b=xlsread('shuchu'); %读入原始的输出数据
shuju=xlsread('data');
output_test=shuju(10,:);
% t_test=t_test';
for i=1:7
a(i,:)=[shuju(i,:),shuju(i+1,:),shuju(i+2,:)];
end
b=shuju(4:10,:);
[row,col]=size(a);
for i=1:col %输入样本数据的归一化
maxa(1,i)=max(a(:,i)); %存储每一列最大值
mina(1,i)=min(a(:,i)); %存储每一列最小值
if maxa(1,i)~=mina(1,i)
a(:,i)=(a(:,i)-mina(1,i))/(maxa(1,i)-mina(1,i)); %得到归一化后的矩阵
else
if maxa(1,i)~=0
a(:,i)=1;
else
a(:,i)=0;
end
end
end
[row,col]=size(b);
for i=1:col %输出样本数据的归一化
maxb(1,i)=max(b(:,i)); %存储每一列最大值
minb(1,i)=min(b(:,i)); %存储每一列最小值
if maxb(1,i)~=minb(1,i)
b(:,i)=(b(:,i)-minb(1,i))/(maxb(1,i)-minb(1,i)); %得到归一化后的矩阵
else
if maxb(1,i)~=0
b(:,i)=1;
else
b(:,i)=0;
end
end
end
% 训练数据输入
input_train=a(1:6,:);
% 为适应网络结构 做转置
input_train=input_train';
% 训练数据输出
output_train=b(1:6,:);
% 为适应网络结构 做转置
output_train=output_train';
% 测试数据输入
input_test=a(7,:);
% 为适应网络结构 做转置
input_test=input_test';
% 测试数据输出
%% elman神经网络
yinhan=[6 7 8 9];
for i=1:4
net=newelm(minmax(input_train),[yinhan(i),1],{'tansig','purelin'}); %建立网络模型,其中参数可以根据要求修改
net.trainparam.show=100; %每迭代100次显示1次
net.trainparam.epochs=1000; %最大迭代次数1000
net.trainparam.goal=0.001; %迭代目标
net=init(net); %初始化网络
[net,tr]=train(net,input_train,output_train); %训练网络
PN=sim(net,input_test); %仿真输出结果
y(i,:)=PN*(maxb(1,1)-minb(1,1))+minb(1,1); %仿真值反归一化
error(i,:)=y(i,:)'-output_test;
end
for i=1:4
e(:,i)=error(i)/output_test;
e(:,i)=abs(e(i));
end
figure(1)%作图
plot(yinhan(1):1:yinhan(4),e,'-ro');
title('相对平均误差曲线');
xlabel('隐含层');
ylabel('相对平均误差');
hold on;
[ermin,col]=min(e);
figure(2)%作图
plot(1,y(col,:),'-r*',1,output_test,'b:o');
title('*为预测价格,o为真实价格');
xlabel('时间点');
ylabel('销售额(万元)');
hold on;
% plot(error(1,:),'-ro','linewidth',2);
% hold on;
% plot(error(2,:),'-b:x','linewidth',2);
% hold on;
% plot(error(3,:),'k-.s','linewidth',2);
% hold on;
% plot(error(4,:),'c- -d','linewidth',2);
% hold on;
% title('Elman预测误差图')
% set(gca,Xtick')
% legend('7','11','14','8','location','best')
% xlabel('时间差')
% ylabel('误差')
% hold off;
为什么每次运行结果和误差都不同,是因为神经网络本身特性决定的吗
2014-5-17 12:18 上传
点击文件名下载附件
13.5 KB, 下载次数: 442