数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-5-22 11:23
标题: 基于BP神经网络的预测算法
%% 清空环境变量  V5 W$ [5 n/ X" y1 X0 p0 t+ Y
clc
( [1 e7 N. i9 j' B/ L" Cclear
& @, R9 r5 G: r+ j9 l5 }% ^: L2 t  g4 F
%% 训练数据预测数据提取及归一化4 o8 \% j+ j$ k+ ?  t
%下载输入输出数据
( Y& k7 P. k& Q3 Rload data input output
/ S/ U  K) b  w9 n4 G+ v) k) }  c+ H2 Z
%从1到2000间随机排序
/ V" Z5 s$ x6 Q/ mk=rand(1,2000);5 ^. U3 a8 |; o7 `$ {5 k* ?
[m,n]=sort(k);) Z- z. D9 |8 d! `  {
1 {& z0 Q, w. w$ Y! y& a6 ]- C
%找出训练数据和预测数据3 }# j$ F- ~$ {
input_train=input(n(1:1900),';
+ j7 D5 \% o' M  ~+ }$ Aoutput_train=output(n(1:1900));2 ]+ Z$ h2 q* d# u
input_test=input(n(1901:2000),';( e$ F0 Y3 X3 b7 V  n2 U
output_test=output(n(1901:2000));
+ R2 i# b' ]3 C! Q, B$ a/ B
! r5 E) ]3 Y! |# u& B- x( c%选连样本输入输出数据归一化
; I) @3 e0 w2 u" M. p[inputn,inputps]=mapminmax(input_train);( [" j3 A, a3 |$ ?9 `# K1 I
[outputn,outputps]=mapminmax(output_train);
  b4 ~5 z5 x) O
0 V( X' A" [& |9 ?4 i  i2 t3 e%% BP网络训练7 c8 J5 H, i2 y) U
% %初始化网络结构2 q- k* k- r; ]/ `. q) Q/ @- O
net=newff(inputn,outputn,5);
2 Y" R! i0 a, a( E: |. [0 c. ~+ u" F# J4 E! K% z( `
net.trainParam.epochs=100;
% T3 }/ v/ y! }/ p8 vnet.trainParam.lr=0.1;3 k8 u( Q7 T! M, @% o- l4 R1 S
net.trainParam.goal=0.00004;& a& u( y1 z$ p6 B+ P& Q1 ~7 U
" e( i8 h/ k6 A/ ^
%网络训练9 [; h$ o* B, u# u) s7 E% ~) }" X
net=train(net,inputn,outputn);
8 k8 T; B) e3 G1 q9 a
8 q/ w$ M* w9 h6 X2 U%% BP网络预测
5 ^1 L* D, W% m7 [%预测数据归一化
2 i( |0 }! @  G1 U- A4 N% }1 }7 c6 Winputn_test=mapminmax('apply',input_test,inputps);
4 P. Q0 C) @4 S0 K7 V& J* Q# D9 v% C$ |/ i$ |
%网络预测输出! ]+ P8 U7 A; e) [& ^
an=sim(net,inputn_test);7 @: l( o1 I- _

8 v3 X: r9 k# R& X%网络输出反归一化7 z: Q7 N+ o5 y$ _# b
BPoutput=mapminmax('reverse',an,outputps);
" |5 ?; ], g  ?6 \7 @, r. a' {6 m& n: s- G5 K, m- M/ z1 L; y& i
%% 结果分析) c# U0 @- x4 v* L# ~' `3 K
- M9 a. i1 P# J9 h" @, k3 E; q
figure(1)
: q& S: P# p5 w! W& e/ z2 kplot(BPoutput,'g')
4 l+ n2 q0 Y2 k% P6 {' j/ j/ \/ lhold on
2 A* \; X8 o" w$ Z! Lplot(output_test,'-*');
9 |1 E$ i3 N' ?legend('预测输出','期望输出')8 T$ R8 U0 \$ Z  l& \& t
title('BP网络预测输出','fontsize',12)
' k& N3 c' y  N/ j/ j8 wylabel('函数输出','fontsize',12)
$ C/ }1 |# G1 o. `% kxlabel('样本','fontsize',12)/ B5 U' ^7 w# D: r9 M  r8 _( ]
%预测误差$ o2 U- G! f5 P: O; e8 V& H
error=BPoutput-output_test;
5 E. {7 t& o  N- {8 k7 Z- p: m& ?  j8 |
5 u4 Q3 R" S$ M2 l$ q
figure(2)
$ H  h: M2 _! `1 k. h/ _# Gplot(error,'-*')
4 n9 P6 U9 X8 d/ D% K- ltitle('BP网络预测误差','fontsize',12)
  r2 v9 W  l/ b- q& _( c& I1 iylabel('误差','fontsize',12), X1 J! t5 k, s# m' N! z
xlabel('样本','fontsize',12)
' n7 C- J4 R' r! M7 D" ^# ~
2 \5 ?! @$ D# ofigure(3)
5 P) g& y% _4 F# u" w6 ?" N! `) splot((output_test-BPoutput)./BPoutput,'-*');7 g8 B0 O$ M" ^: _
title('神经网络预测误差百分比')
# H) }( w) Z, [1 }/ @
9 A8 A$ l) r, H3 S. Verrorsum=sum(abs(error));; }$ K3 c" X6 W
以上代码是一个简单的基于BP神经网络的回归预测模型。下面是代码的详细解释:
; i8 m3 ^* q8 \$ p* ?1 |7 N4 l0 D, b- ]
1. 清空环境变量并导入训练数据(input和output)。
% U. K* h1 i9 l; f; i) G
8 ]3 K0 ]1 K/ n; v" ~2. 对输入数据进行随机排序,将数据集分为训练数据和预测数据。% u3 k' x, b* h. C: F

* P  B: A6 Z/ M" W3 `3. 对训练数据进行归一化处理,使用mapminmax函数将输入数据和输出数据进行归一化操作。
* @! X1 M  ^; J" L
% a4 ^, ^4 H& f3 N4. 创建一个BP神经网络模型(使用5个隐藏层神经元),定义网络的训练参数(如训练轮数、学习率、目标误差等),并进行网络训练。6 W7 K( G7 M$ D- G1 H* i% |

1 ^& ?1 |- p$ G/ v, d( m9 g5. 对预测数据进行归一化处理并使用训练好的神经网络进行预测,得到预测输出BPoutput。
0 r7 Z0 F# F: b, [8 B
8 i2 C( I0 [# t. H4 t$ I" m% k9 X6. 将预测输出BPoutput反归一化,得到最终的预测结果。- v) z8 _  Z3 y

. Q  }& ]& k* O: ^5 V7. 绘制结果分析图表:第一个图表展示预测输出和期望输出的对比,第二个图表展示预测误差,第三个图表展示神经网络预测误差百分比。
/ M+ \- A3 a$ O/ v: d* [0 U0 c" n- t& X, W" u" C* A$ l' F0 j, _& S
8. 计算预测误差的绝对值之和,存储在errorsum变量中。! E/ C/ p+ m# B* y  x+ |0 q: r: @
6 H% E1 ?# l' X) m* b: K
总的来说,该代码实现了使用BP神经网络进行回归预测的过程,包括数据的处理、网络的训练、预测结果的计算和分析结果的展示。
# F4 e( I# ~1 c" s4 G: G% F: {7 M

6 |1 Q. U6 F. d/ q% T. B# [2 ~' Q; W5 U. O

$ S2 Z0 H0 z+ l, f5 F$ _2 M, {

chapter2_1.m

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






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