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

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

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)

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

问题:

1:隐含层的节点数应该小于训练样本数(你这里et_1=newff(minmax(P),[150,1],{'tansig','purelin'},'traingdm')中的150远远大于训练样本数10个(1989:2003))

2:如果把时间当做样本输入的话,这是不太合适的。如果那样还不如用时间序列求解。而且在现在的这个程序中还会会出现ynhj88311说的那种情况。(这里还应该做归一化处理更好)

clc

clear

date=1988:2003

P0=[ 0.1093 0.1110 0.1127 0.1141 0.1154 0.1164 0.1171 0.1175  0.1178 0.1179 0.1179 0.1178 0.1179 0.1180 0.1182 0.1186]% 样本数据这里数据在0~1之间就不用归一化处理了

plot(date,P0,'b+') %原数据随时间变化的曲线

hold on

title('原数据曲线图')

for i=1:13

P(:,i)=P0(i:i+2)

T(:,i)=P0(i+3)

end

%  创建一个新的前向神经网络

net_1=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm')

%  设置训练参数

net_1.trainParam.show = 1

net_1.trainParam.lr = 0.2

net_1.trainParam.mc = 0.9

net_1.trainParam.epochs=10000000

net_1.trainParam.goal = 1e-10

%  调用 TRAINGDM算法训练 BP 网络

[net_1,tr]=train(net_1,P,T)

%  对 BP 网络进行仿真

A = sim(net_1,P)

E = T - A

MSE=mse(E)

P2001=sim(net_1,[0.1179 0.1178 0.1179 ]')

P2002=sim(net_1,[0.1178 0.1179 0.1180 ]')

P2003=sim(net_1,[0.1179 0.1180 0.1182 ]')

p2=P0(14:16)'

yuce2004=sim(net_1,p2)

figure

Y=[A(1,:),P2001,P2002,P2003,yuce2004]

Date=[date,2004]

plot(Date,Y,'r+')

P=[。。。]输入T=[。。。]输出

% 创建一个新的前向神经网络

net_1=newff(minmax(P),[10,1],,'traingdm')

% 当前输入层权值和阈值

inputWeights=net_1.IW

inputbias=net_1.b

% 当前网络层权值和阈值

layerWeights=net_1.LW

layerbias=net_1.b

应该没问题吧。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12047916.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存