ディープラーニングの​予測段階で予測値があ​りえない値に、

6 visualizaciones (últimos 30 días)
健太郎 藤本
健太郎 藤本 el 4 de Nov. de 2022
Comentada: 健太郎 藤本 el 9 de Nov. de 2022
ディープラーニングを用いて為替市場のデータについて学習させた後に、予測をするのですが予測をした値をプロットすると予測値が実際のものと明らかに違う方向に飛んで行ってしまいます。過学習ではないかと思い、学習の際のオプションを変えたりしたのですが予測すると必ず同じようなことになってしまいます。一番下の写真は実際に予測させた時の実際の価とのズレです。どのようにしたら予測した価が飛んでいかずにいい感じに予測出来るでしょうか
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 comentarios
Kojiro Saito
Kojiro Saito el 7 de Nov. de 2022
なるほど。すぐに収束してしまっているので、過学習の可能性はありますね。学習に使用しているデータ(data)の個数はどれぐらいでしょうか?
健太郎 藤本
健太郎 藤本 el 9 de Nov. de 2022
データの個数は大体5000個程です。
% 過去データを入力して状態を更新
net = predictAndUpdateState(net, XTrain,MiniBatchSize=1);
ここでMiniBatchSizeを1にしているのですがこれは関係なさそうでしょうか。

Iniciar sesión para comentar.

Respuestas (0)

Categorías

Más información sobre 時系列、シーケンス、およびテキストを使用した深層学習 en Help Center y File Exchange.

Productos


Versión

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!