0

假设DD是时间序列数据(一列和X行)。我将11个样本与数据末尾分离为样本外,并通过MATLAB训练神经网络。神经网络的性能在训练,测试和验证数据中是很好的(拟合应用神经网络的默认属性:fitnet)。使用神经网络预测MATLAB R2015b中的金融时间序列(实际输出和预测输出之间的滞后)

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); 

x是神经网络的输入和t是神经网络的输出(目标)。训练结束后,我用这个代码来预测出样本数据的结果:

y_Out = net(x_oos); 

这是真正的比较和预测外的样本数据的输出:

enter image description here

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

enter image description here

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

PS。

所有数据(x变量作为训练的网络的输入,并用t变量进行比较)作为训练的神经网络的输入:

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

+0

因此,滞后时间总是1时间单位? – GameOfThrows

+0

@GameOfThrows。是。确实如此。这是预测的一步。 – user2991243

+2

这让我觉得这是一个编程错误,你的NN肯定工作正常,但是可能有索引或循环开始/结束的错误?我无法确定,但如果知道这一点,则可以将数据移回1个单位以获得正确的结果 - 这是手动干预。 – GameOfThrows

回答

1

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

+0

我们如何解决这个问题? – user2991243

+0

请参阅此处的讨论:https://www.mathworks.com/matlabcentral/answers/315480-nar-network-outputing-previous-t-1-value-why – Molasar