摘 要:本文针对标的物黄金的物价这一非线性系统进行智能预测,系统包括三个部分:数据的采集与处理,即收集有效的物价信息,并处理得到有效的输入变量;神经网络模型的构建,此为系统的基础构架;网络参数的选取与优化,此为系统的核心算法。最后进行仿真,验证系统的可行性。通过系统的搭建和实际的数据测试,证明此方法具有较高的拟合优度,有较强的理论和实践价值。
关键词:神经网络; 遗传算法 ;BP算法
70年代初期,黄金价格不再与美元直接挂钩,黄金价格逐渐市场化,影响黄金价格变动的因素日益增多,为了准确预测市场上黄金价格的走势,我们小组从市场供求角度仔细分析了诸多可能对黄金价格产生影响的因素,并最终选定了国际市场上黄金现货的日开盘价、收盘价、最高价、最低价,美国联邦基金利率、美元指数、标普500指数作为我们最终的输入参数来完成我们整个系统的实现。
1.BP神经网络和遗传算法的原理
神经网络是由大量的神经元广泛连接而成的,人工神经元是对神经元的模拟,是一个多输入单输出的非线性模型。目前采用较多的是BP神经网络,即多层前馈式误差反传播神经网络,通常由输入层、输出层和若干隐含层构成。神经网络的基本模式图可以表示如下:
假设输入的信号为:,所对应的权值为:,那么激励值就可以表示成:。为了创建一个神经网络,人工神经细胞也要以相同的方式连接在一起,正如下图所示:
这一种类型的神经网络称为前馈型神经网络,输入层的每一个输入都馈送到了隐藏层,作为该层每一个神经细胞的输入;然后从隐藏层的每个神经细胞的输出都连到了它的下一层(即输出层)的每一个神经细胞。通过以上的过程得到最终的输出结果。神经网络的非线性特点使我们得以用它来模拟市场各因素对物价的影响,并预测物价。
遗传算法能够比较快地收敛,但神经网络产生的权值都是随机的,使用遗传算法并没有很好地利用神经网络这一结构本身的特性。而BP学习法就很好地利用了神经网络自身的特点,但存在速度慢的问题。
正是基于两种算法这样的特点,我们将两种算法结合。具体的实现方法如下图所示:
2.系统搭建和算法实现
2.1神经网络的建立与实现:
(1)建立神经网络整体结构
本文建立的网络拥有一个输入层,其中包含14个节点,1个隐含层,1个输出层,其中包含1个输出参数。
(2)隐含层节点数量的确定
隐含层节点数目确定的方法主要有以下三个经验公式:
由以上三个公式结合,我们最终确定隐含层的结点个数为5个。
(3)传递函数的确定
针对隐含层,使用以下的Sigmoid函数,即:;针对输出层,使用的函数是。这个函数的输入变量和输出变量都是在区间(0,1)上,所以在数据进入神经网络运算之前,必须对数据进行预先处理,具体的处理步骤如下:
2.2遗传算法实现:
我们对染色体进行实数编码,对应相应权值,通过杂交变异模拟进化过程,最后选用评价函数来评价个体的适应性,利用赌轮算法选取适应值高的个体进行繁殖。
通过实验,我们设定种群大小为200,变异率为0.05,杂交率为0.8,最大变异值为0.3,误差阈值设定为0.1。随机产生200个染色体作为初始种群,通过杂交、变异产生新的同样规模的种群,把新种群代入网络,计算每个个体的适应值,当种群内最佳适应值达到精度要求时停止。
2.3BP算法实现
(1)将权重初始化为随机的-1到1之间的值。
(2)为每一个模式,重复步骤(a)到(e):
(a)将它送入到网络,并计算网络的输出o
(b)计算输出o与目标输出值(t)之间的误差
(c)调整输出层权重。调整权重利用下面的公式,这里把第K个输出神经细胞的输出记作o_k,而第K个输出神经细胞的目标输出记作t_k,则第k个输出神经细胞开始时的误差记为E_k为:
E_k=(t_k-o_k)×(1-o_k)
为了改变在隐藏层第j个神经元和输出层第k个神经元之间的权重,使用下面的公式:w_ij+=L×E_k×o_j,其中L为学习率,本文中选择的是0.86。对每个隐藏层重复步骤(d)和(e)
(d)计算隐藏层误差
(e)调整隐藏层权重
计算隐藏层第j个神经细胞的权重调整的公式与此类此。首先应该计算第j个神经细胞的误差:
E_k=o_k (1-o_k)×∑_(k=1)^(k=n)?E_k W_jk
其中n为输出层神经元的个数。
确定了误差后,从隐藏层j单元到输入层i单位的权重调整可用下式得到:
w_ij+=L×E_j×o_j
这样的过程要对所有的训练模式进行重复,直到总的误差减少到一个可以接受的水平为止。
(3)重复步骤(b),直到步骤(b)中的误差进入可接受的范围内。
2.4遗传算法与BP算法的结合
在两种算法的结合上,首先设置一个相对较大的精度,通过遗传算法队训练数据进行训练,然后再用BP算法对于以上的数据进一步学习,并提高精度,最终得到一个预测效果更好的网络。
3.系统调试运行及结果分析
我们选择了从1997年9月19日到2011年7月8日的每周五的一共721组数据,根据前面提到的数据分配方案对神经网络进行训练,然后再用2011年7月15日到2011年11月18日的一共19组数据对于网络的模拟效果做了测试。
通过调试,我们最终确定了遗传算法和BP算法的相关参数。其中对于遗传算法,我们选定的种群大小为200,0.05的变异率,0.8的杂交率,误差阈值设成0.1,。而对于BP算法,我们选择的学习率为8.6,误差阈值是0.02,以下是标准结果与我们实验返回的结果的比较。
我们用上面提到的测试数据在只有遗传算法单独工作的情况下进行了模拟,我们发现当精度时,遗传算法需要有很长一段时间才能够跑出结果,而且结果的误差比较大,对此我们选择精度为做了相关的测试,实验结果如下:
1206.68
1203.11
1205.97
1210.2
1201.59
1205.76
1188.41
195.18
1205.5
1208.3
1192.8
1208.08
1184.12
1202.05
1182.7
1209.24
1212.06
1209.33
1212.78
从上面的数据我们可以看出,误差非常大,预测效果不好。
而后我们又用了单纯的BP算法来学习数据并测试,收敛时间也是比较长,但是只要精度设定到一定的范围里面,就会有相对较好的预测结果,不过一开始需要从一个比较大的误差开始收敛。我们选了调整500次以后BP算法的误差作为输出来进行比较。我们选择的BP算法的学习率为8.6,误差阈值是0.02,然后根据上面的要求做了输出,输出的结果0.183636,之后BP算法会在这个误差的基础上开始慢慢地收敛,一直逼近到0.02这个阈值,这个过程中收敛时间较长。
在此基础上,我们先
使用遗传算法,继而再使用BP算法对数据再次进行学习,两种算法都是保持刚才的相关数值设置,我们选取BP算法执行500次以后的误差输出,我们发现这个时候误差已经变成0.104569,这个数值比单用BP算法的时候要小,因此这个时候BP算法就可以从一个相对较小的误差值开始计算,自然可以加快BP算法的执行速度。
改进实验的结果如下:
标准数据
实验数据
标准数据
实验数据
1683.53
1686.86
1656.74
1697.95
1723.93
1702.88
1811.38
1695
1788.63
1667.94
1855.58
1681.57
1754.65
1659.52
1882.96
1642.86
1743.43
1604.2
1827.15
1710.37
1641.85
1652.71
1852.08
1727.6
1680.95
1602.62
1746.68
1644.5
1637.85
1450.3
1663.95
1602.92
1623.79
1585.06
从上面的图表中我们可以发现,我们的模型在数据的大致趋势上已经基本同实际数据吻合了,但是在个别的地方还是有一定的误差。我们使用了如下的公式来计算误差:
最后我们计算出e=114.1876,相对与黄金价格的1600左右的价格,这一误差不到黄金价格的10%,在一定的程度上还是可以接受的。
我们目前搭建的模型可以根据一周之前的宏观经济数据对下一周同一时间的黄金价格进行预测。但这个模型还具有一定的不足,首先,在数据的选择上还存在一定的缺陷。我们这里引入每天的开盘价去预测这一天的价格走势,在实际操作中,如果可以取得每日的价格数据,对于当天的价格可以用前一天的价格来进行预测,效果会更好。其次,虽然经过很多种参数组合的调试,我们这里设置的模型也难免存在一些不足,而且多选取宏观经济参数作为输入变量,可能对油价走势这种微观现象并不能充分反映。最后,数据的时间分布上不够完善,而且这些参数可能存在不同的时滞效应。我们在这方面还缺乏更加深入的分析,但是我们相信如果在时间的分布上进一步调整,一定也能改善目前的预测结果。
参考文献:
[1]《游戏编程中的人工智能技术》,(美)布克兰德著,吴祖增,沙鹰译
[2]《宏观经济学(第六版)》,(美)N·格里高利·曼昆著
[3]《经济学原理 微观经济学分册(第五版)》,(美)N·格里高利·曼昆著
[4]《大宗商品国际定价权研究》,李艺,汪寿阳著