数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-5-22 11:23
标题: 基于BP神经网络的预测算法
%% 清空环境变量
' @, M" R, o/ J2 ]4 K6 _+ Xclc1 p! n+ m  E9 x' D" g9 H
clear- @9 B+ P1 V5 X6 D) f7 b
7 L! B7 z( T% M% e& h& j# ]
%% 训练数据预测数据提取及归一化
; D! p7 H) J' r1 q/ m- [%下载输入输出数据% L9 h% C: g$ n& }
load data input output
' B) T* C6 h: W# i3 B, m2 k3 A- w& L" t5 Q
%从1到2000间随机排序4 v5 {3 q. v8 O  i! p' Q1 ?! @2 R
k=rand(1,2000);% A- v  K( X: P2 b0 P6 H( t
[m,n]=sort(k);: t, E" ]7 E+ V5 @. `
9 R& o( ~- U3 b0 a
%找出训练数据和预测数据
0 t5 D. G+ _* p7 v4 A8 L- ginput_train=input(n(1:1900),';2 }  V8 e# p( \6 p. Y0 z5 A
output_train=output(n(1:1900));
' Y: H- v( c$ Z* iinput_test=input(n(1901:2000),';
5 u1 ]1 ~5 W, @! }( _output_test=output(n(1901:2000));  l8 E0 i; i) H( N! V. ~0 \+ F
# j8 r8 l! `. }: d9 A
%选连样本输入输出数据归一化
: Y8 x- j$ T( n) C3 t8 I$ \[inputn,inputps]=mapminmax(input_train);
- {* P1 _) E' H, G9 J9 j' Z[outputn,outputps]=mapminmax(output_train);
6 E6 _: \, q  }- B
  Q! v) S( ?; g6 q+ n* q/ G' @%% BP网络训练
, c) s# _4 j: q$ r% %初始化网络结构% a& W! Y0 H7 w! ^/ O
net=newff(inputn,outputn,5);
: {# U$ G- \$ z
' t  F0 G4 s: C* D5 C# V# enet.trainParam.epochs=100;
& h! v' k9 b, P) `) Enet.trainParam.lr=0.1;
- F7 Z; I# T  H: ^! n9 x; A, dnet.trainParam.goal=0.00004;. m% O  h' ]9 S, A& _

# t$ F& J+ e# g) s! N' v% \8 j" z" a/ E%网络训练- K9 D/ K) l3 b! H1 q+ @
net=train(net,inputn,outputn);
! F% ?# N% f5 p- u! T$ B! g8 J) O3 ~% ~- w
%% BP网络预测
" I& n3 H- \  A$ Y& k%预测数据归一化! o8 @. O* R4 ^6 J3 t8 Y  }
inputn_test=mapminmax('apply',input_test,inputps);
1 n* |7 a1 p! I' j2 m* f, @( f& ~1 D/ u: R4 D
%网络预测输出
  m! T+ F( [# L) tan=sim(net,inputn_test);+ @, m# w7 \- U

/ ~! P1 M. @5 F' k% H+ F- _: X9 k%网络输出反归一化
/ @" l2 r& S) r: @4 H9 OBPoutput=mapminmax('reverse',an,outputps);' |, S* H; n7 e
+ p" I' s+ u3 i+ G
%% 结果分析
, @, I( n* K/ @4 e$ {) T" P, \2 T* k+ B0 U
figure(1)
9 E7 I' R* k. O0 y0 t) Jplot(BPoutput,'g')& n; k+ b$ h! ?0 Q
hold on
4 J6 \: l$ O! ~: ~plot(output_test,'-*');
8 t  {% B, n+ c; R' w8 Y6 T4 nlegend('预测输出','期望输出'); B' z' c; y  w+ b" n6 G; y; S3 q
title('BP网络预测输出','fontsize',12)6 l, z: Y: I/ n9 r- l3 [
ylabel('函数输出','fontsize',12)" m4 ?) q7 t# p- v
xlabel('样本','fontsize',12)
( R7 `- o/ ]3 f2 n" |%预测误差3 b# k  c% D" i3 T; W, @( {( U
error=BPoutput-output_test;" n9 Y/ `# q. r! |2 u
% @& Y& c7 R7 b+ e& Q( [
* g+ N" @; m' o1 M
figure(2)$ r7 e, i1 X" A" v% P+ v
plot(error,'-*')
, @& `4 N' C9 l' D" [' M" `) Ktitle('BP网络预测误差','fontsize',12)
3 o9 i! a2 i$ iylabel('误差','fontsize',12)
% x( n/ s& _! R0 w5 g+ W: Q1 Yxlabel('样本','fontsize',12)
8 @4 N# o) E# K; ~  b' W5 t! r
  }( I/ }% \0 h" @figure(3)
  C/ |$ o$ Z/ q" f. ?7 X( A2 O9 |/ Pplot((output_test-BPoutput)./BPoutput,'-*');
6 W1 {& }' r7 {title('神经网络预测误差百分比')
9 l0 d# p3 }, {1 u3 v6 b5 M$ R# r, E( N( k2 C; n
errorsum=sum(abs(error));7 b- I0 U) \( N1 {  I0 m- r
以上代码是一个简单的基于BP神经网络的回归预测模型。下面是代码的详细解释:
; Y2 t- j6 ~' \1 ^& L2 P3 A
1 m3 f- `& D' c* F1. 清空环境变量并导入训练数据(input和output)。( I" i) R: n2 \5 P4 S* k
+ }: u/ C0 F5 q% }
2. 对输入数据进行随机排序,将数据集分为训练数据和预测数据。
+ _0 C$ G* l6 Y' d: b+ N+ s* `7 N5 u" w
3. 对训练数据进行归一化处理,使用mapminmax函数将输入数据和输出数据进行归一化操作。$ x3 D  W7 Q! s! \5 P, T% |

4 i7 _) l/ l! C4. 创建一个BP神经网络模型(使用5个隐藏层神经元),定义网络的训练参数(如训练轮数、学习率、目标误差等),并进行网络训练。2 ^- s( o* \* F- Y0 h  }$ F
- o! e) Q, t% e4 Y- |" T
5. 对预测数据进行归一化处理并使用训练好的神经网络进行预测,得到预测输出BPoutput。
* `- @0 N' {/ W
8 N3 l- e, i) C0 H9 {# }  X5 a6. 将预测输出BPoutput反归一化,得到最终的预测结果。
5 X  J  P4 q' y7 w" l
! R# e) {9 |# L7. 绘制结果分析图表:第一个图表展示预测输出和期望输出的对比,第二个图表展示预测误差,第三个图表展示神经网络预测误差百分比。1 z0 a6 e9 _  t
, T' s5 B0 j. ^' W
8. 计算预测误差的绝对值之和,存储在errorsum变量中。
; J1 N, A  C% d% }" G/ Q, N0 x) r
3 {. H5 V& N' W/ X: C总的来说,该代码实现了使用BP神经网络进行回归预测的过程,包括数据的处理、网络的训练、预测结果的计算和分析结果的展示。: Z' |  _/ {  d8 V
% k' y; f9 Q. |& p6 j# N1 Q" y
. R& u' t  h: A

' h8 x; O; q! e5 t2 Q# A# X. w% p2 l; z  ]! z2 W9 I2 w

chapter2_1.m

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






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