使用神经网络预测MATLAB R2015b中的金融时间序列(实际输出和预测输出之间的滞后)

时间:2016-01-13 15:58:50

标签: matlab machine-learning neural-network time-series prediction

假设fitnet是时间序列数据(一列和for ii = 31 : (numel(DD)-1) D_0(ii-30,1) = DD(ii-0); D_1(ii-30,1) = DD(ii-1); D_2(ii-30,1) = DD(ii-2); D_3(ii-30,1) = DD(ii-3); D_4(ii-30,1) = DD(ii-4); D_5(ii-30,1) = DD(ii-5); D_6(ii-30,1) = DD(ii-6); D_7(ii-30,1) = DD(ii-7); D_14(ii-30,1) = DD(ii-14); D_30(ii-30,1) = DD(ii-30); D_plus_1(ii-30,1) = DD(ii+1); end x = [D_0 D_1 D_2 D_3 D_4 D_5 D_6 D_7 D_14 D_30]'; t = D_plus_1'; %% Out-of-sample data x_oos = x(:,end-10:end); t_oos = t(:,end-10:end); x(:,end-10:end) = []; t(:,end-10:end) = []; hiddenLayerSize = 5; trainFcn = 'trainlm'; % Levenberg-Marquardt backpropagation. net = fitnet(hiddenLayerSize,trainFcn); net.input.processFcns = {'removeconstantrows','mapminmax'}; net.output.processFcns = {'removeconstantrows','mapminmax'}; net.divideFcn = 'dividerand'; % Divide data randomly net.divideMode = 'sample'; % Divide up every sample net.divideParam.trainRatio = 70/100; net.divideParam.valRatio = 15/100; net.divideParam.testRatio = 15/100; % Choose a Performance Function % For a list of all performance functions type: help nnperformance net.performFcn = 'mse'; % Mean Squared Error [net,tr] = train(net,x,t); 行)。我通过MATLAB将11个样本与数据末端分离为样本外和训练神经网络。神经网络的性能在训练,测试和验证数据方面都很好(拟合应用神经网络的默认属性:x)。

t

y_Out = net(x_oos); 是神经网络的输入,x是神经网络的输出(目标)。培训结束后,我使用此代码来预测样本数据的结果:

t

这是样本外数据的实际和预测输出之间的比较:

enter image description here

但我认为两个产出之间存在滞后。现在检查一步滞后:

enter image description here

为什么我们在样本外数据中出现这种行为?我检查了不同时间长度的样本外,我们有相同的行为(一步滞后)。这是数据行为吗?

PS。

所有数据({{1}}变量作为训练网络的输入并与{{1}}变量比较)作为训练神经网络的输入:

enter image description here 所有数据之间存在滞后作为输入!神经网络训练有这种数据滞后!这是一个错误吗?!这是近两年的每日时间序列,没有任何遗漏数据。

1 个答案:

答案 0 :(得分:1)

您的网络没有问题。发生的事情是你的网络正在退化成一个天真的预测者(查找它);即:它无法解决输入和输出之间的关系......