用Matlab编程BP神经网络进行预测

2024-05-19 17:44

1. 用Matlab编程BP神经网络进行预测

原理就是:建立网络-数据归一化-训练-预测-数据反归一化。附件是电力负荷预测的例子,可以参考。

BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hidden layer)和输出层(output layer)。

用Matlab编程BP神经网络进行预测

2. 求预测一组数据的bp神经网络模型的matlab代码

用matlab求预测一组数据的bp神经网络模型,可以分1、给定已经数据,作为一个原始序列;2、设定自回归阶数,一般2~3,太高不一定好;3、设定预测某一时间段4、设定预测步数5、用BP自定义函数进行预测6、根据预测值,用plot函数绘制预测数据走势图其主要实现代码如下:clc% x为原始序列(行向量)x=[208.72 205.69 231.5 242.78 235.64 218.41];%x=[101.4 101.4 101.9 102.4 101.9 102.9];%x=[140 137 112 125 213 437.43];t=1:length(x);% 自回归阶数lag=3; %预测某一时间段t1=t(end)+1:t(end)+5;%预测步数为fnfn=length(t1);     [f_out,iinput]=BP(x,lag,fn);P=vpa(f_out,5);A=[t1' P'];disp('预测值')disp(A)% 画出预测图figure(1),plot(t,iinput,'bo-'),hold onplot(t(end):t1(end),[iinput(end),f_out],'rp-'),grid ontitle('BP神经网络预测某地铁线路客流量')xlabel('月号'),ylabel('客流量(百万)');运行结果:

3. 求解!基于matlab利用BP神经网络预测未来多年(10年)的能源消耗量。

这么大的课题,已经可以算上硕士论文的级别了。建议与国内实力较强的高校联手来做这个课题吧。

求解!基于matlab利用BP神经网络预测未来多年(10年)的能源消耗量。

4. BP神经网络做数据预测,预测出来结果感觉不对,求大神指导

作预测,曲线要拟合。看理论值与实际的相关程度。你的相关系数肯定小,难以有理想结果!

5. 为什么我的BP神经网络的预测输出结果几乎是一样的呢

最大的可能性是没有归一化。具体原因见下:
下面这个是经典的Sigmoid函数的曲线图:

如果不进行归一化,则过大的输入x将会导致Sigmoid函数进入平坦区,全部趋近于1,即最后隐层的输出全部趋同。输出层是个purelin,线性组合后的输出层输出当然也全是几乎相同的了。

使用matlab进行归一化通常使用mapminmax函数,它的用法:
[Y,PS] = mapminmax(X,YMIN,YMAX)——将数据X归一化到区间[YMIN,YMAX]内,YMIN和YMAX为调用mapminmax函数时设置的参数,如果不设置这两个参数,这默认归一化到区间[-1, 1]内。标准化处理后的数据为Y,PS为记录标准化映射的结构体。我们一般归一化到(0,1)区间内。

为什么我的BP神经网络的预测输出结果几乎是一样的呢

6. 怎样用Matlab的BP神经网络预测后五年的工资

由于你没有给出几年来工资数,无法为你预测后五年的工资。现给你一个例子,希望对你有点启发。已知2009年至2014年的某地区人口总数3583,4150,5062,4628,5270,5340;现要预测2015年和2016年的人口总数。
% 清空环境变量
clear all;close all;clc
t=2009:2014;
% x为原始序列(行向量)
x=[3583 4150 5062 4628 5270 5340];
% 自回归阶数
lag=2; 
%预测年份或某一时间段
t1=2015:2016;
%预测步数为fn
fn=length(t1);     
[f_out,iinput]=BP(x,lag,fn);   %BP神经网络函数
n1=length(t1);
P=vpa(f_out,5);
[t1' P']
% 画出预测图
figure,plot(2009:2014,iinput,'b'),hold on
plot(2014:2016,[iinput(end),f_out],'r'),grid on
title('BP神经网络预测某地区人口数')

如有问题,可以私聊或通过其他方式讨论。

7. matlab BP神经网络预测模型上证指数 求大神

你说的应该是预测控制吧,先用BP神经网络建立模型,然后用预测控制进行滚动优化。

matlab BP神经网络预测模型上证指数 求大神

8. BP神经网络预测代码

你这是在做时间序列呢。

你可以去《神经网络之家》nnetinfo----》学习教程二--->神经网络在时间序列上的应用
上面有讲解。我把代码摘抄给你


% time series:神经网络在时间序列上的应用

			% 本代码出自《神经网络之家》

			timeList = 0 :0.01 : 2*pi;   %生成时间点

			X   = sin(timeList);            %生成时间序列信号


			
%利用x(t-5),x(t-4),x(t-3),x(t-2),x(t-1)作为输入预测x(t),将x(t)作为输出数据

			inputData  = [X(1:end-5);X(2:end-4);X(3:end-3);X(4:end-2);X(5:end-1)];

			outputData = X(6:end);


			
%使用用输入输出数据(inputData、outputData)建立网络,

			%隐节点个数设为3.其中隐层、输出层的传递函数分别为tansig和purelin,使用trainlm方法训练。

			net = newff(inputData,outputData,3,{'tansig','purelin'},'trainlm');


			
%设置一些常用参数

			net.trainparam.goal = 0.0001; %训练目标:均方误差低于0.0001

			net.trainparam.show = 400;    %每训练400次展示一次结果

			net.trainparam.epochs = 1500;  %最大训练次数:15000.


			
[net,tr] = train(net,inputData,outputData);%调用matlab神经网络工具箱自带的train函数训练网络


			
simout = sim(net,inputData); %调用matlab神经网络工具箱自带的sim函数得到网络的预测值


			
figure;  %新建画图窗口窗口

			t=1:length(simout);

			plot(t,outputData,t,simout,'r')%画图,对比原来的输出和网络预测的输出


			
%------------------附加:抽取数学表达式----------------------------top

			%希望脱离matlab的sim函数来使用训练好网络的话,可以抽取出数学的表达式,|

			%这样在任何软件中,只需要按表达式计算即可。                          |

			%============抽取数学表达式==================

			%抽取出网络的权值和阈值

			w12 = net.iw{1,1}; %第1层(输入层)到第2层(隐层)的权值

			b2  = net.b{1};    %第2层(隐层)的阈值


			
w23 = net.lw{2,1}; %第2层(隐层)到第3层(输出层)的权值

			b3  = net.b{2};    %第3层(输出层)的阈值


			


			%由于有归一化,必须先将归一化信息抓取出来

			iMax = max(inputData,[],2);

			iMin = min(inputData,[],2);

			oMax = max(outputData,[],2);

			oMin = min(outputData,[],2);


			
%方法1:归一化--->计算输出--->反归一化

			normInputData=2*(inputData -repmat(iMin,1,size(inputData,2)))./repmat(iMax-iMin,1,size(inputData,2)) -1;

			tmp = w23*tansig( w12 *normInputData + repmat(b2,1,size(normInputData,2))) + repmat(b3,1,size(normInputData,2));

			myY = (tmp+1).*repmat(oMax-oMin,1,size(outputData,2))./2 + repmat(oMin,1,size(outputData,2));


			


			%方法2:用真正的权值和阈值进行计算

			%公式请参考《提取对应原始数据的权重和阈值》

			W12 = w12 * 2 ./repmat(iMax' -iMin',size(w12,1),1);

			B2  = -w12* (2*iMin ./(iMax - iMin) + 1) + b2;


			
W23 = w23 .*repmat((oMax -oMin),1,size(w23,2))/2;

			B3  = (oMax -oMin) .*b3 /2 + (oMax -oMin)/2 + oMin;


			
%最终的数学表达式:

			myY2 = W23 *tansig( W12 *inputData + repmat(B2,1,size(inputData,2))) + repmat(B3,1,size(inputData,2));
最新文章
热门文章
推荐阅读