数学建模社区-数学中国
标题:
基于BP神经网络的预测算法
[打印本页]
作者:
2744557306
时间:
2024-5-22 11:23
标题:
基于BP神经网络的预测算法
%% 清空环境变量
# B8 n% p1 T6 M5 y( a
clc
* `: _# j3 f: L5 O% N7 \
clear
& a( P- m7 ^+ W, k; O3 e6 e' d* T+ S
1 J- Y, }1 ~) k: t
%% 训练数据预测数据提取及归一化
" d5 i2 |9 k$ g5 M3 G
%下载输入输出数据
; m3 j0 R. q7 {. T1 |1 W# f
load data input output
$ W. y) M, P& G0 R
, P* k& a9 T+ } w
%从1到2000间随机排序
+ L( F0 f0 L/ m' O. m( A
k=rand(1,2000);
8 d+ n9 W A5 ?& q$ v% w( G
[m,n]=sort(k);
" L) J; c t j0 C- \' z0 x
4 t7 {! N6 p* w% ]
%找出训练数据和预测数据
/ `, @6 L. t; e5 W5 y
input_train=input(n(1:1900),
';
9 w: O# Q! f$ ^ X9 `& v0 r
output_train=output(n(1:1900));
! {2 X7 W) U& g2 X; h( r
input_test=input(n(1901:2000),
';
; W# d4 x0 x# l/ E# Y6 h6 P
output_test=output(n(1901:2000));
( p1 a& r1 m5 ~# p: F
K1 n! U4 u6 F A; v
%选连样本输入输出数据归一化
% o, V, ~; S& L/ Z1 C* U
[inputn,inputps]=mapminmax(input_train);
5 e5 h o; L) @6 H% f
[outputn,outputps]=mapminmax(output_train);
6 l! K' Z3 w2 l& S2 r- k- T
( m+ ?0 E9 n+ x. P$ [
%% BP网络训练
7 T4 `; d. d( r- \1 m1 H+ V
% %初始化网络结构
y8 I5 u8 O, b7 T5 V3 C
net=newff(inputn,outputn,5);
2 P# K- }9 X! U$ m$ d; y
1 D+ i; U& J4 i/ y% T3 t; B9 O; X
net.trainParam.epochs=100;
& u- O$ `7 K7 E% g9 P: R
net.trainParam.lr=0.1;
+ Q( l! J: R o& D; e# ?* N* ^1 Z
net.trainParam.goal=0.00004;
' [" E0 a& @% t7 g5 Z8 h
4 F* Z. @" `5 S9 a. E0 H
%网络训练
. n. c, ` ]6 ?4 c; O8 Y
net=train(net,inputn,outputn);
$ z2 b4 I- h: i
& @; E! a u6 P9 M! }6 X6 K; ?
%% BP网络预测
' {0 |" w2 H" k" U7 r( ]4 h6 @1 S
%预测数据归一化
, D4 D3 U. W9 u0 [0 ^1 l3 Z, o, H
inputn_test=mapminmax('apply',input_test,inputps);
Y" v" J( Z/ H' I, I
" o# @- J) H/ S
%网络预测输出
+ a. g" b- o9 O# t
an=sim(net,inputn_test);
" I8 ^* i/ ]$ o# T
$ }7 F9 c5 k0 ~+ ^- ?/ r
%网络输出反归一化
' t* C8 N+ [+ L
BPoutput=mapminmax('reverse',an,outputps);
$ m( N' e( @. y, u& N; X4 w* Q# V
& F w6 k7 i- a+ v* G
%% 结果分析
1 B- m5 `2 o4 H3 X$ w" s
$ H! `) T5 }2 @/ ~1 X$ N7 h
figure(1)
* u% @+ d. o/ E* v" Q5 T g
plot(BPoutput,'
g')
& W! u, y- G7 a, r0 k
hold on
5 e; K W5 n: ]) R+ V
plot(output_test,'-*');
" K: U8 X& I+ v8 m y- H3 g f
legend('预测输出','期望输出')
% ]. w: s* r7 o5 x/ b" L+ {: s9 J5 y
title('BP网络预测输出','fontsize',12)
/ ~. T k- X& Z: M; {7 ?3 E7 Y
ylabel('函数输出','fontsize',12)
% y" X M' `6 U2 K6 N8 p
xlabel('样本','fontsize',12)
* @; x& Y( R. t$ C/ v8 \7 _4 D5 t$ Q5 ^
%预测误差
2 C& i. z( u+ ?& j" {) ? M' D
error=BPoutput-output_test;
6 g2 i3 i4 O D! g q! h
& F0 @( `1 ~! w3 T7 t; l* o
+ t6 u3 C3 a+ [9 ]7 d) c
figure(2)
8 G2 p+ A4 K7 w3 d
plot(error,'-*')
$ K; \. C; ^; C. P; I
title('BP网络预测误差','fontsize',12)
$ `7 m* ~1 c+ ], E
ylabel('误差','fontsize',12)
2 S V' D" Z- X. x t3 s/ L
xlabel('样本','fontsize',12)
' L+ q% Q2 q" g v! z% C4 c" T
7 Y6 A% T0 T. U# N3 @8 X
figure(3)
4 t( X2 ~% h! E1 b) v( {& U
plot((output_test-BPoutput)./BPoutput,'-*');
8 @) Z* c- a( n8 q
title('神经网络预测误差百分比')
, z" W5 p2 E K Z* r
( {( Q! j; X7 P7 l$ a- i2 v
errorsum=sum(abs(error));
) W) t$ f5 ~# B/ i; K
以上代码是一个简单的基于BP神经网络的回归预测模型。下面是代码的详细解释:
8 _, f' H: ^5 n. l1 T
; [0 Z* n1 W9 R& a
1. 清空环境变量并导入训练数据(input和output)。
8 N0 W5 `5 c1 N$ z4 s8 F
0 ]) _& C2 F$ w* R% v* T6 D( x6 F& R
2. 对输入数据进行随机排序,将数据集分为训练数据和预测数据。
* _. z8 b h( K0 P- a- H
& M+ ~% v! L2 m5 P; ^5 m, [
3. 对训练数据进行归一化处理,使用mapminmax函数将输入数据和输出数据进行归一化操作。
0 l$ R2 u$ g. q; m$ C
& J# d2 |. Q) C; f, \6 b, D4 G
4. 创建一个BP神经网络模型(使用5个隐藏层神经元),定义网络的训练参数(如训练轮数、学习率、目标误差等),并进行网络训练。
, ^8 J. b3 C9 u" L3 ~
1 a7 D9 o# A( _; d8 ~, t' |, Y" N
5. 对预测数据进行归一化处理并使用训练好的神经网络进行预测,得到预测输出BPoutput。
. v. a5 p7 v" R1 w z- E
0 e7 i' I; s" L, W( H0 ~$ \6 q
6. 将预测输出BPoutput反归一化,得到最终的预测结果。
. l6 C7 \- z8 z B" i% K* J5 U5 O
# _2 h) f3 d- @ v0 I: K
7. 绘制结果分析图表:第一个图表展示预测输出和期望输出的对比,第二个图表展示预测误差,第三个图表展示神经网络预测误差百分比。
4 |# ]. E2 L4 g% h6 C, U
5 s; w' l/ ~0 {+ `0 D1 n9 [' J& k
8. 计算预测误差的绝对值之和,存储在errorsum变量中。
4 X4 F9 {% S" q8 a* q9 T% D/ {
2 a7 X) n! w% p8 i4 s H
总的来说,该代码实现了使用BP神经网络进行回归预测的过程,包括数据的处理、网络的训练、预测结果的计算和分析结果的展示。
* g5 Z a4 r* ^! l3 v: M, m
+ D5 @5 x8 X: |
/ H' `/ R6 Z& C8 |+ }
. N: ~, m2 C4 \9 t) j. G
5 `4 c( }) Z/ m& g7 y
chapter2_1.m
2024-5-22 11:25 上传
点击文件名下载附件
下载积分: 体力 -2 点
1.29 KB, 下载次数: 0, 下载积分: 体力 -2 点
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5