数学建模社区-数学中国
标题:
基于BP神经网络的预测算法
[打印本页]
作者:
2744557306
时间:
2024-5-22 11:23
标题:
基于BP神经网络的预测算法
%% 清空环境变量
. m* ?" g! J7 h5 x
clc
' [5 \; J/ M% _" w; z, C
clear
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 v
load data input output
4 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& K
output_train=output(n(1:1900));
2 G& `, ?: ^+ z& g8 r4 J
input_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 n
net.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 n
inputn_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. G
1 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( z
figure(1)
8 m5 f# y- S2 ~; ]. p
plot(BPoutput,'
g')
! b6 [6 j4 v- @% L9 Q, H! t8 Y* D
hold 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' r
title('BP网络预测输出','fontsize',12)
" b, _* M" D7 W/ J
ylabel('函数输出','fontsize',12)
# N. E v0 M5 M- `* V& k- ^0 ?% ^' C
xlabel('样本','fontsize',12)
9 `+ t# A0 D4 n, v% ~. P' y
%预测误差
/ T. I) T' w0 ~7 F/ R% q6 F9 z
error=BPoutput-output_test;
, ^4 S6 T" l s! {+ c
$ B5 |/ |! ~' \; N$ f% l
1 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/ Y
title('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 r
figure(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* x
1. 清空环境变量并导入训练数据(input和output)。
. T2 T4 `7 @- N" c3 p3 t
~* G" Z2 x, `: _8 ~
2. 对输入数据进行随机排序,将数据集分为训练数据和预测数据。
$ m1 g7 M$ c# P7 j; w
2 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 r
5. 对预测数据进行归一化处理并使用训练好的神经网络进行预测,得到预测输出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 k
8 i+ x+ m, n" _0 X' M. V
0 L+ |& B7 ?, T0 y# L( o' J) }
chapter2_1.m
2024-5-22 11:25 上传
点击文件名下载附件
下载积分: 体力 -2 点
1.29 KB, 下载次数: 0, 下载积分: 体力 -2 点
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5