使用神经网络对黄金期货交割价格进行预测-1 MATLAB

来源:互联网 发布:2015nba总决赛数据 编辑:程序博客网 时间:2024/04/29 05:50

   这个是我在本科毕业设计过程中的一个总结。也走了不少弯路,希望能给大家一个参考,神经网络的种类为BP神经网络。

   matlab具有非常方便的神经网络工具箱以及矩阵计算,且使用方便,使得其是一个优秀数据挖掘的工具。本文就不赘述神经网络以及一些其他的基础知识是什么了,只介绍我是如何做的。如果有错误的地方希望大佬指正,感激不尽。

一、数据预处理

   一般分析金融数据有两种方式,一种为时间序列分析方法,一种为影响因子分析方法。时间序列分析方法顾名思义,就是使用一段连续时间内的所有交割价格作为输入,所需预测的数据作为输出;而影响因子分析方法则是将一系列对所预测指标的所有或部分影响因子量化,作为输入,以取得预测输出。下面会给出这两种数据预测集合划分的代码。

   在划分训练集合和预测集合之前,还需要对数据做标准化。数据标准化有两种方法,一种为极大极小标准化法,一种为Z-score标准化法,这两种标准化法都各有利弊,在这里不再赘述,可以自己根据自己的需要进行选择。

MIN=min(X0);MAX=max(X0);totalNum=length(X0);aa=zeros(1,totalNum);%%%数据极大极小标准化for i=1:totalNum    aa(i)=(X0(i)-MIN)/(MAX-MIN);enddd=aa;%%%将整个数据集合的4/5作为训练集,剩下的1/5作为验证集trainNum=round(totalNum*4/5);testNum=totalNum-trainNum-10;n1=zeros(trainNum,10);%归一化训练输入集n2=zeros(testNum,10);%归一化测试输入集x1=zeros(trainNum,1);%归一化训练输出集x2=zeros(testNum,1);%归一化测试输出集%%%%制作训练集p=1;for i=1:1:trainNum    for j=p:10+p-1        n1(i,j-p+1)=dd(j);        x1(i,1)=dd(j+1);    end    p=p+1;end%%%%制作测试集q=1;for i=1:1:testNum    for j=q:10+q-1        n2(i,j-q+1)=dd(j+trainNum);        x2(i,1)=dd(j+trainNum+1);    end    q=q+1;end%训练样本xn_train=n1';%训练目标dn_train=x1';%测试样本xn_test=n2';%测试目标dn_test=x2';
   以上的程序段采用时间序列分析法,使用极大极小标准法进行数据标准化。为了方便阅读,对许多的语句进行了拆分。X0为时间序列数据集,为一个列向量。将标准化数据集连续10天的交割价作为输入,其后一天的交割价作为输出。

[n,m]=size(X0);Time=(1:n)';Time0=1:round(n*4/5);nT0=length(Time0);StdX0 = std(X0(Time0,:));MeanX0 = mean(X0(Time0,:));X = (X0(Time0,:)-ones(nT0,1)*MeanX0)./(ones(nT0,1)*StdX0);%数据归一化 Z-scoreR = cov(X);[A,L] = eig(R); Lambda = diag(L);[Lambda,Num1] = sort(Lambda,'descend');A = A(:,Num1);Y=X*A;cumEnergy = cumsum(Lambda);Energy = cumEnergy(m);nE=find(cumEnergy/Energy>0.95,1);YChoose=X*A(:,1:nE);P=YChoose(Time0,:)'; %得到输入量T=[X(Time0(2:end),14)',(X0(nT0,14)-MeanX0(14))/StdX0(14)];  %得到输出量,这里的14指的是所预测量在原数据集合中的列数
   以上的程序段采用影响因子分析法,使用Z-score标准法进行数据标准化。X0为影响因子数据集,每一行为一个数据样本。将标准化数据集连续10天的交割价作为输入,其后一天的交割价作为输出。这里选用前一天的所有影响因子作为输入,其后一天的交割价格作为输出。但是由于输入的维度过于高,容易导致“维度灾难”,会导致计算量大大增加,存储开销的大大增加和收敛时间的大大增加,甚至会导致无法收敛。且对于有些影响因子来说,对结果的影响作用是很小的;且有些影响因子之间本身就具有一定的相关性。所以在这里会对数据集进行主成分分析方法(PCA)进行统计学的维度压缩。PCA方法这里不赘述。

   主成分分析法的实质其实是n维空间的坐标旋转,并不会改变原本的数据结构,得到的主成分数据即是原变量的线性组合,且任意两组数据两两不相关,最大的反映了原数据所蕴含的信息。这样的处理下,训练样本数量并未减少,但是网络得到了一定的简化,提高了网络的性能。一般选择能量值占85%-95%的成分作为新的输入维度。这里选用了95%。

   在以后的实例中,还是以极大极小标准化的时间序列分析方法为主要手段。原因如下:一,对于神经网络的激活函数来说,一般会选用sigmoid函数,sigmoid函数是作为模拟神经元的抑制和兴奋状态而开发的,是一种比较成熟的激活函数,且神经网络工具箱有提供,使用非常简单。极大极小标准化法会将数据标准化在[0,1]或者[-1,+1]之间,使用sigmoid函数会比较适合。二,对于时间序列分析方法来说,获取数据非常简单,且网络模型简单,易收敛。而影响因子分析方法的数据获取很困难,且对于每一个影响因子都需要有适当的量化标准来对其进行量化,无疑增加了前期的难度。

   第一部分就说到这里,主要介绍了数据的预处理过程,以后的文章会介绍其他的操作,希望各位大佬指正!




阅读全文
0 0
原创粉丝点击