数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-5-22 11:23
标题: 基于BP神经网络的预测算法
%% 清空环境变量3 c6 N2 P+ Y, M9 F, C) S
clc! m* i( o9 d% s" S! E
clear* N  z8 P; T' {( @- M7 G

2 Q9 H& J5 x- n, W4 n# ?8 u%% 训练数据预测数据提取及归一化
* I, R6 e( @! A9 ]; J2 z1 Q2 E%下载输入输出数据
- M9 I' V4 L+ Y/ F" |; d' jload data input output
$ F# M0 ^- q4 U% Y% D
7 r4 C) `# F  U4 Y%从1到2000间随机排序6 M& A! v8 @- k% m5 T
k=rand(1,2000);
, {% K5 H: j4 }+ H* m' g[m,n]=sort(k);$ H3 N4 V4 P6 J8 C) {/ z6 y3 `" q

5 t3 A5 T- k' Z* l8 n%找出训练数据和预测数据
8 L5 i5 }: k/ m) V. u6 q9 Oinput_train=input(n(1:1900),';) v8 Y9 O3 z5 H# K
output_train=output(n(1:1900));+ p) o0 D, R% W  M
input_test=input(n(1901:2000),';
  I, \" e9 n# K  Loutput_test=output(n(1901:2000));! W1 c9 u( j4 y1 b. Q5 d6 K, k- W( A2 u

( I% H6 _; q$ {%选连样本输入输出数据归一化
; A. Z- g9 Y2 i: Y7 |[inputn,inputps]=mapminmax(input_train);
; e$ ]  a' ?3 b; ^9 D0 A[outputn,outputps]=mapminmax(output_train);' Q, b$ K. t% i' e3 A

  n1 y9 u, M" P2 x7 k& p1 H%% BP网络训练2 L5 |( U/ i5 j# S0 E
% %初始化网络结构
/ r$ {9 n; K- e2 c/ rnet=newff(inputn,outputn,5);
& p% a% j# r4 K% m; c0 C
9 N8 X7 y) ~2 P0 inet.trainParam.epochs=100;
$ J0 [  K1 r  {! B% |+ o! [net.trainParam.lr=0.1;4 r! m$ g4 I5 {0 m
net.trainParam.goal=0.00004;* C' _4 S4 t6 [0 g
0 f' ]5 S5 p! R  c) v
%网络训练
' `0 y! @. Y( K, i1 p" ^net=train(net,inputn,outputn);% N6 @4 E% ~) B2 {4 p4 x; ~+ I
3 p3 G+ Y$ l! M) B* J7 y" W
%% BP网络预测$ ?9 T4 I( u- I! S
%预测数据归一化
% ]# ~; r+ k- x0 y$ d  {. Jinputn_test=mapminmax('apply',input_test,inputps);0 x4 T& y. c$ G, c! ?
4 W- ?2 b) b2 O; s3 U/ _% j" r
%网络预测输出8 ?" w3 }. X9 n7 C# e% n$ U) e
an=sim(net,inputn_test);9 l% R. T, _' u, v

+ x$ Z3 S6 c# h2 q$ M+ R  R* {%网络输出反归一化' m9 n0 ~/ n% G4 F: v* K$ ?  a# O. U
BPoutput=mapminmax('reverse',an,outputps);6 ?0 \# C, Q0 j0 e+ z4 m

" j/ K% F- M- k! ^; L%% 结果分析
, K6 Q2 A1 p% q4 m+ @& L3 k6 }  j$ u, f5 @) r5 j$ r5 l
figure(1)
1 M2 ~0 i" s! ]; j1 ?/ ]) {plot(BPoutput,'g')
' D8 p1 _" @5 _8 O) e4 J8 Xhold on
; T# `3 \) v* q2 g& `6 _plot(output_test,'-*');, _( s9 m. y- B; g7 l
legend('预测输出','期望输出')
& g7 _* t8 P0 j% etitle('BP网络预测输出','fontsize',12)
$ P0 a. `& o: Xylabel('函数输出','fontsize',12)
8 ~, C* K3 G' B, ^% X$ rxlabel('样本','fontsize',12)/ U# R- J: m: _) v# a% ^
%预测误差; O+ N* {% y) v& p( P! X* K4 G$ H
error=BPoutput-output_test;
/ U( R' _2 G, a' l+ e! X
. i1 t/ }& V! E+ ^( h/ R4 o) ]# c% ]0 T" p- C6 @/ M! }
figure(2)
8 v. k* F; y) {& _& Vplot(error,'-*')2 L; x% f. y$ D! T
title('BP网络预测误差','fontsize',12)% [$ e1 P; J" d! M
ylabel('误差','fontsize',12)
: O9 b8 w! o" X0 d& p3 [xlabel('样本','fontsize',12)
) E, k! ^* i- G1 c& U9 ], X
, e; V/ u- _/ M% i; X4 |: Hfigure(3)
( X, f" h! J' N' |. Splot((output_test-BPoutput)./BPoutput,'-*');
2 J. S  R. p0 otitle('神经网络预测误差百分比')
4 b9 o# Y0 m$ _* r: L+ p4 D; t- D! V( G( E" j3 e7 a
errorsum=sum(abs(error));
0 V% q2 \9 Z- b7 ^, I以上代码是一个简单的基于BP神经网络的回归预测模型。下面是代码的详细解释:8 u4 S1 V4 W9 m; C

2 g/ I3 y# X, @1 z( b: ^1. 清空环境变量并导入训练数据(input和output)。) g' a) [/ A4 L. b0 E

* Y  f; s# p8 j1 ]2. 对输入数据进行随机排序,将数据集分为训练数据和预测数据。
+ z* w7 s& g  N/ O$ a3 e3 z
: n0 x) B' {+ B# ?9 ]) u3. 对训练数据进行归一化处理,使用mapminmax函数将输入数据和输出数据进行归一化操作。
" Z& [! X# m8 [$ M% ?! u" \" e6 B1 U8 G9 f1 b
4. 创建一个BP神经网络模型(使用5个隐藏层神经元),定义网络的训练参数(如训练轮数、学习率、目标误差等),并进行网络训练。
0 U, \; N' W* Y8 S. H6 n
: o- h1 ^! D; T" B* k; D0 x5. 对预测数据进行归一化处理并使用训练好的神经网络进行预测,得到预测输出BPoutput。) P0 L' ~( T* e4 \" O9 W( x

% e, ^! u4 Y$ P, ]& z6. 将预测输出BPoutput反归一化,得到最终的预测结果。  x+ n' C! o2 Q# H7 V. m
) }! T# j' g" B+ S1 Z
7. 绘制结果分析图表:第一个图表展示预测输出和期望输出的对比,第二个图表展示预测误差,第三个图表展示神经网络预测误差百分比。  H2 ]3 D/ i: s6 e# F
3 d' D0 G6 ]8 U0 y7 r
8. 计算预测误差的绝对值之和,存储在errorsum变量中。
+ U4 \1 H8 v6 S' o0 |- n3 `: t( \2 [
+ A& d. ?0 B& x9 I总的来说,该代码实现了使用BP神经网络进行回归预测的过程,包括数据的处理、网络的训练、预测结果的计算和分析结果的展示。
/ m' x8 o4 y  u% Z- R2 P( b' N3 m) K. }" Z  O: W5 ~

* ^; [, R) R) P6 @" V* \6 ]  ^% I
2 c+ b7 @5 M" `/ }$ H6 g, ^4 f6 z7 b

chapter2_1.m

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






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