求高人解释一下这个MATLAB的BP神经网络预测算法的程序。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求高人解释一下这个MATLAB的BP神经网络预测算法的程序。相关的知识,希望对你有一定的参考价值。

原网址是: http://zhidao.baidu.com/question/255927054.html
请问如果我有一个产品三年每个月的销量矩阵:X=[60130 19297 42780 42570 55030 45710 35870 32980 40298 33820 37840 17651;17630 20610 27860 26010 51600 35680 16425 31620 21450 30520 47950 28280;30720 26930 24230 4100 30000 22480 27645 35600 47485 36420 35730 31100]
以下程序改怎么改?(预测第四年销量)

clc
clear
load data
%% 数据累加作为网络输入
[n,m]=size(X);
for i=1:n
for j=1:m
y(i,j)=sum(X(1:i,j));
end
end

%% 网络参数初始化
a=0.3+rand(1)/4;
for k=1:(m-1)
b(k)=0.3+rand(1)/4;
end

%% 学习速率初始化
for k=1:(m-1)
u(k)=0.0015;
end

%% 权值阀值初始化
t=1;
w11=a;
w2(1,1)=-y(1,1);
for k=2:m
w2(k)=2*b(k-1)/a;
end
for k=1:m
w3(k)=1+exp(-a*t);
end
theta1=0;
for k=1:(m-1)
theta1=theta1+b(1,k)*y(1,(k+1))/a;
end
theta2=(1+exp(-a*t))*(theta1-y(1,1));
kk=1;

%% 循环迭代
for j=1:10
%循环迭代
E(j)=0;
for i=1:(n-6)

%% 网络输出计算
t=i;
%LB层输出
LB_b=1/(1+exp(-w11*t));

%LC层输出
LC_c(1,1)=LB_b*w2(1,1);
for k=2:m
LC_c(k)=y(i,k)*LB_b*w2(1,k);
end

%LD层输出
LD_d=0;
for k=1:m
LD_d=LD_d+w3(1,k)*LC_c(1,k);
end

%阀值
theta3=0;
for k=2:m
theta3=theta3+w2(1,k)*y(i,k)/2;
end
theta4=(1+exp(-w11*t))*(theta3-y(1,1));

%网络输出值
ym=LD_d-theta4;
yc(i)=ym;

%% 权值修正
error=ym-y(i,1); %计算误差
E(j)=E(j)+abs(error); %误差求和

%计算误差
for k=1:m
errorr(k)=error*(1+exp(-w11*t));
end
thetaE0=0;
for k=1:m
thetaE0=thetaE0+w2(1,k)*errorr(1,k);
end
thetaE=(1/(1+exp(-w11*t)))*(1-1/(1+exp(-w11*t)))*thetaE0;

%修改权值
for k=2:m
w2(1,k)=w2(1,k)-u(k-1)*errorr(1,k)*LB_b;
end
w11=w11+a*t*thetaE;
end
end

%画误差随进化次数变化趋势
figure(1)
plot(E)
title('训练误差','fontsize',12);
xlabel('进化次数','fontsize',12);
ylabel('误差','fontsize',12);
%print -dtiff -r600 28-3

%根据训出的神经网络进行预测
for i=(n-5):n
t=i;
LB_b=1/(1+exp(-w11*t)); %LB层输出
LC_c(1,1)=LB_b*w2(1,1); %LC层输出
for k=2:m
LC_c(1,k)=y(i,k)*LB_b*w2(1,k); %LC层输出
end

LD_d=0;
for k=1:m
LD_d=LD_d+w3(1,k)*LC_c(1,k); %LD层输出
end

theta5=0;
for k=2:m
theta5=theta5+w2(1,k)*y(i,k)/2;
end
theta6=(1+exp(-w11*t))*(theta5-y(1,1)); %阀值

ym=LD_d-theta6; %网络输出值
yc(i)=ym;
end
yc=yc*10;
y(:,1)=y(:,1);

%计算预测
for j=n:-1:2
ys(j)=(yc(j)-yc(j-1))/10;
end

figure(2)
plot(ys((n-5):n),'-*');
hold on
plot(X((n-5):n,1),'r:o');
legend('预测值','实际值')
title('灰色神经网络预测','fontsize',12)
xlabel('x','fontsize',12)
ylabel('y','fontsize',12)

参考技术A 不知道他写的好不好,我的想法是用四个季度的输入去预测下一个季度的输出,这样就能够产生8组参数。但是输出的只能是第四年的第一个季度。再用预测值去进行再预测,不知道第四个季度的误差会多大。你可以试试。 参考技术B 你这个太复杂,把你邮箱给我,我给你发到邮箱里去追问

441512279@qq.com

追答

已发送到你邮箱

本回答被提问者采纳

求大神帮忙用matlab程序做BP神经网络预测

预测2015年Y的值 X1~X7都是Y的影响因素 答案要有截图 最好可以把程序留一下 谢谢

1、样本数据太少,用BP网络预测可能并非好选择。说不定用一般的回归分析效果更好。

2、要对Y进行预测,需要知道2015年的影响因素X1~X7才行吧?

 

BP神经网络的参考程序:

data = [ ...
    2009 2102.13 108.69 1104.99 888.45 700.6 64.28 8204.5 17502.1
    2010 2701.61 132.74 1456.64 1121.64 839.02 99.58 9100 20760.52
    2011 3636.62 208.22 2002.1 1426.29 1111.12 123.09 10086.88 29286.8
    2012 4164.32 229.05 2303.9 1631.37 1293.62 176.42 12005.115 33720.1
    2013 4672.91 247.21 2583.75 1841.95 1480.84 181.9 13136.77 39131
    2014 5157.97 257.63 2872.01 2028.33 1666.75 200.87 15110 42194
    ];
year = data(:,1);
p = data(:,2:8).';
t = data(:,9).';
net = newff(p,t,10);
net = train(net,p,t);
y1 = sim(net,p(:,end))

由于没有2015年的X1~X7数据,最后一句用2014年的数据进行测试。

 

如果用多元线性回归:

c=regress(t',p')
y2=c'*p(:,end)

由于样本数量太少(少于影响因素的数量),这种情况下,实际上回归的结果可以几乎没有误差(只有数值误差)。当然,用于预测是否准确要另当别论。

参考技术A 不要用截图,不能直接利用,要方便别人利用来写程序、调试。可直接帖数据或发文件,否则,要别人一个一个再输入数据,可能要花时间。请补充下。 参考技术B 2015年没数据,怎么预测?

以上是关于求高人解释一下这个MATLAB的BP神经网络预测算法的程序。的主要内容,如果未能解决你的问题,请参考以下文章

求大神帮忙用matlab程序做BP神经网络预测

bp神经网络预测模型matlab代码

用MATLAB建立bp神经网络模型,求高手,在线等

matlab BP神经网络训练程序求解释

matlab中怎么给柱状图加不同颜色以及分别legend? 跪求高人~~~

有关BP神经网络的编程问题,用matlab,希望大家指点一下,谢谢!