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

ディープラーニングを用いて為替市場のデータについて学習させた後に、予測をするのですが予測をした値をプロットすると予測値が実際のものと明らかに違う方向に飛んで行ってしまいます。過学習ではないかと思い、学習の際のオプションを変えたりしたのですが予測すると必ず同じようなことになってしまいます。一番下の写真は実際に予測させた時の実際の価とのズレです。どのようにしたら予測した価が飛んでいかずにいい感じに予測出来るでしょうか
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 Kommentare

Kojiro Saito
Kojiro Saito am 7 Nov. 2022
学習終了時のRMSEや損失は小さい値になっていますか?
水疱瘡の例ではRMSEも損失のグラフも徐々に小さくなっていましたが、このグラフが収束していないと学習済みモデル自体の精度が良くない可能性が高いです。
健太郎 藤本
健太郎 藤本 am 7 Nov. 2022
収束しないと言うより逆に学習してから直ぐにRMSEが0.2、損失はほぼ0に近い辺りになってからずっと学習が終わるまで横ばいになっていました。横ばいになった直後に学習を停止し予測させてみたのですが全く同じようになります、、
Kojiro Saito
Kojiro Saito am 7 Nov. 2022
なるほど。すぐに収束してしまっているので、過学習の可能性はありますね。学習に使用しているデータ(data)の個数はどれぐらいでしょうか?
健太郎 藤本
健太郎 藤本 am 9 Nov. 2022
データの個数は大体5000個程です。
% 過去データを入力して状態を更新
net = predictAndUpdateState(net, XTrain,MiniBatchSize=1);
ここでMiniBatchSizeを1にしているのですがこれは関係なさそうでしょうか。

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Kategorien

Mehr zu Deep Learning Toolbox 入門 finden Sie in Hilfe-Center und File Exchange

Produkte

Version

R2022b

Gefragt:

am 4 Nov. 2022

Community Treasure Hunt

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

Start Hunting!