简介BP神经网络模型是目前应用最广泛的神经网络之一。 其本质是通过学习历史数据找到与数据变化趋势的非线性关系,持续调整网络内各单元的权重,使输出量与期望值之间的误差最小化。 因此,为了达到良好的预测精度,需要确定网络预测模型本身的结构。
1 )网络层数的设计。 本文应建立的预测模型主要用于研究股指期货短期内收盘价的走势。 我国股指期货市场存在的时间比较短,因此历史数据有限。 在这种情况下,不选择增加网络层数的方法,而是选择增加隐含层神经元节点的数量以提高输出结果的精度。 因此,本文选择单隐层的BP神经网络模型。
2 )输入层神经节点的设计。 在单因素预测中,只将股指期货每天的收盘价作为原始数据使用。 选择5d (一周的交易天数)作为预测的分析周期。 即,将5d的交易收盘价历史数据作为预测的依据,依次将5d的数据作为BP神经网络的一个输入值,将之后的第二天的数据作为网络数据的目标数据。 因此,将输入层神经元节点数设为5; 在多因素预测模型中,使用合同收盘价、成交量、OBV指标、WR1指标、沪深300指数收盘价作为输入向量,输入向量共有5个,因此输入层神经元节点数也为5。
3 )传递函数和学习函数的设计。 本文设计的模型均采用相同的隐式层传递函数tansig、输出层传递函数logsig和学习函数learngdm。
4 )性能函数的确定。 网络误差直观地反映了预测效果的好坏,是预测精度的具体反映。 本文在建立BP神经网络模型时,选择均方误差来确定网络的误差情况。
5 )隐含层神经节点的设计。 如果模型中其他参数的值不变,本文通过调整抑制层神经元节点的数量重复实验,比较输出误差,确定最佳抑制层神经元节点的数量。 对于单因子BP神经网络,当隐式层神经节点的数目为24时,BP神经网络的均方误差最小,即对函数的逼近效果最好,此时的均方误差为1.1609; 对于多因子BP神经网络,抑制层神经节点数为5时,BP神经网络的均方误差最小,最小值为0.0126。 以上分析表明,单因素BP神经网络预测模型的结构为单隐式层和单输出层; 输入层神经节点数为5; 抑制层神经节点数为24; 输出层神经节点数为1; 隐式层传递函数、输出层传递函数、学习函数分别为谭SIG、logsig、learngdm; 性能函数为mse。 多因素BP神经网络预测模型的隐含层神经元节点数为5,模型的其他属性与单因素BP神经网络模型一致。
二维码的一部分
清除全部
clc
clf
%采用三层BP网络结构
%输入层神经元数为5,抑制层神经元数为3,输出层神经元数为1
%最大迭代次数
马西施湖=5000;
%e是计算输出和样本的实际输出差
在%内存中打开maxcishu个存储空间
e=Zeros(maxcishu,1 );
%输入数据维5,输入节点数5
% maxp当天的最高价系列
% minp当日最低价序列
% sp将于当天开放
% ep当天收盘价
% tnum当天的成交量
%调用数据
%shuJu=xlsread(DM.xlsx ),) B1:K151 );
shuJu=importdata(BP_zxf.xlsx );
sp=Shu ju.data (:1 );
maxp=Shu ju.data (:2 ) );
minp=Shu ju.data (:3 ) );
tum=Shu ju.data (:10 ) );
Ep=Shu ju.data (:4 ) );
在2:1中将%数据集分为培训示例集和测试示例集
Jishu=length(EP;
Jishu=Ceil(Jishu/3*2);
%测试样本集从2/3到最后
SPT=sp(jishu1:end;
maxpt=maxp(jishu1:end;
minpt=minp(jishu1:end;
tumt=tnum(Jishu1:end;
EPT=EP(jishu1:end;
%培训示例集
sp=sp(1:jishu;
maxp=maxp(1:jishu );
minp=minp(1:jishu );
tnum=tnum(1:Jishu );
EP=EP(1:jishu;
%记录各组的最大值最小值和最小值,为训练样本集规范化做准备
maxp_max=max(maxp;
maxp_min=min(maxp;
minp_max=max(minp );
minp_min=min(minp);
ep_max=max(ep);
ep_min=min(ep);
sp_max=max(sp);
sp_min=min(sp);
tnum_max=max(tnum);
tnum_min=min(tnum);
% 目标数据为次日的收盘价,相当于把当日收盘价时间序列向前挪动一个单位
goalp=ep(2:jishu);
%数据归一化,将所有数据归一化到(0 1)
guiyi=@(A)((A-min(A))/(max(A)-min(A)));
maxp=guiyi(maxp);
minp=guiyi(minp);
sp=guiyi(sp);
ep=guiyi(ep);
tnum=guiyi(tnum);
% 后面的目标数据goalp个数是ep向前移动一位得到,所以最后一组的目标数据缺失
% 所以,要把除了目标数据goalp以外的所有数据序列删除最后一个
maxp=maxp(1:jishu-1);
minp=minp(1:jishu-1);
sp=sp(1:jishu-1);
ep=ep(1:jishu-1);
tnum=tnum(1:jishu-1);
%需要循环学习次数loopn,即训练样本的个数
loopn=length(maxp);
%为了方便表示将5个行向量放到一个5*loopn的矩阵中simp中,每一列是一个样本向量
simp=[maxp;minp;sp;ep;tnum];
%显示训练好的权值
W1
W2
于处理
simpt=[maxpt;minpt;spt;ept;tnumt];
%因为是用当前的数据预测下一天的,所以检验样本第一天的收盘价和预测的最后一天的收盘价因为没有比对值而舍弃
for i=1:1:length(maxpt)-1
for j=1:1:bn
bx(j)=W1(j,:)*simpt(:,i);
bxe(j)=jihuo(bx(j));
end
%输出预测序列
outt(i)=W2*bxe;
end
%预测输出和实际对比散点图
figure(3)
hold on
plot(outt,'rp')
plot(eptduibi,'bo')
title('测试样本集预测输出和实际对比')
%计算全局误差
disp('测试样本集误差')
disp(1/length(eptduibi)*0.5*sum((eptduibi-outt).^2))
3 仿真结果 4 参考文献[1]xldppx. 基于BP神经网络的水上交通事故预测及MATLAB实现. (Doctoral dissertation, 武汉理工大学).