数学建模社区-数学中国

标题: 基于BP神经网络的预测算法 [打印本页]

作者: 2744557306    时间: 2024-5-22 11:23
标题: 基于BP神经网络的预测算法
%% 清空环境变量; k' t; p4 L! \4 U& |
clc3 N. s1 k" G. E
clear
  ?- c  n9 Q( l. _  @3 d. \' U1 @- [* e
%% 训练数据预测数据提取及归一化
$ e( P+ k$ a+ u0 p; \) q%下载输入输出数据5 g5 x. |1 {- }% ?- v0 H
load data input output7 ]7 @" G' D$ h# B
: M2 W% c6 G5 C/ a9 Y$ k% Y; J. f
%从1到2000间随机排序
+ }/ w/ o% o: k5 b& t1 W0 jk=rand(1,2000);  R: P/ t: _9 v& O+ }) F  b; y; b
[m,n]=sort(k);$ a+ D) X+ A2 ]: @' V) v/ Z
0 w$ }; _% j5 a; E" h
%找出训练数据和预测数据
: q; H4 S+ Z! R3 v; n& J) K+ Zinput_train=input(n(1:1900),';
& O7 L* e, W8 L* koutput_train=output(n(1:1900));6 X0 Y' B' ]) r; L) n1 b
input_test=input(n(1901:2000),';
3 m5 }7 g7 S2 d, c: H9 goutput_test=output(n(1901:2000));
8 {* u: M( K& I% p( I8 ^& D6 X
# T: r7 c4 V& L% S%选连样本输入输出数据归一化
: u4 c- W3 Z& I" S[inputn,inputps]=mapminmax(input_train);
: d& e9 {! j8 V. q[outputn,outputps]=mapminmax(output_train);( y+ M6 _) \) F9 W, z2 Q8 P4 V
+ _6 U$ w8 ]7 {- k+ X- R) h
%% BP网络训练
1 O# z6 A6 S/ h7 N% %初始化网络结构
; @, j1 M3 ]; o" fnet=newff(inputn,outputn,5);
" M8 H3 P0 r* ^. W& A! q
6 x" C# h+ E% [net.trainParam.epochs=100;6 C# E) i* T1 y: i: [
net.trainParam.lr=0.1;6 s4 [7 t* W* B4 B* m6 D2 A
net.trainParam.goal=0.00004;
* F/ M% N/ G1 [# v5 }6 A" b) \$ o% a
%网络训练
1 f$ g( Z0 \$ o  V! R; q8 ~( Fnet=train(net,inputn,outputn);) q2 L, S: b: y' V0 N6 P( h
; j9 B% P/ w+ n, ]
%% BP网络预测* O' k8 H( n! M% }* J
%预测数据归一化
! N3 r( ]% |, E( \6 Cinputn_test=mapminmax('apply',input_test,inputps);
/ R: o2 C3 `, Q. t
8 Y# _$ g% B1 q9 P8 T* P( H% {%网络预测输出
# R& V, {0 o4 A: H) @$ b. Fan=sim(net,inputn_test);0 u' r9 q: g2 i

7 C+ R5 N7 _) F7 t/ h%网络输出反归一化# d8 [0 b) Y8 y
BPoutput=mapminmax('reverse',an,outputps);1 D* M! |2 M. M( J- i# E" s
, x) j, x! U& G# W( u0 |5 b
%% 结果分析4 l8 V4 v9 {9 t: o9 @7 _% ?$ d

; h1 W% R- U2 C3 G  ]9 Jfigure(1)2 X8 ?$ ^- ^6 w1 n* Y, X% F5 C
plot(BPoutput,'g')
) m; s; [. s; v+ i2 _7 `1 |! Fhold on, Z; a& j' \/ |9 A2 H
plot(output_test,'-*');1 H" r! @8 N( g0 J
legend('预测输出','期望输出')
8 @. ?( x" M' B" U4 k4 x. jtitle('BP网络预测输出','fontsize',12)
% [4 t5 x; ]5 g) F: h5 Bylabel('函数输出','fontsize',12)2 L/ X$ k7 u1 p; s6 F5 q( M
xlabel('样本','fontsize',12)* K$ g' u- T/ i, `4 c1 [9 V/ E( ?
%预测误差
$ `8 ^' u; {# werror=BPoutput-output_test;
: Q6 I! ]3 M- Z
/ r2 L  H3 B! T3 G  r3 U! i4 Y+ S% f
figure(2)& f0 [2 L" Q# W% h* }0 u
plot(error,'-*')9 ~& H; _% T2 E  e! I- e3 M0 o) u
title('BP网络预测误差','fontsize',12)' {0 D. ?5 s3 I7 b* ?
ylabel('误差','fontsize',12)
! W; i% e3 f$ [6 F/ E7 ?xlabel('样本','fontsize',12)
" V# m/ m( i+ e  T& f% H$ o) j! _
figure(3)8 w9 S! g, h) h! M: n5 Z
plot((output_test-BPoutput)./BPoutput,'-*');2 X! W6 L  Q) b) s3 J( \! S
title('神经网络预测误差百分比')
# i/ j3 i! C" R0 ~( u
+ t8 E- V. p! K( h9 g: b' berrorsum=sum(abs(error));
- u0 P  s# G9 p, O以上代码是一个简单的基于BP神经网络的回归预测模型。下面是代码的详细解释:
( C5 q5 g# [% a
& v, c; \- l$ ]" g1. 清空环境变量并导入训练数据(input和output)。2 p- }6 j% I# [

7 n0 q) t5 l  p6 {8 t2. 对输入数据进行随机排序,将数据集分为训练数据和预测数据。$ ]  ], ]# I$ S# @0 I7 Q4 D- e
/ s" o3 D3 `% g- _0 l2 H1 N
3. 对训练数据进行归一化处理,使用mapminmax函数将输入数据和输出数据进行归一化操作。" E3 [6 ]$ |9 m2 h
$ n% \  M, o3 v8 Z4 T
4. 创建一个BP神经网络模型(使用5个隐藏层神经元),定义网络的训练参数(如训练轮数、学习率、目标误差等),并进行网络训练。
9 i: j3 w" n+ T+ v8 W, Q9 W& z/ {% r; f5 w( A/ h
5. 对预测数据进行归一化处理并使用训练好的神经网络进行预测,得到预测输出BPoutput。6 A6 V4 n1 L4 _1 Q! ^

  @8 a. ?& R3 w0 y6 R1 D) D6. 将预测输出BPoutput反归一化,得到最终的预测结果。
' ]$ u/ v5 }" |9 w. Z/ f2 T3 u2 f; N; X& b
7. 绘制结果分析图表:第一个图表展示预测输出和期望输出的对比,第二个图表展示预测误差,第三个图表展示神经网络预测误差百分比。$ Q5 u: o+ Z. ]0 {/ O
) }9 T/ o& H0 w+ J: A- h1 b
8. 计算预测误差的绝对值之和,存储在errorsum变量中。
3 ]" ^% c, l# [
7 `9 _6 E5 E# R总的来说,该代码实现了使用BP神经网络进行回归预测的过程,包括数据的处理、网络的训练、预测结果的计算和分析结果的展示。
# d3 A( V$ O/ G' B& f) S
  C2 e3 U$ ]+ @# ?! ^" E, A1 M; [* i+ Y, u

7 u# p/ X' V2 Z) t( @1 ~4 }0 n: w; K$ ~

chapter2_1.m

1.29 KB, 下载次数: 0, 下载积分: 体力 -2 点






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5