BP神经网络的非线性系统建模
一、题目
拟合的非线性函数为:y=x12+x22
二、模型建立
BP神经网络构建根据拟合非线性函数特点确定BP神经网络结构,由于该非线性函数有两个输入参数,一个输出参数,所以BP神经网络结构为2—5—1,即输入层有2个节点,隐含层有5个节点,输出层有1个节点。
从非线性函数中随机得到2000组输入输出数据,从中随机选择1900组作为训练数据,用于网络训练,100组作为测试数据,用于测试网络的拟合性能。
利用Matlab中工具箱函数。
三、Matlab实现
3.1 数据选择和归一化
从输入输出数据中随机选取1900组数据作为网络训练数据,100组数据作为网络测试数据,并对训练数据进行归一化处理。
%% 清空环境变量
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);
3.2 BP神经网络训练
用训练数据训练BP神经网络,使网络对非线性函数输出具有预测能力。
%% 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);
3.3 BP神经网络预测
%% 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))
四、结果分析
用训练好的BP神经网络预测函数输出,预测结果如图1所示。
BP网络预测输出50454035预测输出期望输出 函数输出302520151050 0102030405060708090100样本
图1 BP神经网络预测
BP神经网络预测输出和期望输出的误差如图2所示
BP网络预测误差0.30.20.10-0.1-0.2-0.3-0.4-0.5-0.6误差0102030405060708090100样本
图2 BP神经网络预测误差
因篇幅问题不能全部显示,请点此查看更多更全内容