数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-5-22 11:23
标题: 基于BP神经网络的预测算法
%% 清空环境变量- }  r: Q) z# v$ V+ }# M( z
clc& l% T+ R% V; P" I5 s
clear
9 r6 K. N# s! Z5 {5 ]! r
' C6 |, Q5 a# k! w5 [& N) M6 e%% 训练数据预测数据提取及归一化
) l' y5 \: E; x, b& C%下载输入输出数据* l: g4 @) N: L- J# }3 d
load data input output. u: H" D" A% _5 z% ?

4 e6 t- c9 o# w8 [" _* ?) Q%从1到2000间随机排序8 ^8 w) C6 ?+ V" z1 j
k=rand(1,2000);
2 N  z  @3 h1 z* O5 ^0 B[m,n]=sort(k);! A( D. Z4 r6 n5 ]) m% o

9 v3 d# ^1 M/ V% t7 ?%找出训练数据和预测数据/ f# ^. j2 D3 _# ^% g  P
input_train=input(n(1:1900),';
$ c- c+ e. |2 eoutput_train=output(n(1:1900));
5 C$ \$ Z* R' @2 \9 w: R. w0 ^2 p# ]input_test=input(n(1901:2000),';9 C- {; K5 \+ a) J
output_test=output(n(1901:2000));
- d/ N/ H9 T: v0 M' H# [+ b
* \) D5 a: z. s4 o. \%选连样本输入输出数据归一化
2 [- A( S; j7 ^9 r[inputn,inputps]=mapminmax(input_train);3 w8 K! ]; `5 Y' H% I) ^
[outputn,outputps]=mapminmax(output_train);' ?4 G6 x$ S+ r
, J/ j8 F# i. i
%% BP网络训练
5 g+ h. O$ y/ C$ N6 G$ |, f% %初始化网络结构
6 l; M8 x- x3 n1 ^5 @. mnet=newff(inputn,outputn,5);4 `+ X* q, l9 @4 ^
9 K4 N, M3 f% n$ u0 G' q
net.trainParam.epochs=100;' I# S8 q' I/ j9 P( t
net.trainParam.lr=0.1;! ^8 ^; Q; i$ ^  Y0 v9 a4 H3 G# F
net.trainParam.goal=0.00004;
$ d# P  b5 z5 m- ^$ D% `" o
; O' T" G6 S7 }" _2 @  @%网络训练$ I6 g" \5 J+ C$ B, s% _
net=train(net,inputn,outputn);
8 A( P3 N" r! a9 d; X
3 [# @+ ^& I; y0 v%% BP网络预测: v! `; r" N; s; E4 H& }( [( y3 g
%预测数据归一化5 w1 g% b- u6 x! o, W/ Q
inputn_test=mapminmax('apply',input_test,inputps);. p' Y( n4 f6 Z5 e8 j5 l, L- g
( K" o- l" P' |+ E% o
%网络预测输出
' v- v3 U( ~1 `! @an=sim(net,inputn_test);& c, ~6 U! r+ Q8 v: a3 S

: ?5 s% r  J$ _" I# W%网络输出反归一化
% g5 ?! X5 g# H/ Z1 Q! u8 ?4 FBPoutput=mapminmax('reverse',an,outputps);( f& y* G6 |9 g1 z. f% X' P
, `* `/ y( U* X* i. `
%% 结果分析, p( C. p5 i! `- f# G
! Y, }! b' _$ h6 V5 h& S" U$ s0 d6 F" p2 ~
figure(1)
2 P7 ]  ]& b3 n: O3 Splot(BPoutput,'g')" ?5 l7 Y) S: g, k3 Y3 x, t$ |
hold on3 A; H$ w- y' M$ r( {% a, o6 S
plot(output_test,'-*');" |4 N  e# {( D8 n8 J1 y) z' {
legend('预测输出','期望输出'): R, f* ~7 M" H# x' q3 K
title('BP网络预测输出','fontsize',12)! x# s6 e  w7 Y5 X+ \0 M
ylabel('函数输出','fontsize',12)  Z- T+ f; e% U
xlabel('样本','fontsize',12): j9 j/ C( d4 [, b3 y
%预测误差7 ?# A7 `. I7 K
error=BPoutput-output_test;
" t3 ?1 _* v1 j
9 y5 i1 M! E! g+ |( c# G4 T9 D8 ~" e* \* g" Q9 g" U
figure(2)6 V( [- ]5 S' J* y
plot(error,'-*'); a& R: R4 z. q, @+ g$ c7 s- p4 G
title('BP网络预测误差','fontsize',12)' V. }4 R& I3 J; c' i7 o7 c  z/ M% K
ylabel('误差','fontsize',12)* S2 Q7 l" {+ G) m" U' d/ |
xlabel('样本','fontsize',12)
. P. L+ g0 z: ~6 ~4 F9 z5 b7 P0 t/ B( F3 j  W, f' t
figure(3)
( Y- N! k1 l! D$ `5 hplot((output_test-BPoutput)./BPoutput,'-*');
; s" s0 \6 I2 ~# }' o# s5 ptitle('神经网络预测误差百分比')6 W+ D, ]; {( a7 d1 K* y

6 g2 ?3 J: F8 s1 Y/ Lerrorsum=sum(abs(error));
8 n) e3 N+ Y" J2 R+ O以上代码是一个简单的基于BP神经网络的回归预测模型。下面是代码的详细解释:
0 }8 u9 j2 R1 Y9 G; [) O  M) N" H) {: O8 i: I
1. 清空环境变量并导入训练数据(input和output)。2 k, S4 @* e1 E5 s2 B
( B( O" x4 X7 n5 Y+ @
2. 对输入数据进行随机排序,将数据集分为训练数据和预测数据。
2 T1 @; C4 \" d. K
% y# ?5 E( f  E2 b( c. o# R! E3. 对训练数据进行归一化处理,使用mapminmax函数将输入数据和输出数据进行归一化操作。/ a2 j6 }  w  L7 e

3 D3 T5 O: e7 G) L$ ~9 t3 O; m4. 创建一个BP神经网络模型(使用5个隐藏层神经元),定义网络的训练参数(如训练轮数、学习率、目标误差等),并进行网络训练。
6 ?6 C  }5 W9 o3 f% ?+ W9 I# t3 J/ u: f9 K7 l$ Q' v# \
5. 对预测数据进行归一化处理并使用训练好的神经网络进行预测,得到预测输出BPoutput。
& ~+ F: M4 P/ `7 C$ ^# F6 |# M- R7 _3 h1 R) s' X- {) V
6. 将预测输出BPoutput反归一化,得到最终的预测结果。
' e( y8 G( z/ W9 @. e5 _
8 p! e' M  p" N7 J: J/ c( Y$ S7. 绘制结果分析图表:第一个图表展示预测输出和期望输出的对比,第二个图表展示预测误差,第三个图表展示神经网络预测误差百分比。
( S" s( {. p' o+ {$ Y' O4 z9 D
1 C& ?* g' y- s7 C# J6 K( G# v! q8. 计算预测误差的绝对值之和,存储在errorsum变量中。
. F4 r& B5 V8 n+ Y
; r% t2 x7 i) x: ]9 ]. q总的来说,该代码实现了使用BP神经网络进行回归预测的过程,包括数据的处理、网络的训练、预测结果的计算和分析结果的展示。) O# J. f3 B: w6 r2 f6 g) f

1 A1 m2 q, i- j. V
# T- \" S& V! C! p  F- `/ d, a" H% G; \% Y! V
7 }6 I4 A$ q- ?' ~$ `

chapter2_1.m

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






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