数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-5-22 11:23
标题: 基于BP神经网络的预测算法
%% 清空环境变量
. m* ?" g! J7 h5 xclc
' [5 \; J/ M% _" w; z, Cclear
9 e- G% P3 I2 Q$ ^
' p- N. v) J6 U, f%% 训练数据预测数据提取及归一化. L' C- x# [2 D
%下载输入输出数据
2 O: C7 {( f) c$ s9 g8 q& @3 a7 vload data input output4 m# K. @  n) M1 S
- }2 u+ a/ X/ i9 I. }" _& z
%从1到2000间随机排序9 L0 O" i2 r9 {+ ^4 k
k=rand(1,2000);7 k  `, F6 [& h, f( W. E
[m,n]=sort(k);
& D( w+ O# O6 y% g! R
$ ^$ `, O3 P; a" W% y%找出训练数据和预测数据3 G9 b2 q! t; Q/ W- G% u9 ~- {
input_train=input(n(1:1900),';
3 t4 o# o% u& Koutput_train=output(n(1:1900));
2 G& `, ?: ^+ z& g8 r4 Jinput_test=input(n(1901:2000),';
9 L: ~2 B( r& j+ v- O/ _output_test=output(n(1901:2000));" ^7 q& b7 A3 g1 Z

2 N/ z/ w# h( p8 m4 [+ U%选连样本输入输出数据归一化
7 D% Q6 U0 ?# E- r6 |: p- H[inputn,inputps]=mapminmax(input_train);3 E* |! l  ?- V) ~3 h, h
[outputn,outputps]=mapminmax(output_train);! r" }5 u) N! A8 H' [3 [2 k2 h/ j9 Y
- _& A* m" @. d+ h8 }: i
%% BP网络训练: r  E6 a2 `6 d
% %初始化网络结构! B# p" U- C% ~4 I7 j
net=newff(inputn,outputn,5);
0 P' X8 r' B2 L
4 ?" m$ j6 x4 nnet.trainParam.epochs=100;5 B% u; g  ^9 _3 M( I5 K
net.trainParam.lr=0.1;* _% R7 p) U% f8 q; ~- r
net.trainParam.goal=0.00004;# B! W$ B1 |6 T5 k9 K1 A! m

5 u* l$ H, I  ]3 Y) O" e$ h%网络训练0 A* z9 _! T. \7 j+ l& Y% L  m
net=train(net,inputn,outputn);
% y1 b* k% Q. d5 N$ p1 r2 f
7 I8 a' f) d6 l2 ^+ ~8 t# ^  C# m: T%% BP网络预测
& _  T) h5 D. i/ m- v%预测数据归一化
, ?" f* j0 I! m; f3 t9 v2 ninputn_test=mapminmax('apply',input_test,inputps);% w! m% G, @3 z

( k+ {* ^2 i& V# y6 {%网络预测输出! N/ h9 ^9 @2 j% }& b
an=sim(net,inputn_test);# J! `% {9 K% D5 D. M8 I
/ q. h" n8 G& M( Z- P9 y
%网络输出反归一化
  A5 s& n: n- [1 C: ]BPoutput=mapminmax('reverse',an,outputps);
! G+ S$ K/ p) Z. G1 J9 T$ {6 {9 i' y5 C
%% 结果分析
/ I5 l5 I# J" Y1 t- z/ d
' K6 H4 N& y/ B, ?8 M  R) Q0 M; I* J( zfigure(1)8 m5 f# y- S2 ~; ]. p
plot(BPoutput,'g')
! b6 [6 j4 v- @% L9 Q, H! t8 Y* Dhold on' T- Q9 m7 J: C: Y: w4 y
plot(output_test,'-*');4 y7 |$ r( D" J0 v4 l
legend('预测输出','期望输出')
/ B3 i1 i* y7 q; N% G% r) p& r' rtitle('BP网络预测输出','fontsize',12)" b, _* M" D7 W/ J
ylabel('函数输出','fontsize',12)
# N. E  v0 M5 M- `* V& k- ^0 ?% ^' Cxlabel('样本','fontsize',12)9 `+ t# A0 D4 n, v% ~. P' y
%预测误差
/ T. I) T' w0 ~7 F/ R% q6 F9 zerror=BPoutput-output_test;, ^4 S6 T" l  s! {+ c

$ B5 |/ |! ~' \; N$ f% l1 M( W* p5 t3 }
figure(2)4 p8 z# W& x- a( e: c: e- s$ m$ u4 O7 C
plot(error,'-*')
, C2 n% p: K2 N; x  I/ Ytitle('BP网络预测误差','fontsize',12)# T. u/ O2 D6 H5 @
ylabel('误差','fontsize',12)( B( X% L9 S1 e4 |5 v' Z, ~
xlabel('样本','fontsize',12)
  y+ D* ]- C0 j$ s! S! A3 F! B
* d4 D4 w, f6 \: N' b) u8 rfigure(3); j: o4 k1 N  u7 O% O1 l
plot((output_test-BPoutput)./BPoutput,'-*');. d. z. ]0 R" |6 L) b7 N6 n- m- h
title('神经网络预测误差百分比')  G1 C  U3 d2 Q. Z8 [* H

8 ]2 `9 h8 l4 M) [5 }errorsum=sum(abs(error));# e$ x5 _( W' v/ h8 `) Q$ `4 U6 ?
以上代码是一个简单的基于BP神经网络的回归预测模型。下面是代码的详细解释:
- T2 P2 H+ K" A6 K  p: V: S
3 ~; K* w5 S! N/ `# O* x1. 清空环境变量并导入训练数据(input和output)。. T2 T4 `7 @- N" c3 p3 t
  ~* G" Z2 x, `: _8 ~
2. 对输入数据进行随机排序,将数据集分为训练数据和预测数据。
$ m1 g7 M$ c# P7 j; w2 m. y7 ?  i+ I. A* }8 R% g
3. 对训练数据进行归一化处理,使用mapminmax函数将输入数据和输出数据进行归一化操作。
3 W0 Q  ?9 w$ c" x0 M( A0 R3 P# ^4 I0 V" i
4. 创建一个BP神经网络模型(使用5个隐藏层神经元),定义网络的训练参数(如训练轮数、学习率、目标误差等),并进行网络训练。
8 q2 `5 _. k$ k% h, O
/ X- N/ ~, T7 A5 Y9 S6 r5. 对预测数据进行归一化处理并使用训练好的神经网络进行预测,得到预测输出BPoutput。) S. h7 M# |& x5 }

  r  g! `( s# N6 {6. 将预测输出BPoutput反归一化,得到最终的预测结果。! s/ K4 s3 b3 S! M6 Q& N: f( H+ j4 E( x" E

0 r- @& p! A# t+ u' L9 b0 ~7. 绘制结果分析图表:第一个图表展示预测输出和期望输出的对比,第二个图表展示预测误差,第三个图表展示神经网络预测误差百分比。
. {+ y5 H$ p1 @& L' A: B; |. Q% [( z2 U! a
8. 计算预测误差的绝对值之和,存储在errorsum变量中。
5 V9 |+ S! l8 v+ k; V! f! M
1 b+ P! v, v8 N5 i4 V$ n2 b* ?总的来说,该代码实现了使用BP神经网络进行回归预测的过程,包括数据的处理、网络的训练、预测结果的计算和分析结果的展示。  s. y; ]/ y( Z# f: v5 V
( e3 ?. {1 H) m& C9 D3 U4 {

% d, b' ~. Y6 [3 k8 i+ x+ m, n" _0 X' M. V

0 L+ |& B7 ?, T0 y# L( o' J) }

chapter2_1.m

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






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