楼主: jingxinyuan
5462 9

[问答] 求助MATLAB BP神经网络 [推广有奖]

  • 3关注
  • 7粉丝

博士生

53%

还不是VIP/贵宾

-

威望
0
论坛币
9502 个
通用积分
1.4854
学术水平
5 点
热心指数
10 点
信用等级
3 点
经验
10508 点
帖子
274
精华
0
在线时间
192 小时
注册时间
2008-11-8
最后登录
2021-12-27

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
已知八个经济指标的10年数据,如何对这个八个经济指标通过构建BP神经网络模型,对未来二十年的数据进行预测。
怎么编程,希望高手指点?


clear all
close all
aa=xlsread('xmsj.xls');
at=[{'日期:2001至2010'};{'交通量'};{'GDP'};{'人均可支配收入'};{'人口总量'};{'汽车保有量'};......
    {'旅游人均居民消费水平'};{'工业生产总值'};{'农业生产总值'}];
ys='brgmcyk';  %未知?

%%输入数据及目标数据
pd=aa(:,1:10)';
[pn,minp,maxp]=premnmx(pd);
p=pn(1:9,:)';  %p存放训练的输入数据
t=pn(10,:)';   %t存放训练的目标数据
%%%测试数据及目标数据
pdc=aa(:,5:10)'; %pdc表示测试数据
[pnc,minpc,maxpc]=premnmx(pdc); %
ptest=pnc(1:5,:)';%%ptest存放测试集的输入数据
ttest=pnc(6,:)';%%ttest存放测试集的目标数据
%计算训练集的样本个数和输入元素个数
%Q存放样本个数
%R存放输入元素个数
[Q,R]=size(p);
%隐含层神经元个数
H=10;                                            %%隐层神经元数(??)
%创建一个新的前向神经网络
net=newff(minmax(p'),[H,1],{'tansig','purelin'},'trainlm');
% 初始化输入层权值和偏置值
net.IW{1,1}=0.1*rand(H,R);
inputWeights=net.IW{1,1};
net.b{1}=0.1*rand(H,1);
inputbias=net.b{1};
% 初始化网络层权值和偏置值
net.LW{2,1}=0.1*rand(1,H);
layerWeights=net.LW{2,1};
net.b{2}=0.1*rand(1);
layerbias=net.b{2};
%设置网络训练参数
%设置显示间隔
net.trainParam.show=50;
%设置学习速率
net.trainParam.lr=0.05;
%设置动量项
net.trainParam.mc=0.25
%设置训练次数
net.trainParam.epochs=5000;
%设置训练目标值
net.trainParam.goal=1e-5;
%训练BP网络
P=p';
T=t';
[net,tr]=train(net,P,T);
%仿真计算测试集的输出
output=sim(net,ptest');
%将计算结果输出到Excel文件output_ann.xls中
%绘制仿真结果图
figure(1);
plot(output,'ok');
%保持图形不被后续图形绘制操作刷新
hold on;
%绘制阈值上下限
x=linspace(1,6);
y1=0.51;
y2=0.65;
plot(x,y1,'-k',x,y2,'-k');


运行结果:

net =
    Neural Network object:
    architecture:
         numInputs: 1
         numLayers: 2
       biasConnect: [1; 1]
      inputConnect: [1; 0]
      layerConnect: [0 0; 1 0]
     outputConnect: [0 1]
     targetConnect: [0 1]
        numOutputs: 1  (read-only)
        numTargets: 1  (read-only)
    numInputDelays: 0  (read-only)
    numLayerDelays: 0  (read-only)
    subobject structures:
            inputs: {1x1 cell} of inputs
            layers: {2x1 cell} of layers
           outputs: {1x2 cell} containing 1 output
           targets: {1x2 cell} containing 1 target
            biases: {2x1 cell} containing 2 biases
      inputWeights: {2x1 cell} containing 1 input weight
      layerWeights: {2x2 cell} containing 1 layer weight
    functions:
          adaptFcn: 'trains'
           initFcn: 'initlay'
        performFcn: 'mse'
          trainFcn: 'trainlm'
    parameters:
        adaptParam: .passes
         initParam: (none)
      performParam: (none)
        trainParam: .epochs, .goal, .max_fail, .mem_reduc,
                    .min_grad, .mu, .mu_dec, .mu_inc,
                    .mu_max, .show, .time, .lr,
                    .mc
    weight and bias values:
                IW: {2x1 cell} containing 1 input weight matrix
                LW: {2x2 cell} containing 1 layer weight matrix
                 b: {2x1 cell} containing 2 bias vectors
    other:
          userdata: (user stuff)
TRAINLM, Epoch 0/5000, MSE 0.342733/1e-005, Gradient 1.01865/1e-010
TRAINLM, Epoch 5/5000, MSE 4.729e-010/1e-005, Gradient 0.000224833/1e-010
TRAINLM, Performance goal met.


??? Error using ==> network.sim
Inputs are incorrectly sized for network.
Matrix must have 9 rows.
Error in ==> xmyy at 56
output=sim(net,ptest');

怎么解决? 望高手指点,谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:BP神经网络 MATLAB matla atlab 神经网络 求助 MATLAB 神经网络

xmsj.xls

15 KB

沙发
liuxin9023 发表于 2011-6-20 22:12:49 |只看作者 |坛友微信交流群
你弄错了啊 神经网络里一行是一个观测

使用道具

藤椅
jingxinyuan 发表于 2011-6-20 22:22:47 |只看作者 |坛友微信交流群
你还在线不?

使用道具

板凳
jingxinyuan 发表于 2011-6-20 22:55:12 |只看作者 |坛友微信交流群
已知八个经济指标的10年数据,如何对这个八个经济指标通过构建BP神经网络模型,对未来二十年的数据进行预测。
怎么编程,希望高手指点?


已知:日期:2001至2010'间的;{'交通量'};{'GDP'};{'人均可支配收入'};{'人口总量'};{'汽车保有量'};......
    {'旅游人均居民消费水平'};{'工业生产总值'};{'农业生产总值'}]; 八个指标的数据,现在如何对未来2011-2021年的数据进行预测

如何编程实现?用BP神经网络模型,望指点,比较急现在,谢谢
本文来自: 人大经济论坛 Matlab及其他计量软件专版 版,详细出处参考:https://bbs.pinggu.org/viewthread ... &from^^uid=773437

使用道具

报纸
liuxin9023 发表于 2011-6-21 07:39:21 |只看作者 |坛友微信交流群
要预测的话得先有这些值的未来水平

使用道具

地板
tulipsliu 在职认证  发表于 2011-6-21 19:01:42 |只看作者 |坛友微信交流群
不知道你模型具体思路。
你的程序的错误,我翻看了下手册,是参数调用错误。所以神经网络在 sim(net,ptest');这里出错了,给你改了一下。可以运行到最后,至于结果是否是你要的,就不敢保证。
  1. clear all

  2. close all

  3. aa=xlsread('xmsj.xls');

  4. at=[{'日期:2001至2010'};{'交通量'};{'GDP'};{'人均可支配收入'};{'人口总量'};{'汽车保有量'};......
  5. {'旅游人均居民消费水平'};{'工业生产总值'};{'农业生产总值'}];
  6. ys='brgmcyk';    %未知?

  7. %%输入数据及目标数据

  8. pd=aa(:,1:10)';

  9. [pn,minp,maxp]=premnmx(pd);

  10. p=pn(1:9,:)';
  11. %p存放训练的输入数据

  12. t=pn(10,:)';
  13. %t存放训练的目标数据
  14. %%%测试数据及目标数据

  15. pdc=aa(:,5:10)'; %pdc表示测试数据

  16. [pnc,minpc,maxpc]=premnmx(pdc);

  17. ptest=pnc(1:5,:)';
  18. % ptest存放测试集的输入数据

  19. ttest=pnc(6,:)';%%ttest存放测试集的目标数据

  20. %计算训练集的样本个数和输入元素个数

  21. %Q存放样本个数
  22. %R存放输入元素个数

  23. [Q,R]=size(p);

  24. %隐含层神经元个数

  25. H=10;

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

  27. net=newff(minmax(p'),[H,1],{'tansig','purelin'},'trainlm');

  28. % 初始化输入层权值和偏置值

  29. net.IW{1,1}=0.1*rand(H,R);

  30. inputWeights=net.IW{1,1};

  31. net.b{1}=0.1*rand(H,1);

  32. inputbias=net.b{1};

  33. % 初始化网络层权值和偏置值

  34. net.LW{2,1}=0.1*rand(1,H);

  35. layerWeights=net.LW{2,1};

  36. net.b{2}=0.1*rand(1);

  37. layerbias=net.b{2};

  38. %设置网络训练参数
  39. %设置显示间隔

  40. net.trainParam.show=50;

  41. %设置学习速率

  42. net.trainParam.lr=0.05;

  43. %设置动量项

  44. net.trainParam.mc=0.25;

  45. %设置训练次数

  46. net.trainParam.epochs=5000;

  47. %设置训练目标值

  48. net.trainParam.goal=1e-5;

  49. %训练BP网络

  50. P=p';

  51. T=t';

  52. [net,tr]=train(net,P,T);

  53. %仿真计算测试集的输出

  54. output=sim(net,P);

  55. %将计算结果输出到Excel文件output_ann.xls中

  56. %绘制仿真结果图

  57. figure(1);

  58. plot(output,'ok');

  59. %保持图形不被后续图形绘制操作刷新

  60. hold on;

  61. %绘制阈值上下限
  62. x=linspace(1,6);

  63. y1=0.51;
  64. y2=0.65;

  65. plot(x,y1,'-k',x,y2,'-k');
复制代码
是参数调用错误问题,你再修改下参数,让参数符合程序的要求。也按照你的设计目的设置新的合适的参数。
我只是修改下,让它可以运行完,我在我的电脑上试过了,修改了那个sim()函数的参数后,可以运行的。你试试。有问题可以找我。
我的Q号:280201722

也和朋友做 MRS DCC GARCH 模型。期待你的加入,潇湘品茗 留。
劳动经济学

使用道具

7
tulipsliu 在职认证  发表于 2011-6-21 19:42:58 |只看作者 |坛友微信交流群
有未来值的话,就不预测了。呵呵
你的模型是什么?是一个非线性的 NVAR 模型,还是其他?
建立模型,训练数据。
然后做预测。至于模型的验证。
一些建模通常用数据的 80%建模,然后用剩下的20%做验证。同时建模时,MAE等,各种检验模型拟合优度的检验都有。神经网络net里,就有一些评价指标。打开结构就可以看到。

你得先建立模型,用神经网络优化拟合参数,然后才能谈预测。比如是最小投影预测,还是滚动预测的。

诶,我放弃了,你不愿意加入我们就算了。

我和几个朋友在做MRS DCC GARCH 以及 Spatial econometrics .
我很喜欢人才,看到你两年前就在问DCC GARCH 模型。知道你在很多方面不错。

不好意思,多打扰了。不再向你提加好友的要求。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
jingxinyuan + 1 + 1 + 1 谢谢指点

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

劳动经济学

使用道具

8
jingxinyuan 发表于 2011-7-1 08:37:40 |只看作者 |坛友微信交流群
太谢谢你的热心帮助了,我很感动的,前几天比较忙,没有时间登陆,现在才看到  非常感谢

使用道具

9
jingxinyuan 发表于 2011-7-1 08:41:02 |只看作者 |坛友微信交流群
现在我编了一个,BP神经网络模型预测未来20年值的程序:具体如下
tic;                                        %计时开始
clc;                                        %清屏
shuju=shuju/365;

for i=11:30
[pn,minp,maxp]=premnmx(shuju(i-10:i-1,:));
zpn=pn';
p=zpn(:,1:9);
t=zpn(:,10);

threshold=minmax(p');
for j=1:10
net=newff(threshold,[9,4+j,1],{'tansig','tansig','purelin'},'traingdm','learngdm','mse'); %创建一个新的前向神经网
echo on
me=10000;
net.trainParam.show=1000;%设置显示间隔
net.trainParam.lr=0.05;%设置学习速率
net.trainParam.mc=0.25%设置动量项
net.trainParam.epochs=10000;%设置训练次数
if net.trainParam.goal>=0.00001;%设置训练目标值
j=j+1;
else break;                        %当output_error<error_max时,结束调节过程
                %end for else
end
end
iw1=net.IW{1};
b1=net.b{1};
lw2=net.LW{2};
b2=net.b{2};


[net,tr,Y1,E]=train(net,p',t');

c=postmnmx(Y1',minp(10),maxp(10));  %还原成最初目标数据

p=zpn(:,1:9);
p1=zpn(:,2:10);

output=sim(net,p1');
c=postmnmx(output',minp(10),maxp(10));

b=shuju(10,:)';
a=[c,b];
plot (a(1:9,1:2), 'DisplayName','a(1:9,1:2)', 'YDataSource', 'a(1:9,1:2)'); figure(gcf)
c1=postmnmx(output',minp(10),maxp(10));  %还原成最初目标数据
shuju(i,:)=c';
i=i+1;

end
fprintf('运行时间为:\n');
tic;
toc;                        %计时结束,并输出程序的运行时间
t = toc;

使用道具

10
jingxinyuan 发表于 2011-7-1 08:44:42 |只看作者 |坛友微信交流群
for j=1:10
net=newff(threshold,[9,4+j,1],{'tansig','tansig','purelin'},'traingdm','learngdm','mse'); %创建一个新的前向神经网
echo on
me=10000;
net.trainParam.show=1000;%设置显示间隔
net.trainParam.lr=0.05;%设置学习速率
net.trainParam.mc=0.25%设置动量项
net.trainParam.epochs=10000;%设置训练次数
if net.trainParam.goal>=0.00001;%设置训练目标值
j=j+1;
else break;                        %当output_error<error_max时,结束调节过程
                %end for else
end
end
  这个循环语句的目标是想通过循环控制来实现,隐层神经元个数的选择 不知道是否可行,但是程序运行是正确的
运行出来的未来20年的值 不是很理想  波动很大,有的时候循环,甚至出现了负值!?望高手指点更正

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-6-7 09:31