BP神经网络与ELM极限学习机的对比

虽然ELM极限学习机有很多的争议,但是也有他一定的优点,今天,我们采用同一组数据分别使用,BP与ELM来做回归分析,采用的是y=x1^2+x2^2的数据,做的是非线性回归。

代码如下:

clear all
clc
 
%% 导入数据
load data
% 随机生成训练集、测试集
k = randperm(size(input,1));    %%%返回行数,并产生随机的2000个数。
% 训练集——1900个样本
P_train=input(k(1:1900),:)';
T_train=output(k(1:1900));
% 测试集——100个样本
P_test=input(k(1901:2000),:)';
T_test=output(k(1901:2000));
 
%% 归一化
% 训练集
[Pn_train,inputps] = mapminmax(P_train,-1,1);
Pn_test = mapminmax('apply',P_test,inputps);
% 测试集
[Tn_train,outputps] = mapminmax(T_train,-1,1);
Tn_test = mapminmax('apply',T_test,outputps);
 
tic
%% ELM创建/训练
 
[IW,B,LW,TF,TYPE] = elmtrain(Pn_train,Tn_train,20,'sig',0);
 
%% ELM仿真测试
Tn_sim = elmpredict(Pn_test,IW,B,LW,TF,TYPE);
% 反归一化
T_sim = mapminmax('reverse',Tn_sim,outputps);
 
toc
%% 结果对比
result = [T_test' T_sim'];    %100*2
% 均方误差
E = mse(T_sim - T_test)
% 决定系数
N = length(T_test);
R2 = (N*sum(T_sim.*T_test)-sum(T_sim)*sum(T_test))^2/((N*sum((T_sim).^2)-(sum(T_sim))^2)*(N*sum((T_test).^2)-(sum(T_test))^2))

以上的代码是ELM的代码,取的是均方差和时间来作为评价指标。

结果如下:

时间已过 0.082643 秒。

E =

 

   2.0077e-04


---------------------------------------------------------------

这是BP神经网络做的同一个数据的非线性回归预测:

clc
clear
 
%% 训练数据预测数据提取及归一化
%下载输入输出数据
load data input output
 
%从1到2000间随机排序
k=rand(1,2000);
[m,n]=sort(k);
 
%找出训练数据和预测数据
input_train=input(n(1:1900),:)';
output_train=output(n(1:1900));
input_test=input(n(1901:2000),:)';
output_test=output(n(1901:2000));
 
%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
 
%% BP网络训练
% %初始化网络结构
 
tic;
net=newff(inputn,outputn,5);
 
net.trainParam.epochs=100;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00004;
 
%网络训练
net=train(net,inputn,outputn);
 
%% BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',input_test,inputps);
 
%网络预测输出
an=sim(net,inputn_test);
 
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);
toc;
%% 结果分析
%{
figure(1)
plot(BPoutput,':og')
saveas(gcf,'a.jpg');
hold on
plot(output_test,'-*');
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
saveas(gcf,'ab.jpg');
%预测误差
 
error=BPoutput-output_test;
%}
%{
figure(2)
plot(error,'-*')
title('BP网络预测误差','fontsize',12)
ylabel('误差','fontsize',12)
xlabel('样本','fontsize',12)
saveas(gcf,'c.jpg');
 
figure(3)
plot((output_test-BPoutput)./BPoutput,'-*');
title('神经网络预测误差百分比')
saveas(gcf,'d.jpg');
 
errorsum=sum(abs(error))
%}
E = mse(BPoutput - output_test)
结果如下:

时间已过 6.789430 秒。

E =

    0.0159



相比来说:

ELM的速度上很占优势,快近2个单位级,而且误差也十分的小,尽管有争议,也值得我们来使用。


  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值