数据整理

假设原成绩单如下,共29人,25门课:
要预测其中一门概率论的成绩。(我的那一行)
在这里插入图片描述
每一列是一组输入训练集,行数代表输入层神经元个数,列数代表输入训练集组数,导入MATLAB
在这里插入图片描述
由于是要预测其中一科概率论的成绩,还应在转置前删除一列概率论的全部成绩。
最后加上要输入的数据,对应矩阵大小为:
在这里插入图片描述
模型建立

BP网络模型
BP网络(Back-ProPagation Network)又称反向传播神经网络, 通过样本数据的训练,不断修正网络权值和阈值使误差函数沿负梯度方向下降,逼近期望输出。它是一种应用较为广泛的神经网络模型,多用于函数逼近、模型识别分类、数据压缩和时间序列预测等。
在这里插入图片描述
BP网络由输入层、隐层和输出层组成,隐层可以有一层或多层,图2是m×k×n的三层BP网络模型,网络选用S

型传递函数 f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1, 通过反传误差函数 E = ∑ i ( T i + O i ) 2 2 E=\frac{ \sum\limits_{i}(Ti+Oi)^2}{2} E=2i(Ti+Oi)2 (Ti为期望输

出、Oi为网络的计算输出),不断调节网络权值和阈值使误差函数E达到极小。

BP网络具有高度非线性和较强的泛化能力,但也存在收敛速度慢、迭代步数多、易于陷入局部极小和全局搜索能力差等缺点。可以先用遗传算法对“BP网络”进行优化在解析空间找出较好的搜索空间,再用BP网络在较小的搜索空间内搜索最优解。

选取隐层神经元个数的问题上参照了以下的经验公式: l = n + m + a l = \sqrt{n+m}+a l=n+m +a,n为输入层数,m为输出层数,a为[1,10]内的常数。

选取激励函数

BP神经网络通常采用Sigmoid可微函数和线性函数作为网络的激励函数。本次预测选择S型正切函数tansig作为隐层神经元的激励函数。而由于网络的输出归一到[ -1, 1]范围内, 因此预测模型选取S 型对数函数tansig作为输出层神经元的激励函数。

模型实现
预测选用MATLAB中的神经网络工具箱进行网络的训练, 预测模型的具体实现步骤如下:

将训练样本数据归一化后输入网络, 设定网络隐层和输出层激励函数分别为tansig和线性传递函数, 网络训练函数为trainlm,隐层神经元数初设为12。设定网络参数。网络迭代次数epochs为5000次, 期望误差goal为0.00000001, 学习速率lr为0. 01。

clc,clear,close all
load cjlist0  %导入数据
load cjlist1
load cjlist2
P=scores;
T=Prob;
[p1,minp,maxp,t1,mint,maxt]=premnmx(P,T);
%创建网络
net=newff(minmax(P),[24,11,1],{'tansig','tansig','purelin'},'trainlm'); %用trainlm来作为训练函数
%输入层数24,隐含层数取12,输出层数1
net.trainParam.epochs = 5000;   %设置训练次数,达到次数会终止训练
net.trainParam.goal=0.0000001;  %设置收敛误差,低于误差会终止训练
[net,tr]=train(net,p1,t1);  %训练网络
a=myscores;  %输入数据
a=premnmx(a);  %将输入数据归一化
b=sim(net,a);  %放入到网络输出数据
%将得到的数据反归一化得到预测数据
c=postmnmx(b,mint,maxt)

运行下试试:
在这里插入图片描述
真实成绩也就76…

参考例程:
数据预测之BP神经网络具体应用以及matlab代码
BP神经网络的预测模型

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐