akjuan 发表于 2008-12-5 12:29:52

【原创】bp网络和rbf预测的比较程序

有个网友问我的问题,数据是他提供的,这里只是作为一个简单的例子,说明一下两种神经网络的用法和不同结果
因为经常有网友问我,RBF和BP网络,那种好?
这里我说一下:当已知的数据量比较少的时候 用BP不能很好的反映实际情况 用RB要好些。
通过这个仿真实例,对BP网络和RBF网络的预测能力进行了比较研究(其实你可以做个函数逼近的例子,RBF网络也要优于bp网络),
结果表明,RBF网络的预测能力优于BP网络,但在解决相同问题时,BP网络的结构要比RBF网络简单;实际应用中,可以以此结论为指导来设计神经网络。

当然,也可以调整BP不同的参数值,得到更好的结果,但总体还是上面说的那些.。

% BP 和RBF神经网络用于预测比较程序
% 使用平台 - MatlabR2008a
%by akjuan
%all rights preserved by www.4math.cn
%2008.11

clc
clear
close all
%用10-31数据来训练,1-9数据进行预测
huanghe_p=[370 503 434 575 490 420 560 640 558 343 326 405 446 423 422 ...
         697 598 377 435 472 451 667 601 689 541 485 425 389 382 707 422];
huanghe_t=[515 713 586 753 720 567 717 987 810 489 453 589 639 568 595 ...
         982 849 519 615 652 599 941 893 999 758 701 630 561 520 1040 535];

%归一化处理
=mapminmax(huanghe_p);
=mapminmax(huanghe_t);

disp('BP 和RBF神经网络用于预测比较程序')
n=input('请需要选择的网络,输入1为RBF,输入2为BP网络: ');

if isempty(n)
    disp('检测无输入,将使用默认的RBF')
    n =1;
end
n=abs(round(n));
if ((n~=1)&&(n~=2))
    n=1;
end
goal=0;
err=[];


MN=30;
DF=30;

spread=1.5;
switch n
    case 1
      disp('你选择的是RBF网络,请按任意键,将为你计算')
      pause()
net = newrb(p(10:30),t(10:30),goal,spread,MN,DF);

    case 2
         disp('你选择的是BP网络,请按任意键,将为你计算')
      pause()
      
net = newff(p(10:30),t(10:30),5);
%
net.trainParam.epochs = 100;
net = train(net,p(10:30),t(10:30));
end

%The network is simulated for a new input.
P_predict = p(1:9);
Y = sim(net,P_predict);

yuce=mapminmax('reverse',Y,ts);
err=(yuce-huanghe_t(1:9))

      figure
plot (1:31,huanghe_t(1:31),'*-',1:9,yuce,'--rs','LineWidth',2, 'MarkerEdgeColor','k', 'MarkerFaceColor','g', 'MarkerSize',10)
title('10-31为训练数据,1-9为预测结果')
text(10,1050,'\downarrow 10-31为训练数据,绿矩形1-9为预测结果','HorizontalAlignment','left')
figure
plot (1:9,yuce-huanghe_t(1:9),'o:')
title('预测误差')
上图是RBF的结果
下图是BP的结果

[ 本帖最后由 ljelly 于 2008-12-5 12:59 编辑 ]
页: [1]
查看完整版本: 【原创】bp网络和rbf预测的比较程序