⑤ Sigmoid (Output Layer)
网络输出层,设置方法参见④。
⑥ 图表 (NetOutput)
这个组件用来在测试阶段显示出网络的预测结果曲线。设置方法:鼠标选中该图元,右键弹出快捷菜单,点击<属性>,弹出下面的对话框:
说明:X轴最大值要大于网络所使用的金融数据有天数。
⑦ 训练 (Teacher)
神经网络训练层,属性设置如下:
⑧ Yahoo输入 (Desired Data)
用于神经网络从yahoo接收金融市场得来的金融数据,用于生成训练网络的拐点信息。设置方法同" ① Yahoo输入 (Input Data) ",如下:
下图为经归一化处理后的结果:
⑨ 规范化 (DeltaNorm2)
在此对训练目标样本数据进行归一化处理,设置方法同"② 规范化 (DeltaNorm1)"。
⑩ 拐点抽取 (TurningPnts)
生成用来训练网络的拐点信息,属性设置如下:
"最小改变率"属性用来指示两拐点之间的最小变化率,来生成相应的信号。它不能设置太小值,否则会生成太多的信号(其中很多都是错误信号)。
算法如下:
- 当市场价格上升超过期望的变化率时,前面一个低点就被标注为'买'信号,相应的输出值设为0。
- 当市场价格下降超过期望的变化率时,前面一个高点就被标注为'卖'信号,相应的输出值设为+1。
- 上述两点之间的日期对应的期望值以插值到0与+1的方式进行规范化。
⑾图表 (RMSE Error)
均方误差曲线,用来显示训练过程中的误差变化情况。设置方法:鼠标选中该图元,右键弹出快捷菜单,点击<属性>,弹出下面的对话框:
说明:X轴最大值要大于网络所使用的金融数据有天数。将"显示"设置为"True"时,将打开图表显示。
3、神经网络训练
我们使用2007-6-1到2007-8-1的数据训练网络:将两个yahoo输入插件的时间段都设为2007-6-1至2007-8-1。打开控制面板,设置学习率为0.3,动量常数为0.3,训练样本数为41(该值可通过查验样本得到),训练步数为1000次,均方误差为0.001,是否训练设置为True,是否验证设置为False,是否指导设置为True,预测学习数设置为6(该值为taps+1),是否均方误差设置为True。点击【运行】开始训练。控制面板上会显示训练的进度和收敛情况。如果权值参数选择不合理的话有可能造成网络不能收敛。这时可以选择【工具】->【初始化】,重新随机生成初始的权系数。
4、神经网络测试
网络训练完成后,就可以对生成的网络模型进行测试了,我们使用2007-7-1到2007-9-1的数据作为测试数据,对该时间段内的股票价格拐点进行预测,测试时,将两个yahoo输入插件的时间段都设为2007-7-1到2007-9-1。打开控制面板,设置测试样本数(这里为42),训练步数为1次,是否训练设置为False,是否验证设置为True。点击【运行】开始测试,预测结果将自动在图表插件中显示出来。
下面是2007-7-1到2007-9-1的股票实际价格走势:
下图是神经网络根据历史数据作出的拐点预测曲线:
可以看出,该网络模型能够将绝大部分的股票走势的拐点正确预测出来,效果非常理想。
5、高级应用(把完成训练的神经网络移植到第三方应用中)
为了在第三方应用程序中使用训练好的神经网络,可以把训练好的网络输出到文件中,然后在程序中读取这个文件,以实现对未知对象的预测。选择【文件】->【导出模型…】,把当前神经网络保存到文件中。然后就可以在程序中使用了。
下面是从文件中读取神经网络的代码:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:/2ndn/sample/FinancePre/FinancePre.snet"));