[英]Using neural network to predict a financial time series in MATLAB R2015b (lag between real output and predicted output)
假設DD
是一個時間序列數據(一列和X
行)。 我從數據末尾分離出11個樣本作為樣本外樣本,並通過MATLAB訓練神經網絡。 在訓練,測試和驗證數據中,神經網絡的性能很好(fit app神經網絡的默認屬性: 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);
x
是神經網絡的輸入, t
是神經網絡的輸出(目標)。 訓練后,我使用此代碼來預測樣本數據的結果:
y_Out = net(x_oos);
這是樣本外數據的實際輸出與預測輸出之間的比較:
但是我認為兩個輸出之間存在滯后。 現在,只需一步就可以檢查它:
為什么我們在樣本外數據中有這種行為? 我檢查了樣本外的不同時間長度,並且我們有相同的行為(一步滯后)。 這是數據行為嗎?
PS。
所有數據( x
變量作為訓練網絡的輸入,並與t
變量進行比較)作為訓練神經網絡的輸入:
輸入的所有數據之間存在延遲! 神經網絡訓練有這種數據滯后! 這是一個錯誤嗎? 這是近兩年的每日時間序列,沒有任何丟失的數據。
您的網絡沒有問題。 發生的事情是您的網絡正在退化為一個幼稚的預測器(查找它)。 即:它無法解決您的輸入和輸出之間的關系...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.