3. 股票预测BP网络模型的建立
3.1 数据的采集和预处理
本文选择了中国银行(601988)2013/11/1-2014/5/15的收盘价和中国汽研(601965)2013/4/1-2014/5/12的收盘价作数据采集。
根据模型建立的需要,BP神经网络要求样本集合理区间为[0,1]或[-1,1],所以要对样本集进行归一化处理。
'xk?归一化公式为:
xk?xminxmax?xmin Matlab中归一化处理数据可以采用premnmx ,
postmnmx , tramnmx 这3个函数。本文用了premnmx归一化函数和postmnmx反归一化函数。 premnmx
语法:[pn,minp,maxp,tn,mint,maxt] = premnmx(p,t) 参数:
pn: p矩阵按行归一化后的矩阵
minp,maxp:p矩阵每一行的最小值,最大值 tn:t矩阵按行归一化后的矩阵
mint,maxt:t矩阵每一行的最小值,最大值
作用:将矩阵p,t归一化到[-1,1] ,主要用于归一化处理训练数据集。 postmnmx
语法: [p,t] = postmnmx(pn,minp,maxp,tn,mint,maxt)
参数:minp,maxp:premnmx函数计算的p矩阵每行的最小、最大值mint,maxt:premnmx函数计算的t矩阵每行的最小值,最大值
作用:将矩阵pn,tn映射回归一化处理前的范围。postmnmx函数主要用于将神经网络的输出结果映射回归一化前的数据范围。
3.2 训练网络的设计
在有合理的结构和恰当的权值条件下,三层前馈网络可以逼近任意的连续函数,这样,就提供了一个设计BP神经网络的基本原则。较少的隐含层,可以实现样本空间的超平面划分,选择两层BP网络就可以实现有效的预测了。本文将采用单隐含层的网络设计,分为单隐含层和输出层两个网络层次,如图所示。
本文将连续五天的价格作为一组输入,将第六天的价格作为输出目标。既用前五天的价格来预测第六天的价格。所以输入层神经元数目是5。输出层的节点数取决于两个方面:输出数
据类型和表示该类型所需的数据大小;同时,根据经典的道氏理论,股票价量分析中最重要的指标就是收盘价。本文所建的股票预测模型,就是针对单只股票的走势进行预测,所以,将股票的收盘价作为该预测模型的唯一输出向量,这样,网络输出层的神经元数目即为1。 BP网络隐含层节点数的多少和BP网络预测精度之间有很大相关性,节点数太少,神经网络的训练能力就会变弱,无法完成精确预测。节点数太多,神经网络训练时间变长且网络可能出现过度拟合现象。所以选择合适的节点数才能使BP网络的性能得到最大发挥,但目前还没有统一的标准来确定隐含层的节点数,所以本文经过多次试验多次比较最终确定了隐含层节点数为12。
传递函数是BP网络的重要组成部分,必须是连续可微的;BP网络通常采用S型的对数或正切函数。本预测模型采集到的原始数据,经过归一化处理后输入、输出向量均在区间[-1,1]范围内,符合S型的对数或正切函数的取值区间。因此,隐含层传递函数选择tansig,输出层传递函数选择purelin,训练函数采用traingdm。 训练参数设为:
net_1.trainParam.show = 50; 限时训练迭代过程 net_1.trainParam.lr = 0.05; 学习率
net_1.trainParam.mc = 0.9; 附加动量因子 net_1.trainParam.epochs = 20000; 最大训练次数 net_1.trainParam.goal = 1e-3; 训练要求精度
训练过程如图:
关于性能函数的设计,本文采用典型的前项反馈网络误差性能函数为均方误差函
数mse:
4. 股票预测分析
4.1中国银行预测分析
在MATLABr2014a 中用函数xlsread 导入已经下载好的中国银行(601988)2013/11/1-2014/5/15的收盘价作为输入样本,进行BP网络训练。
网络结构:
BP神经网络的仿真结果:
图中红色线为预测曲线,蓝色线为实际曲线,可以看出模拟出的曲线大致上与实际曲线相同,
但有些地方明显误差偏大,很可能是由于训练样本的数目过少和训练次数不够而导致。
此图为实际值与预测值的误差曲线,可以明显看出误差确实比较大,所以此图预测结果不尽人意。
误差训练情况:
梯度:
相关推荐: