BP神经网络预测

本文详细介绍了使用MATLAB的BP神经网络进行男子跳高成绩预测的过程,包括数据预处理、网络创建、训练参数设置、网络训练以及预测结果。尽管网络在2次迭代后达到目标误差,但预测效果并不理想,显示出BP神经网络在曲线拟合上的局限性。建议在尝试此类预测时,先使用其他工具如MATLAB或SPSS,若效果不佳再考虑这种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BP神经网络预测

1.输入向量与输出向量
我们将前14组国内男子跳高运动员各项素质指标作为输入,即(30m行进跑,立定三级跳远,助跑摸高,助跑4-6步跳高,负重深蹲杠铃,杠铃半蹲系数,100m,抓举),将对应的跳高成绩作为输出。
注意:每一列是一组输入训练集,行数代表输入层神经元个数,列数输入训练集组数

x_train=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2 3.2 3.9 3.1 3.2;
9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2 9.5 9 9.5 9.7;
3.45 3.75 3.5 3.65 3.5 3.4 3.55 3.5 3.55 3.5 3.4 3.1 3.6 3.45;
2.15 2.2 2.2 2.2 2 2.15 2.14 2.1 2.1 2.1 2.15 2 2.1 2.15;
140 120 140 150 80 130 130 100 130 140 115 80 90 130;
2.8 3.4 3.5 2.8 1.5 3.2 3.5 1.8 3.5 2.5 2.8 2.2 2.7 4.6;
11 10.9 11.4 10.8 11.3 11.5 11.8 11.3 11.8 11 11.9 13 11.1 10.85;
50 70 50 80 50 60 65 40 65 50 50 50 70 70];
y_train=[2.24 2.33 2.24 2.32 2.2 2.27 2.2 2.26 2.2 2.24 2.24 2.2 2.2 2.35];

2.训练集归一化

mapminmax为数据归一化函数,默认归一化到[-1,1]之间。

默认归一化到[-1,1]之间,x_train_regular就是归一化之后的数据,x_train_maxmin用来作下一次同样的归一化。

默认归一化到[-1,1]之间,y_train_regular就是归一化之后的数据,y_train_maxmin用来作下一次同样的归一化。

%%训练集归一化
[x_train_regular,x_train_maxmin] = mapminmax(x_train);  %默认归一化到[-1,1]之间,x_train_regular就是归一化之后的数据,x_train_maxmin用来作下一次同样的归一化。
[y_train_regular,y_train_maxmin] = mapminmax(y_train);  %默认归一化到[-1,1]之间,y_train_regular就是归一化之后的数据,y_train_maxmin用来作下一次同样的归一化。

3.创建网络

本文选择S型正切函数tansig作为隐层神经元的激励函数。而由于网络的输出归一到[ -1, 1]范围内, 因此预测模型选取S 型对数函数logsig作为输出层神经元的激励函数。

将训练样本数据归一化后输入网络, 设定网络隐层和输出层激励函数分别为tansig和logsig函数, 网络训练函数为traingdx, 网络性能函数为mse,隐层神经元数初设为6。设定网络参数。

8个输入,一个输出,第一层隐藏网络6个节点,第二层隐藏网络1个节点。

%%创建网络
net=newff(x_train_regular,y_train_regular,6,{'tansig','tansig','purelin'},'trainlm');

4.设置训练次数与误差

络迭代次数epochs为5000次, 期望误差goal为0.00000001, 学习速率lr为0. 01。

%设置训练次数
net.trainParam.epochs = 5000;
%设置收敛误差
net.trainParam.goal=0.0000001;

5.训练网络

%训练网络
[net,tr]=train(net,x_train_regular,y_train_regular);
%TRAINLM, Epoch 0/5000, MSE 0.533351/1e-007, Gradient 18.9079/1e-010
%TRAINLM, Epoch 24/5000, MSE 8.81926e-008/1e-007, Gradient 0.0022922/1e-010
%TRAINLM, Performance goal met.

6.将已经训练好的网络进行预测

%%以上网络已经训练完成,下面之间输入得到输出。
%输入数据
%将第十五列的已知数据,作为输入,预测第十五列的缺失数据
x_test=[3.0;9.3;3.3;2.05;100;2.8;11.2;50];
%将输入数据归一化
x_test_regular = mapminmax('apply',x_test,x_train_maxmin);
%直接将数据放入到网络输出我们要预测的数据
y_test_regular=sim(net,x_test_regular);
%将得到的预测数据反归一化得到预测数据
y_test_regular=mapminmax('reverse',y_test_regular,y_train_maxmin);
y_test_regular

运行结果是预测的是

y_test_regular =

    2.2219

该网络迭代了2次就已经达到我们给出的误差范围内了。

 从下图可以看出该预测的效果其实并不是特别好。

小结:该神经网络进行预测,其实类似于曲线的拟合,优点在于可以很快的得到我们所要的预测值,不过缺点也非常的明显,就是需要不断的进行训练才能得到理想的网络,而且大多数时候拟合预测的结果并不是十分的理想。一般建议先用matlab或SPSS先进行预测,如果都不理想再尝试此方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值