数学建模社区-数学中国
标题:
基于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 e
output_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 @. m
net=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 F
BPoutput=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 S
plot(BPoutput,'
g')
" ?5 l7 Y) S: g, k3 Y3 x, t$ |
hold on
3 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# G
4 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 z
5 b7 P0 t/ B( F3 j W, f' t
figure(3)
( Y- N! k1 l! D$ `5 h
plot((output_test-BPoutput)./BPoutput,'-*');
; s" s0 \6 I2 ~# }' o# s5 p
title('神经网络预测误差百分比')
6 W+ D, ]; {( a7 d1 K* y
6 g2 ?3 J: F8 s1 Y/ L
errorsum=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! E
3. 对训练数据进行归一化处理,使用mapminmax函数将输入数据和输出数据进行归一化操作。
/ a2 j6 } w L7 e
3 D3 T5 O: e7 G) L$ ~9 t3 O; m
4. 创建一个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$ S
7. 绘制结果分析图表:第一个图表展示预测输出和期望输出的对比,第二个图表展示预测误差,第三个图表展示神经网络预测误差百分比。
( S" s( {. p' o+ {$ Y' O4 z9 D
1 C& ?* g' y- s7 C# J6 K( G# v! q
8. 计算预测误差的绝对值之和,存储在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
2024-5-22 11:25 上传
点击文件名下载附件
下载积分: 体力 -2 点
1.29 KB, 下载次数: 0, 下载积分: 体力 -2 点
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5