。
この例では,长短期记忆(LSTM)ネットワークを使用して时系列データを予测する方法を说明します。
シーケンスシーケンス将のステップの値を予测するに,序列序回帰回帰用ののネットワークに学习せることができます。その,入力シーケンスの各タイムで,lstmネットワークは次のタイムの値をするように习しますよう习习し。
将来到数码のタイムステップ値をを予测には,关联predictandanddatestate.
を使用して,タイムステップを1つずつ予测し,予测ごとにネットワークの状态を更新します。
このこの例ではデータセット水痘_dataset
00
例のデータを読み込みます。水痘_dataset
には,月に対応するステップと生物数量に対応値を含む1つの时系列が含ま含まいますいいます。変更します。
数据= Chickenpox_dataset;data = [data {:}];图绘图(数据)XLabel(“月”)ylabel(“案件”) 标题(“水痘每月案例”的)
习习データテストデータににしします。シーケンスシーケンス最初の90%で学正文を行,残りの10%でテスト行。
numtimestepstrain =地板(0.9 * numel(数据));DataTrain =数据(1:Numtimestepstrain + 1);dataTest =数据(NumtimeStepstrain + 1:结束);
耶和好な适実现,学校の発散を防ぐに,ゼロ平均と単位単位をように习データをしににはます。なりません。
mu =卑鄙(数据标记);sig = std(DataTrain);DataTrainstandardized =(DataTrain - mu)/ sig;
タイムステップの値を予测するように学习します。予测子は,最后のタイムステップを含まない学习シーケンスです。
XTrain = DataTrain标准(1:端1);YTrain = DataTrain标准(2:结束);
lstm回帰ネットワークを作用成し.200个の隠れを持つ。
numfeatures = 1;numreponses = 1;numhidandunits = 200;层= [......sequenceInputlayer(NumFeatures)LSTMLAYER(NUMHIDNEDURE)全连接列(NUMRESPONSES)回归范围];
学习オプションを指定しししソルバーを'亚当'
に设定し,学习を250エポック行います。勾配の発散を防ぐために,勾配のしきい値を1に设定します。初期学习率を0.005に指定し,125エポック后に系数0.2を乘算して学习率を下载。
选项=培训选项('亚当'那......'maxepochs',250,......'gradientthreshold',1,......'italllearnrate',0.005,......'学习chedule'那'分段'那......'学习ropperiod',125,......'学习ropfactor',0.2,......'verbose',0,......'plots'那'培训 - 进步');
Trainnetwork.
を使用し,指定した学习オプションでLSTMネットワークに学习させます。
net = trainnetwork(xtrain,ytrain,图层,选项);
将来到数码のタイムステップ値をを予测には,关联predictandanddatestate.
をを使し,タイムステップを1つずつ予测,予测予测ごとにネットワークの状态ををししますにににににににしににししにしししししししししししししし
学习习データデータ同じパラメーターししてテストデータを标准。
DataTestStandardized =(DataTest - Mu)/ sig;XTEST = DataTestStandardized(1:结束-1);
ネットワークネットワークの状态をを初にには,まず,学校データXTrain.
について予测を行ます。次次,学校の応答YTrain(结束)
の最后のタイムステップを使て,最初の予测を行。predictandanddatestate.
にに力します。
データの大规模な,长いシーケンス,または大规模ネットワークのは,通俗,gpuでののががcpuでの予测计算が短缩れます予测计算がされ。计算の方向高速.1タイムステップの予测は,CPUを使使し。predictandanddatestate.
の'executionenvironment'
オプションを'中央处理器'
に设定します。
net = predictandanddatestate(net,xtrain);[net,ypred] = predictandanddattestate(net,ytrain(端));numtimestepstest = numel(xtest);为了i = 2:numtimestepstest [net,ypred(:,i)] = predictandanddattestate(net,ypred(:,i-1),'executionenvironment'那'中央处理器');结尾
前に计算したパラメーターを使用して予测を非标准化します。
ypred = sig * ypred + mu;
学习の进行状况プロットに,标准化されたデータ计算され平方英根二乘二乘(RMSE)
YTEST = DataTest(2:结束);RMSE = SQRT(平均值((ypred-ytest)。^ 2))
RMSE =.单身的248.5531.
予测値と共に学习の时系列をプロットします。
图绘图(数据架(1:终端1))保持在idx = numtimestepstrain :( numtimestepstrain + numtimestepstest);绘图(IDX,[数据(numtimestepstrain)ypred],'.-') 抓住离开Xlabel(“月”)ylabel(“案件”) 标题(“预报”) 传奇([“观察到的”“预报”])
予测値をテストデータと比较します。
图形子图(2,1,1)绘图(ytest)保持在情节(Ypred,'.-') 抓住离开传奇([“观察到的”“预报”])ylabel(“案件”) 标题(“预报”)子图(2,1,2)杆(Ypred - Yest)Xlabel(“月”)ylabel(“错误”) 标题(“rmse =”+ RMSE)
00
まず,ネットワークネットワークの状态状态をししししうううににににににに重置静止
をを使てネットワークのをリセットしますますネットワークの状态リセットすると,前の予测が新闻データの予测に影响をの防ぐことができますますネットワーク防ぐことができます。て予测を行,ネットワークネットワークの状态ををしし。
net = ResetState(网络);net = predictandanddatestate(net,xtrain);
タイムステップごとに予测を行います。予测ごとに,前のタイムステップの観测値を使用して次のタイムステップを予测します。predictandanddatestate.
の'executionenvironment'
オプションを'中央处理器'
に设定します。
Ypred = [];numtimestepstest = numel(xtest);为了i = 1:numtimestepstest [net,ypred(:,i)] = predictandanddattestate(net,xtest(:,i),'executionenvironment'那'中央处理器');结尾
前に计算したパラメーターを使用して予测を非标准化します。
ypred = sig * ypred + mu;
平方根平均二乘(RMSE)を计算します。
RMSE = SQRT(平均值((ypred-ytest)。^ 2))
RMSE = 158.0959.
予测値をテストデータと比较します。
图形子图(2,1,1)绘图(ytest)保持在情节(Ypred,'.-') 抓住离开传奇([“观察到的”“预料到的”])ylabel(“案件”) 标题(“预测更新”)子图(2,1,2)杆(Ypred - Yest)Xlabel(“月”)ylabel(“错误”) 标题(“rmse =”+ RMSE)
ここで,予测値の代わりに観测値を使用してネットワークの状态を更新すると,予测がより正确になります。
lstmlayer.
|sequenceInputlayer.
|培训选项
|Trainnetwork.