2017-01-01 18 views
0

私は機械学習に新たなんだ、と私は、このセキュリティのの過去の値与えられた株式市場の証券の価格を閉じる次の未来を予測するために、MATLABニューラルネットワーク上で実現しようとしています終値。今私はこれで失われているので、私よりもニューラルネットワークについて知っている人からの指導を探しています。リカレントニューラルネットワークは時系列予測のため

だから、この予測を行うために、私はリカレントニューラルネットワーク(RNN)を使用しようとしています。このために、私はMATLABのネイティブ関数layrecnetを使用しています。私がRNNを訓練するために使用しているインプットは、与えられた日付範囲(例えば、2010年1月1日から2010年1月1日まで)の終値で、私が使用しているターゲットは入力と同じですが、 1つの単位時間。我々が入力している場合

だから、たとえば、:

inputSeries = [0.1 0.2 0.3 0.4 0.5 0.6 0.61 0.62] 

を次に私が使用しているターゲットは、次のとおりです。すべてが0から1に正規化され

targetSeries = [0.2 0.3 0.4 0.5 0.6 0.61 0.62 0.63] 

この方法は理にかなって私の頭は、入力の与えられたシーケンスのために、ネットワークはそのシーケンスの次の値をターゲットとして持つからです。結果から私はテストデータを入手していますが、ネットワークは何も予測していないようです。それは試験データ上で観察された同じパターンにちょうど従う。

私はものの正しい道に私を導くことができる何かを見つけることなく、MATLAB上のシーケンスの次の値を予測するRNNを実装する方法について見てきました。私が使っている方法は完全に間違っていますか?私は単純なRNNを使ってはいけませんか?この問題に対して別のアプローチを使用すべきですか?

答えて

0

あなたの方法論は、音と思われる、とイエスのRNNは(時系列)データに適しています。しかし、混沌とした行動をしており、株式市場の予測がある(他のものには、発作予測、地震予知、ハリケーン予測などがあるため、予測が困難であることが知られている)。だから、あなたが良い結果を得ていないことを頼んでいるなら、それを念頭に置いてください。 MATLABを使用しているので、私はNARXNET(外部入力付き非線形自己回帰ニューラルネットワーク、https://www.mathworks.com/help/nnet/ref/narxnet.html)をお勧めします。これらは、ステロイド上のリカレントニューラルネットワークのようなものです。あなたは最初に開ループ形式で訓練し、閉ループ形式で再トレーニングしたいと考えています。以下は、開ループ/閉ループフォームについて説明する役に立つリンクです:
https://www.mathworks.com/matlabcentral/answers/310535-narxnet-closed-loop-vs-open-loopお役に立てれば。ここにあなたを始めるためのコードがあります。

function a = myNARXNET(in, out) 

X = tonndata(in,false,false); 
T = tonndata(out,false,false); 

trainFcn = 'trainlm'; % Levenberg-Marquardt backpropagation. 

inputDelays = 1:2; 
feedbackDelays = 1:2; 
hiddenLayerSize = [10,10,10]; 

net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize,'open',trainFcn); 

net.layers{1}.transferFcn = 'radbasn'; 
net.layers{2}.transferFcn = 'tansig'; 
net.layers{3}.transferFcn = 'tansig'; 

net.inputs{1}.processFcns = {'mapminmax','mapstd'}; 
net.inputs{2}.processFcns = {'mapminmax','mapstd'}; 

[x,xi,ai,t] = preparets(net,X,{},T); 

net.trainParam.max_fail = 10; 
net.trainParam.goal = 1e-10; 

net.performParam.regularization = 0.5; 

net.trainParam.epochs = 1000; 
net.trainParam.min_grad = 1e-10; 

net.divideFcn = 'dividerand'; % Divide data randomly 
net.divideMode = 'time'; % Divide up every sample 

net.divideParam.trainRatio = 70/100; 
net.divideParam.valRatio = 15/100; 
net.divideParam.testRatio = 15/100; 

net.performFcn = 'mse'; % Mean Squared Error 

net.plotFcns = {'plotperform','plottrainstate', 'ploterrhist', ... 
    'plotregression', 'plotresponse', 'ploterrcorr', 'plotinerrcorr'}; 

% Train the Network 
[net,tr] = train(net,x,t,xi,ai); 
y = net(x,xi,ai); 
e = gsubtract(t,y); 
performance = perform(net,t,y); 

%Switch the network to closed loop form and retrain 
net = closeloop(net); 
[x,xi,ai,t] = preparets(net,X,{},T); 
[net,t] = train(net,x,t,xi,ai); 
y = net(x,xi,ai); 
a = net;  

end 
関連する問題