BP神经网络完成预测

2024-05-20 21:49

1. BP神经网络完成预测

下面是几个仿真实验,用了不同的训练函数:
1.创建BP网络的学习函数,训练函数和性能函数都采用default值,分别为learngdm,trainlm和mse时的逼近结果:
由此可见,进过200次训练后,虽然网络的性能还没有为0,但是输出均方误差已经很小了,MSE=6.72804e-0.06,显示的结果也证明P和T之间非线性映射关系的拟合是非常精确的;
2.建立一个学习函数为learnd,训练函数为traingd,和性能函数为msereg的BP网络,来完成拟合任务:
可见,经过200次训练后,网络的输出误差比较大,而且网络误差的收敛速度非常慢。这是由于训练函数traingd为单纯的梯度下降训练函数,训练速度比较慢,而且容易陷入局部最小的情况。结果显示网络精度确实比较差。
3.将训练函数修改为traingdx,该i函数也是梯度下降法训练函数,但是在训练过程中,他的学习速率是可变的
在200次训练后,以msereg函数评价的网络性能为1.04725,已经不是很大,结果显示P和T之间非线性关系的拟合情况不错,网络的性能不错。

BP神经网络完成预测

2. bp神经网络预测一组数据

关键在于输入向量的制定:可选择前3年的数据作为输入,输入节点设为3;第4年的数据为输出,输出节点数设为1;隐层节点数设为4左右。这样便形成了样本,用这些样本去训练bp神经网络,将训练好的网络用于预测。
最后是以06、07、08的数据作为输入,去预测09的数据。再滚动迭代下去,直至将2012的数据预测出来。

附件是一个电力负荷的预测实例,按照我上面所说,稍微修改一下样本和节点数即可应用。

3. bp神经网络预测代码

在matlab中,样本是以列的方式排列的,即一列对应一个样本。如果你的样本无误的话,就是一个输入8输出2的神经网络。作图直接用plot函数。
参考附件的代码,这是一个电力负荷预测例子,也是matlab编程。

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

bp神经网络预测代码

4. 如何建立bp神经网络预测 模型

建立BP神经网络预测 模型,可按下列步骤进行:
1、提供原始数据
2、训练数据预测数据提取及归一化
3、BP网络训练
4、BP网络预测
5、结果分析
现用一个实际的例子,来预测2015年和2016年某地区的人口数。
已知2009年——2014年某地区人口数分别为3583、4150、5062、4628、5270、5340万人
执行BP_main程序,得到
[ 2015,  5128.631704710423946380615234375]
[ 2016, 5100.5797325642779469490051269531]
代码及图形如下。

5. 在看了案例二中的BP神经网络训练及预测代码后,我开始不明白BP神经网络究竟能做什么了。。。 程序最后得到

网络的训练过程与使用过程了两码事。
比如BP应用在分类,网络的训练是指的给你一些样本,同时告诉你这些样本属于哪一类,然后代入网络训练,使得这个网络具备一定的分类能力,训练完成以后再拿一个未知类别的数据通过网络进行分类。这里的训练过程就是先伪随机生成权值,然后把样本输入进去算出每一层的输出,并最终算出来预测输出(输出层的输出),这是正向学习过程;最后通过某种训练算法(最基本的是感知器算法)使得代价(预测输出与实际输出的某范数)函数关于权重最小,这个就是反向传播过程。
您所说的那种不需要预先知道样本类别的网络属于无监督类型的网络,比如自组织竞争神经网络。

在看了案例二中的BP神经网络训练及预测代码后,我开始不明白BP神经网络究竟能做什么了。。。 程序最后得到

6. BP神经网络预测,预测结果与样本数据的理解。

输入节点数是3,说明输入向量的行数m=3,你给的样本只有1行,是不是不全?输出节点只有一个,说明每3个输入数据对应一个预测的输出数据。
其实样本数量很少,就不需要训练那么多次了,训练了也白训练。你问“这样的预测结果代表着什么?”,你也没说这些数据在现实中是什么,怎么会知道呢。

7. 神经网络——BP算法

对于初学者来说,了解了一个算法的重要意义,往往会引起他对算法本身的重视。BP(Back Propagation,后向传播)算法,具有非凡的历史意义和重大的现实意义。
  
 1969年,作为人工神经网络创始人的明斯基(Marrin M insky)和佩珀特(Seymour Papert)合作出版了《感知器》一书,论证了简单的线性感知器功能有限,不能解决如“异或”(XOR )这样的基本问题,而且对多层网络也持悲观态度。这些论点给神经网络研究以沉重的打击,很多科学家纷纷离开这一领域,神经网络的研究走向长达10年的低潮时期。[1]
  
 1974年哈佛大学的Paul Werbos发明BP算法时,正值神经外网络低潮期,并未受到应有的重视。[2]
  
 1983年,加州理工学院的物理学家John Hopfield利用神经网络,在旅行商这个NP完全问题的求解上获得当时最好成绩,引起了轰动[2]。然而,Hopfield的研究成果仍未能指出明斯基等人论点的错误所在,要推动神经网络研究的全面开展必须直接解除对感知器——多层网络算法的疑虑。[1]
  
 真正打破明斯基冰封魔咒的是,David Rumelhart等学者出版的《平行分布处理:认知的微观结构探索》一书。书中完整地提出了BP算法,系统地解决了多层网络中隐单元连接权的学习问题,并在数学上给出了完整的推导。这是神经网络发展史上的里程碑,BP算法迅速走红,掀起了神经网络的第二次高潮。[1,2]
  
  因此,BP算法的历史意义:明确地否定了明斯基等人的错误观点,对神经网络第二次高潮具有决定性意义。 
  
 这一点是说BP算法在神经网络领域中的地位和意义。
  
  BP算法是迄今最成功的神经网络学习算法,现实任务中使用神经网络时,大多是在使用BP算法进行训练[2],包括最近炙手可热的深度学习概念下的卷积神经网络(CNNs)。 
  
  
 BP神经网络是这样一种神经网络模型,它是由一个输入层、一个输出层和一个或多个隐层构成,它的激活函数采用sigmoid函数,采用BP算法训练的多层前馈神经网络。
  
 BP算法全称叫作误差反向传播(error Back Propagation,或者也叫作误差逆传播)算法。其算法基本思想为:在2.1所述的前馈网络中,输入信号经输入层输入,通过隐层计算由输出层输出,输出值与标记值比较,若有误差,将误差反向由输出层向输入层传播,在这个过程中,利用梯度下降算法对神经元权值进行调整。
  
 BP算法中核心的数学工具就是微积分的 链式求导法则 。
  
                                                                                  
 
  
                                          
 
  
                                                                                                                                                                                                                                                  
 BP算法的缺点,首当其冲就是局部极小值问题。
  
 BP算法本质上是梯度下降,而它所要优化的目标函数又非常复杂,这使得BP算法效率低下。
  
  
 [1]、《BP算法的哲学思考》,成素梅、郝中华著
  
 [2]、《机器学习》,周志华著
  
 [3]、 Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现  
  
 2016-05-13 第一次发布
  
 2016-06-04 较大幅度修改,完善推导过程,修改文章名
  
  
 2016-07-23 修改了公式推导中的一个错误,修改了一个表述错误

神经网络——BP算法

8. 神经网络bp算法可以对样本进行预测,具体是预测什么?

关于神经网络(matlab)归一化的整理
由于采集的各数据单位不一致,因而须对数据进行[-1,1]归一化处理,归一化方法主要有如下几种,供大家参考:(by james)
1、线性函数转换,表达式如下:
y=(x-MinValue)/(MaxValue-MinValue)
说明:x、y分别为转换前、后的值,MaxValue、MinValue分别为样本的最大值和最小值。
2、对数函数转换,表达式如下:
y=log10(x)
说明:以10为底的对数函数转换。
3、反余切函数转换,表达式如下:
y=atan(x)*2/PI
归一化是为了加快训练网络的收敛性,可以不进行归一化处理
归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在-1--+1之间是统计的坐标分布。归一化有同一、统一和合一的意思。无论是为了建模还是为了计算,首先基本度量单位要同一,神经网络是以样本在事件中的统计分别几率来进行训练(概率计算)和预测的,归一化是同一在0-1之间的统计概率分布;
当所有样本的输入信号都为正值时,与第一隐含层神经元相连的权值只能同时增加或减小,从而导致学习速度很慢。为了避免出现这种情况,加快网络学习速度,可以对输入信号进行归一化,使得所有样本的输入信号其均值接近于0或与其均方差相比很小。
归一化是因为sigmoid函数的取值是0到1之间的,网络最后一个节点的输出也是如此,所以经常要对样本的输出归一化处理。所以这样做分类的问题时用[0.9 0.1 0.1]就要比用[1 0 0]要好。
但是归一化处理并不总是合适的,根据输出值的分布情况,标准化等其它统计变换方法有时可能更好。
关于用premnmx语句进行归一化:
premnmx语句的语法格式是:[Pn,minp,maxp,Tn,mint,maxt]=premnmx(P,T)
其中P,T分别为原始输入和输出数据,minp和maxp分别为P中的最小值和最大值。mint和maxt分别为T的最小值和最大值。
premnmx函数用于将网络的输入数据或输出数据进行归一化,归一化后的数据将分布在[-1,1]区间内。
我们在训练网络时如果所用的是经过归一化的样本数据,那么以后使用网络时所用的新数据也应该和样本数据接受相同的预处理,这就要用到tramnmx。
下面介绍tramnmx函数:
[Pn]=tramnmx(P,minp,maxp)
其中P和Pn分别为变换前、后的输入数据,maxp和minp分别为premnmx函数找到的最大值和最小值。
(by terry2008)
matlab中的归一化处理有三种方法
1. premnmx、postmnmx、tramnmx
2. restd、poststd、trastd
3. 自己编程
具体用那种方法就和你的具体问题有关了
(by happy)
pm=max(abs(p(i,:))); p(i,:)=p(i,:)/pm;
和
for i=1:27
p(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));
end 可以归一到0 1 之间
0.1+(x-min)/(max-min)*(0.9-0.1)其中max和min分别表示样本最大值和最小值。
这个可以归一到0.1-0.9
最新文章
热门文章
推荐阅读