%% 该代码为基于BP神经网络的预测算法
%
% <html>
% <table border="0" width="600px" id="table1"> <tr> <td><b><font size="2">该案例作者申明:</font></b></td> </tr> <tr><td><span class="comment"><font size="2">1:本人长期驻扎在此<a target="_blank" href="http://www.ilovematlab.cn/forum-158-1.html"><font color="#0000FF">板块</font></a>里,对该案例提问,做到有问必答。本套书籍官方网站为:<a href="http://video.ourmatlab.com">video.ourmatlab.com</a></font></span></td></tr><tr> <td><font size="2">2:点此<a href="http://union.dangdang.com/transfer/transfer.aspx?from=P-284318&backurl=http://www.dangdang.com/">从当当预定本书</a>:<a href="http://union.dangdang.com/transfer/transfer.aspx?from=P-284318&backurl=http://www.dangdang.com/">《Matlab神经网络30个案例分析》</a>。</td></tr><tr> <td><p class="comment"></font><font size="2">3</font><font size="2">:此案例有配套的教学视频,视频下载方式<a href="http://video.ourmatlab.com/vbuy.html">video.ourmatlab.com/vbuy.html</a></font><font size="2">。 </font></p></td> </tr> <tr> <td><span class="comment"><font size="2"> 4:此案例为原创案例,转载请注明出处(《Matlab神经网络30个案例分析》)。</font></span></td> </tr> <tr> <td><span class="comment"><font size="2"> 5:若此案例碰巧与您的研究有关联,我们欢迎您提意见,要求等,我们考虑后可以加在案例里。</font></span></td> </tr> </table>
% </html>
%% 清空环境变量
clc
clear
%% 训练数据预测数据提取及归一化
%下载输入输出数据
load data input output
%随机选择1900组训练数据和100组预测数据
%从1到2000间随机排序
k=rand(1,2000);%创建1行2000列服从0~1均匀分布的随机矩阵
[m,n]=sort(k);%m是从小到大排序后序列,排序结果放入m(1*2000)向量,n是m中各个元素在k中的下标
%找出训练数据和预测数据
input_train=input(n(1:1900),:)';%n(1:1900),:)表示取出input中1900行中的数值,单引号(')表示转置矩阵,得到1*1900数据
output_train=output(n(1:1900));%n表示从1到1900的列,也就是取出output里的1*1900的数据
input_test=input(n(1901:2000),:)';
output_test=output(n(1901:2000));
%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);%inputn保存归一化后数据,inputps为训练数据的设置,后面可用于预测数据同样归一
[outputn,outputps]=mapminmax(output_train);
%% BP网络训练
%net=newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)
% %初始化网络结构
net=newff(inputn,outputn,5);%5个隐含层神经元
%TF节点传递函数,BTF训练函数,BLF网络学习函数,PF性能分析函数,IPF输入处理函数,OPF输出处理函数,DDF验证数据划分函数
net.trainParam.epochs=100;%设置训练训练次数,也就是迭代次数
net.trainParam.lr=0.1;%设置学习率
net.trainParam.goal=0.00004; % 训练目标最小误差
%网络训练
%[net,tr]=train(NET,X,T,Pi,Ai)%待训练网络,输入数据,输出数据,初始化输入层条件,初始化输出层条件,tr训练过程记录
net=train(net,inputn,outputn);
%% BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',input_test,inputps);%做相同的归一,apply
%网络预测输出
%y=sim(net,x)
an=sim(net,inputn_test);%an得到网络预测数据
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);
%% 结果分析
figure(1)%figure是建立图形的意思,系统自动从1,2,3,4...来建立图形,数字代表第几幅图形
plot(BPoutput,':og')%:表示用虚线,o表示数据点用圆圈显示,g是green
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));
%web browser www.matlabsky.com
%%
% <html>
% <table width="656" align="left" > <tr><td align="center"><p><font size="2"><a href="http://video.ourmatlab.com/">Matlab神经网络30个案例分析</a></font></p><p align="left"><font size="2">相关论坛:</font></p><p align="left"><font size="2">《Matlab神经网络30个案例分析》官方网站:<a href="http://video.ourmatlab.com">video.ourmatlab.com</a></font></p><p align="left"><font size="2">Matlab技术论坛:<a href="http://www.matlabsky.com">www.matlabsky.com</a></font></p><p align="left"><font size="2">M</font><font size="2">atlab函数百科:<a href="http://www.mfun.la">www.mfun.la</a></font></p><p align="left"><font size="2">Matlab中文论坛:<a href="http://www.ilovematlab.com">www.ilovematlab.com</a></font></p></td> </tr></table>
% </html>