Matlab實(shí)現(xiàn)時(shí)間序列預(yù)測(cè)分類實(shí)例代碼
Matlab從2010b版本以后,神經(jīng)網(wǎng)絡(luò)工具箱已經(jīng)升級(jí)為7.0,功能大大加強(qiáng)。在之前的版本做時(shí)間預(yù)測(cè)是比較麻煩操作的,MathWorks公司對(duì)時(shí)間序列預(yù)測(cè)做了詳細(xì)的解決,跑模型非常簡(jiǎn)便。
下面通過一個(gè)例子演示在Matlab實(shí)現(xiàn)時(shí)間序列預(yù)測(cè)。
一、數(shù)據(jù)準(zhǔn)備
極客范兒在夏天吹電扇的體溫變化
| 時(shí)間 | 風(fēng)速 | 溫度 |
|---|---|---|
| 0 | 1 | 37.21405 |
| 0.12457 | 1.01 | 37.26016 |
| 0.24915 | 1.02 | 37.26324 |
| 0.37373 | 1.03 | 37.31242 |
| 0.4983 | 1.04 | 37.3155 |
| 0.62258 | 1.05 | 37.36468 |
| 0.74745 | 1.06 | 37.36776 |
| 0.87203 | 1.07 | 37.41694 |
| 0.99661 | 1.08 | 37.42002 |
| … | … | … |
% 原始數(shù)據(jù)讀入到Matlab中
rawData=xlsread('time_series_data.xlsx','sheet1','A2:C52);
% 第一列時(shí)間,第二列風(fēng)速,第三列溫度
% yt第三列
y_t=rawData(:,3);
% xt第二列
x_t=rawData(:,2);
二、時(shí)間序列預(yù)測(cè)分類
時(shí)間序列預(yù)測(cè)分為三類:
1、輸入為xt,輸出是yt
即有過去的輸入xt,也有過去的輸出yt,同時(shí)當(dāng)前的輸出不僅依賴于過去的輸入,也同時(shí)依賴于過去的輸出
過去時(shí)間段溫度的變化,預(yù)測(cè)將來(lái)某個(gè)時(shí)間溫度的變化,這種情況就是只有過去的輸出
% x_t - 時(shí)間序列輸入
% y_t - 反饋時(shí)間序列
X = tonndata(x_t,false,false);
T = tonndata(y_t,false,false);
% 選擇訓(xùn)練功能
% 'trainlm'通常是最快
% 'trainbr'耗時(shí)較長(zhǎng),但可能更適合解決挑戰(zhàn)性的問題
% 'trainscg'使用更少的內(nèi)存。適用于低內(nèi)存情況
trainFcn = 'trainlm'; % Levenberg-Marquardt反向傳播
% 創(chuàng)建一個(gè)非線性自回歸網(wǎng)絡(luò)
feedbackDelays = 1:6;
hiddenLayerSize = 20;
net = narnet(feedbackDelays,hiddenLayerSize,'open',trainFcn);
% 為訓(xùn)練和模擬準(zhǔn)備數(shù)據(jù)
% PREPARETS函數(shù)為特定網(wǎng)絡(luò)準(zhǔn)備時(shí)間序列數(shù)據(jù)
% 移動(dòng)時(shí)間的最小量,以聲明填充輸入狀態(tài)和層
% 使用PREPARETS允許保留原始的時(shí)間序列數(shù)據(jù)不變,同時(shí)輕松定制它的網(wǎng)絡(luò)與不同
% 具有開環(huán)或閉環(huán)反饋模式的延遲數(shù)
[x,xi,ai,t] = preparets(net,{},{},T);
% 建立訓(xùn)練,驗(yàn)證,測(cè)試的數(shù)據(jù)
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;
% 訓(xùn)練靜態(tài)神經(jīng)網(wǎng)絡(luò)
[net,tr] = train(net,x,t,xi,ai);
% 測(cè)試神經(jīng)網(wǎng)絡(luò)
y = net(x,xi,ai);
e = gsubtract(t,y);
performance = perform(net,t,y)
% 查看神經(jīng)網(wǎng)絡(luò)
view(net)
% Plots
% Uncomment these lines to enable various plots.
%figure, plotperform(tr)
%figure, plottrainstate(tr)
%figure, ploterrhist(e)
%figure, plotregression(t,y)
%figure, plotresponse(t,y)
%figure, ploterrcorr(e)
%figure, plotinerrcorr(x,e)
% 提前預(yù)測(cè)網(wǎng)絡(luò)
% 利用該網(wǎng)絡(luò)進(jìn)行多步預(yù)測(cè)
% CLOSELOOP函數(shù)將反饋輸入替換為直接輸入
% 從外部層連接
nets = removedelay(net);
nets.name = [net.name ' - Predict One Step Ahead'];
view(netc)
[xs,xis,ais,ts] = preparets(nets,X,{},T);
ys = nets(xs,xis,ais);
stepAheadPerformance = perform(nets,ts,ys)
2、有x值,有y值:NARX
只有過去的輸出
如果給環(huán)境加一個(gè)風(fēng)扇,這時(shí)候有了風(fēng)速,過去時(shí)間風(fēng)速在改變,同時(shí)也在影響溫度的改變
Matlab現(xiàn)在提供時(shí)間序列預(yù)測(cè)工具箱,可以在圖形界面上進(jìn)行調(diào)參選擇,使用命令ntstool打開時(shí)間序列預(yù)測(cè)工具箱
類似股票的模型,只知道早上9:30開市到11:30的股票行情,預(yù)測(cè)11:30之后的股票行情,不考慮任何的輸入
(1)選擇模型類型

(2)選擇輸出,只有y_t

(3)選擇70%用來(lái)作為訓(xùn)練數(shù)據(jù),15%用來(lái)作為驗(yàn)證使用,15%用來(lái)測(cè)試

(4)選擇delay

(5)開始訓(xùn)練

(6)得到參數(shù)


(7)將神經(jīng)網(wǎng)絡(luò)導(dǎo)出代碼

3、無(wú)x,有y值:NAR
沒有線性的輸入輸出,很少遇到這種情況
三、總結(jié)
Matlab從2010b版本以后,使用圖形界面訓(xùn)練網(wǎng)絡(luò)調(diào)參,生成的代碼與手敲的功能無(wú)異,Matlab時(shí)間序列預(yù)測(cè)工具箱實(shí)用而且好用。
到此這篇關(guān)于Matlab實(shí)現(xiàn)時(shí)間序列預(yù)測(cè)分類的文章就介紹到這了,更多相關(guān)Matlab時(shí)間序列預(yù)測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python動(dòng)態(tài)聲明變量賦值代碼實(shí)例
這篇文章主要介紹了Python動(dòng)態(tài)聲明變量賦值代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
windows系統(tǒng)IIS部署Django項(xiàng)目的實(shí)踐
采用IIS服務(wù)器部署相比django提供的開發(fā)者服務(wù)器具有更好的并發(fā)訪問能力,性能更加穩(wěn)定,本文主要介紹了windows系統(tǒng)IIS部署Django項(xiàng)目的實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2022-03-03
Python多進(jìn)程編程技術(shù)實(shí)例分析
這篇文章主要介紹了Python多進(jìn)程編程技術(shù),包括了線程、隊(duì)列、同步等概念及相關(guān)的技巧總結(jié),需要的朋友可以參考下2014-09-09
如何將自己的python庫(kù)打包成wheel文件并上傳到pypi
這篇文章主要介紹了如何將自己的python庫(kù)打包成wheel文件并上傳到pypi,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
使用tensorflow實(shí)現(xiàn)AlexNet
這篇文章主要為大家詳細(xì)介紹了使用tensorflow實(shí)現(xiàn)AlexNet,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
python 基于Appium控制多設(shè)備并行執(zhí)行
這篇文章主要介紹了python 如何基于Appium控制多設(shè)備并行執(zhí)行,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03
使用python設(shè)置Excel工作表網(wǎng)格線的隱藏與顯示
Excel表格界面的直觀性很大程度上得益于表格中的網(wǎng)格線設(shè)計(jì),這些線條幫助用戶精確對(duì)齊數(shù)據(jù),清晰劃分單元格,本文將介紹如何使用Python設(shè)置隱藏或顯示Excel工作表的網(wǎng)格線,實(shí)現(xiàn)自動(dòng)話及批量處理,感興趣的朋友可以參考下2024-06-06
python實(shí)時(shí)獲取外部程序輸出結(jié)果的方法
今天小編就為大家分享一篇python實(shí)時(shí)獲取外部程序輸出結(jié)果的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-01-01

