ディープラーニングの予測段階で予測値がありえない値に、
5 views (last 30 days)
Show older comments
ディープラーニングを用いて為替市場のデータについて学習させた後に、予測をするのですが予測をした値をプロットすると予測値が実際のものと明らかに違う方向に飛んで行ってしまいます。過学習ではないかと思い、学習の際のオプションを変えたりしたのですが予測すると必ず同じようなことになってしまいます。一番下の写真は実際に予測させた時の実際の価とのズレです。どのようにしたら予測した価が飛んでいかずにいい感じに予測出来るでしょうか
data(1:10)
ans =
122.5690
122.6030
122.6090
122.6090
122.6170
122.5980
122.5780
122.5840
122.5840
122.5860
%% 学習データとテストデータの分割
numTimeStepsTrain = floor(0.9 * numel(data));
XTrain = data(1:numTimeStepsTrain);
YTrain = data(2:numTimeStepsTrain+1);
XTest = data(numTimeStepsTrain+1:end-1);
YTest = data(numTimeStepsTrain+2:end);
numTimeStepsTest = numel(XTest);
idxTrain = 1:numTimeStepsTrain;
idxTest = (numTimeStepsTrain+1):(numTimeStepsTrain + numTimeStepsTest);
%% データの標準化
mu = mean(XTrain);
sig = std(XTrain);
XTrain = (XTrain - mu) / sig;
YTrain = (YTrain - mu) / sig;
XTest = (XTest - mu) / sig;
%% LSTM Network の構築
inputSize = 1;
numResponses = 1;
numHiddenUnits = 200;
layers = [ ...
sequenceInputLayer(inputSize)
lstmLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
%% 学習オプションの設定
opts = trainingOptions('adam', ...
'MaxEpochs', 250, ...
'GradientThreshold', 1, ...
'InitialLearnRate', 0.005, ...
'LearnRateSchedule', 'piecewise', ...
'LearnRateDropPeriod', 125, ...
'LearnRateDropFactor', 0.2, ...
'Verbose', 0, ...
'Plots', 'training-progress');
XTrain=num2cell(XTrain);
YTrain=num2cell(YTrain);
XTest=num2cell(XTest);
%% LSTM Network の学習
net = trainNetwork(XTrain, YTrain, layers, opts);
%% 未来の時間領域での予測
% 過去データを入力して状態を更新
net = predictAndUpdateState(net, XTrain,MiniBatchSize=1);
% 1ステップ目の予測
[net, YPred(1)] = predictAndUpdateState(net, XTest(1));
% 2ステップ目以降の予測
for i = 2:numTimeStepsTest
[net, YPred(i)] = predictAndUpdateState(net, YPred(i - 1));
end
4 Comments
Answers (0)
See Also
Categories
Find more on 時系列、シーケンス、およびテキストを使用した深層学習 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!