【神经网络学习笔记】非线性函数拟合

matlab中自带神经网络工具箱,我们可以很方便的建立神经网络,主要用到3个函数


1.newff构建函数

newff函数的格式为:
net=newff(PR,[S1 S2 ...SN],{TF1 TF2...TFN},BTF,BLF,PF),函数newff建立一个可训练的前馈网络。输入参数说明:
PR:Rx2的矩阵以定义R个输入向量的最小值和最大值;
Si:第i层神经元个数;
TFi:第i层的传递函数,默认函数为tansig函数;
BTF:训练函数,默认函数为trainlm函数;
BLF:权值/阀值学习函数,默认函数为learngdm函数;
PF:性能函数,默认函数为mse函数

2.train训练函数

[net,tr] = train(net,P,T,Pi,Ai)
输入:net---神经网络
      P-----神经网络输入
      T-----神经网络目标(可以选择,有或无)
      Pi----初始输入延迟条件(默认为0)
      Ai----初始层延迟条件(默认0)
返回值:net--新的训练过的网络
        tr---训练记录

3.sim测试函数

sim(model,timespan,options,ut);
[t,x,y] = sim(model,timespan,options,ut);
[t,x,y1, y2, ..., yn] = sim(model,timespan,options,ut);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 清空环境变量
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网络训练
% %初始化网络结构
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);


%% 结果分析


figure(1)
plot(BPoutput,':og')
hold on
plot(output_test,'-*');
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
%预测误差
error=BPoutput-output_test;




figure(2)
plot(error,'-*')
title('BP网络预测误差','fontsize',12)
ylabel('误差','fontsize',12)
xlabel('样本','fontsize',12)


figure(3)
plot((output_test-BPoutput)./BPoutput,'-*');
title('神经网络预测误差百分比')


errorsum=sum(abs(error));
【神经网络学习笔记】非线性函数拟合_第1张图片【神经网络学习笔记】非线性函数拟合_第2张图片【神经网络学习笔记】非线性函数拟合_第3张图片【神经网络学习笔记】非线性函数拟合_第4张图片

你可能感兴趣的:(神经网络,BP神经网络)