【Matlab深度學習】詳解matlab深度學習進行時間序列預測

🔗?運行環境:Matlab

🚩?撰寫作者:左手の明天

🥇?精選專欄:《python》

🔥??推薦專欄:《算法研究》

🔐####?防偽水印——左手の明天?####🔐

💗 大家好🤗🤗🤗,我是左手の明天!好久不見💗

💗今天分享Matlab深度學習?——?時間序列預測💗

📆? 最近更新:2024 年 03 月 03日,左手の明天的第?316?篇原創博客

📚?更新于專欄:機器學習

🔐####?防偽水印——左手の明天?####🔐


一、LSTM 網絡

LSTM 網絡是一種循環神經網絡 (RNN),它通過遍歷時間步并更新 RNN 狀態來處理輸入數據。RNN 狀態包含在所有先前時間步中記住的信息。可以使用 LSTM 神經網絡,通過將先前的時間步作為輸入來預測時間序列或序列的后續值。要為時間序列預測訓練 LSTM 神經網絡,訓練具有序列輸出的回歸 LSTM 神經網絡,其中響應(目標)是將值移位了一個時間步的訓練序列。也就是說,在輸入序列的每個時間步,LSTM 神經網絡都學習預測下一個時間步的值。

有兩種預測方法:開環預測和閉環預測。

  • 開環預測僅使用輸入數據預測序列中的下一個時間步。對后續時間步進行預測時,需要從數據源中收集真實值并將其用作輸入。例如,假設要使用時間步 1 到?t?1?中收集的數據來預測序列的時間步?t?的值。要對時間步?t+1?進行預測,等到記錄下時間步?t?的真實值,并將其用作輸入進行下一次預測。在進行下一次預測之前,如果有可以提供給 RNN 的真實值,則請使用開環預測。

  • 閉環預測通過使用先前的預測作為輸入來預測序列中的后續時間步。在這種情況下,模型不需要真實值便可進行預測。例如,假設要僅使用在時間步 1 至?t?1?中收集的數據來預測序列的時間步?t?至?t+k?的值。要對時間步?i?進行預測,使用時間步?i?1?的預測值作為輸入。使用閉環預測來預測多個后續時間步,或在進行下一次預測之前沒有真實值可提供給 RNN 時使用閉環預測。

此圖顯示使用閉環預測的預測值的序列示例。

此示例使用 Waveform 數據集,它包含生成的 2000 個不同長度的合成波形,有三個通道。該示例訓練一個 LSTM 神經網絡,以同時使用閉環和開環預測根據先前時間步提供的值來預測波形的將來值。


二、matlab時間序列預測

2.1 加載數據

從?WaveformData.mat?加載示例數據。數據是序列的?numObservations×1 元胞數組,其中?numObservations?是序列數。每個序列都是一個?numChannels×-numTimeSteps?數值數組,其中?numChannels?是序列的通道數,numTimeSteps?是序列的時間步數。

load WaveformData

查看前幾個序列的大小。

data(1:5)
ans=5×1 cell array{3×103 double}{3×136 double}{3×140 double}{3×124 double}{3×127 double}

查看通道數。為了訓練 LSTM 神經網絡,每個序列必須具有相同數量的通道。

numChannels = size(data{1},1)
numChannels = 3

可視化繪圖中的前幾個序列。

figure
tiledlayout(2,2)
for i = 1:4nexttilestackedplot(data{i}')xlabel("Time Step")
end

將數據劃分為訓練集和測試集。將 90% 的觀測值用于訓練,其余的用于測試。

numObservations = numel(data);
idxTrain = 1:floor(0.9*numObservations);
idxTest = floor(0.9*numObservations)+1:numObservations;
dataTrain = data(idxTrain);
dataTest = data(idxTest);

2.2 準備要訓練的數據

要預測序列在將來時間步的值,請將目標指定為將值移位了一個時間步的訓練序列。也就是說,在輸入序列的每個時間步,LSTM 神經網絡都學習預測下一個時間步的值。預測變量是沒有最終時間步的訓練序列。

for n = 1:numel(dataTrain)X = dataTrain{n};XTrain{n} = X(:,1:end-1);TTrain{n} = X(:,2:end);
end

為了更好地擬合并防止訓練發散,請將預測變量和目標值歸一化為零均值和單位方差。在進行預測時,還必須使用與訓練數據相同的統計量對測試數據進行歸一化。要輕松計算所有序列的均值和標準差,請在時間維度中串聯這些序列。

muX = mean(cat(2,XTrain{:}),2);
sigmaX = std(cat(2,XTrain{:}),0,2);muT = mean(cat(2,TTrain{:}),2);
sigmaT = std(cat(2,TTrain{:}),0,2);for n = 1:numel(XTrain)XTrain{n} = (XTrain{n} - muX) ./ sigmaX;TTrain{n} = (TTrain{n} - muT) ./ sigmaT;
end

2.3 定義 LSTM 神經網絡架構

創建一個 LSTM 回歸神經網絡。

  • 使用輸入大小與輸入數據的通道數匹配的序列輸入層。

  • 接下來,使用一個具有 128 個隱藏單元的 LSTM 層。隱藏單元的數量確定該層學習了多少信息。使用更多隱藏單元可以產生更準確的結果,但也更有可能導致訓練數據過擬合。

  • 要輸出通道數與輸入數據相同的序列,請包含一個輸出大小與輸入數據通道數匹配的全連接層。

  • 最后,包括一個回歸層。

layers = [sequenceInputLayer(numChannels)lstmLayer(128)fullyConnectedLayer(numChannels)regressionLayer];

2.4 指定訓練選項

指定訓練選項。

  • 使用 Adam 優化進行訓練。

  • 進行 200 輪訓練。對于較大的數據集,您可能不需要像良好擬合那樣進行這么多輪訓練。

  • 在每個小批量中,對序列進行左填充,使它們具有相同的長度。左填充可以防止 RNN 預測序列末尾的填充值。

  • 每輪訓練都會打亂數據。

  • 在繪圖中顯示訓練進度。

  • 禁用詳盡輸出。

options = trainingOptions("adam", ...MaxEpochs=200, ...SequencePaddingDirection="left", ...Shuffle="every-epoch", ...Plots="training-progress", ...Verbose=0);

2.5 訓練循環神經網絡

使用?trainNetwork?函數以指定的訓練選項訓練 LSTM 神經網絡。

net = trainNetwork(XTrain,TTrain,layers,options);

2.6 測試循環神經網絡

使用與訓練數據相同的步驟準備用于預測的測試數據。

使用從訓練數據計算出的統計量來歸一化測試數據。將目標指定為值移位了一個時間步的測試序列,將預測變量值指定為沒有最終時間步的測試序列。

for n = 1:size(dataTest,1)X = dataTest{n};XTest{n} = (X(:,1:end-1) - muX) ./ sigmaX;TTest{n} = (X(:,2:end) - muT) ./ sigmaT;
end

使用測試數據進行預測。指定與訓練相同的填充選項。

YTest = predict(net,XTest,SequencePaddingDirection="left");

為了計算準確度,對于每個測試序列,請計算預測和目標之間的均方根誤差 (RMSE)。

for i = 1:size(YTest,1)rmse(i) = sqrt(mean((YTest{i} - TTest{i}).^2,"all"));
end

在直方圖中可視化誤差。值越低,表示準確度越高。

figure
histogram(rmse)
xlabel("RMSE")
ylabel("Frequency")

計算所有測試觀測值的 RMSE 均值。

mean(rmse)
ans = single0.5080

2.7 預測將來時間步

給定輸入時間序列或序列,要預測多個將來時間步的值,請使用?predictAndUpdateState?函數一次預測一個時間步,并在每次預測時更新 RNN 狀態。對于每次預測,使用前一次預測作為函數的輸入。

在繪圖中可視化其中一個測試序列。

idx = 2;
X = XTest{idx};
T = TTest{idx};figure
stackedplot(X',DisplayLabels="Channel " + (1:numChannels))
xlabel("Time Step")
title("Test Observation " + idx)

開環預測

開環預測僅使用輸入數據預測序列中的下一個時間步。對后續時間步進行預測時,需要從數據源中收集真實值并將其用作輸入。例如,假設您要使用時間步 1 到?t?1?中收集的數據來預測序列的時間步?t?的值。要對時間步?t+1?進行預測,請等到記錄下時間步?t?的真實值,并將其用作輸入進行下一次預測。在進行下一次預測之前,如果有可以提供給 RNN 的真實值,則請使用開環預測。

首先使用?resetState?函數重置狀態來初始化 RNN 狀態,然后使用輸入數據的前幾個時間步進行初始預測。使用輸入數據的前 75 個時間步更新 RNN 狀態。

net = resetState(net);
offset = 75;
[net,~] = predictAndUpdateState(net,X(:,1:offset));

要進行進一步的預測,請遍歷時間步并使用?predictAndUpdateState?函數更新 RNN 狀態。通過遍歷輸入數據的時間步并將其用作 RNN 的輸入,預測測試觀測值的其余時間步的值。第一個預測是對應于時間步?offset + 1?的值。

numTimeSteps = size(X,2);
numPredictionTimeSteps = numTimeSteps - offset;
Y = zeros(numChannels,numPredictionTimeSteps);for t = 1:numPredictionTimeStepsXt = X(:,offset+t);[net,Y(:,t)] = predictAndUpdateState(net,Xt);
end

將預測值與目標值進行比較。

figure
t = tiledlayout(numChannels,1);
title(t,"Open Loop Forecasting")for i = 1:numChannelsnexttileplot(T(i,:))hold onplot(offset:numTimeSteps,[T(i,offset) Y(i,:)],'--')ylabel("Channel " + i)
endxlabel("Time Step")
nexttile(1)
legend(["Input" "Forecasted"])

閉環預測

閉環預測通過使用先前的預測作為輸入來預測序列中的后續時間步。在這種情況下,模型不需要真實值便可進行預測。例如,假設您要僅使用在時間步 1 至?t?1?中收集的數據來預測序列的時間步?t?至?t+k?的值。要對時間步?i?進行預測,請使用時間步?i?1?的預測值作為輸入。使用閉環預測來預測多個后續時間步,或在進行下一次預測之前沒有真實值可提供給 RNN 時使用閉環預測。

首先使用?resetState?函數重置狀態來初始化 RNN 狀態,然后使用輸入數據的前幾個時間步進行初始預測?Z。使用輸入數據的所有時間步更新 RNN 狀態。

net = resetState(net);
offset = size(X,2);
[net,Z] = predictAndUpdateState(net,X);

要進行進一步的預測,請遍歷時間步并使用?predictAndUpdateState?函數更新 RNN 狀態。通過將先前的預測值迭代傳遞給 RNN 來預測接下來的 200 個時間步。由于 RNN 不需要輸入數據來進行任何進一步的預測,因此可以指定任意數量的時間步來進行預測。

numPredictionTimeSteps = 200;
Xt = Z(:,end);
Y = zeros(numChannels,numPredictionTimeSteps);for t = 1:numPredictionTimeSteps[net,Y(:,t)] = predictAndUpdateState(net,Xt);Xt = Y(:,t);
end

在繪圖中可視化預測值。

numTimeSteps = offset + numPredictionTimeSteps;figure
t = tiledlayout(numChannels,1);
title(t,"Closed Loop Forecasting")for i = 1:numChannelsnexttileplot(T(i,1:offset))hold onplot(offset:numTimeSteps,[T(i,offset) Y(i,:)],'--')ylabel("Channel " + i)
endxlabel("Time Step")
nexttile(1)
legend(["Input" "Forecasted"])

閉環預測允許您預測任意數量的時間步,但與開環預測相比,其準確度可能會降低,因為 RNN 在預測過程中不會訪問真實值。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718519.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718519.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718519.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

bat文件的外部參數

bat執行時有兩種獲得參數的方法,一種是執行時在命令行中輸入,一種是運行時從鍵盤輸入。 從命令行輸入參數,使用兩個%中間包含數字表示,數字從1至9,命令行參數最多為9個。示例: echo off echo show %1%鍵盤…

力扣——盛最多水的容器

題目描述: 給定一個長度為 n 的整數數組 height 。有 n 條垂線,第 i 條線的兩個端點是 (i, 0) 和 (i, height[i]) 。 找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。 返回容器可以儲存的最大水量。 說明:…

最短路徑(2.19)

目錄 1.網絡延遲時間 弗洛伊德算法 迪杰斯特拉算法 2. K 站中轉內最便宜的航班 3.從第一個節點出發到最后一個節點的受限路徑數 4.到達目的地的方案數 1.網絡延遲時間 有 n 個網絡節點,標記為 1 到 n。 給你一個列表 times,表示信號經過 有向 邊的…

day32貪心算法 part02

貪心系列的時候,題目和題目之間貌似沒有什么聯系,是真的就是沒什么聯系,因為貪心無套路,沒有個整體的貪心框架解決一系列問題,只能是接觸各種類型的題目鍛煉自己的貪心思維。貪心只是一類題的統稱,并沒有什么固定套路。 122. 買賣…

Android NDK底層BUG,記錄:connect、socket(AF_INET, SOCK_STREAM, 0) 等系統套接字接口函數崩潰問題。

在 Android NDK 之中,看上去調用 connect、socket 函數是不會崩潰的,但這是否定的,它在特定的情況下存在必定的崩潰的問題。 但是這種情況放到MACOS、LINUX、WINDOWS都不會崩潰,而它崩潰的點出現在操作系統底層。 人們需要參考這…

香橙派企業信用問題-勸一個是一個,別買!!!

1. 背景 香橙派推廣旗下AI PRO 開發板,在B站做直播,一場直播兩個直播間,分別抽取一名觀眾,宣傳是場場送AI PRO開發板!!! 2. 收到獎品與宣傳不符合 3.咨詢群主:態度很傲慢&#xff0c…

MES的生產計劃管理與ERP的生產計劃管理到底有什么不同?

在制造業信息化的道路上,ERP系統和MES系統是兩個非常重要的信息化管理工具。大多數制造業企業往往首先考慮上ERP系統,經過一段時間的深度使用后,再引進MES系統進行報工或數采。但我們可以發現,這兩個系統都能進行生產管理&#xf…

數學建模團隊分工建議

文章目錄 引言數學建模概述數學建模團隊的組成與角色定位一、團隊組成與角色定位1.1 團隊成員1.2 角色定位 二、團隊協作方式 分工方案分工原則分工策略 按照任務流程分工數據收集與處理分工模型建立與優化分工結果分析與報告撰寫分工用代碼來表示這個過程 總結模塊目錄模塊一&…

詳細了解網絡通信流程、協議組成、編碼方式、數據傳輸方式和途徑、Http 協議的編碼、cookie的使用和提取路徑

詳細了解網絡通信流程、協議組成、編碼方式、數據傳輸方式和途徑、Http 協議的編碼、cookie的使用和提取路徑。 一、網絡通信簡介 現代的網絡傳輸介質以以太網鏈路居多,完整的網絡數據報結構大致如下。傳輸層及其以下的機制由操作系統內核提供,應用層由用戶進程提供,應用程…

上位機圖像處理和嵌入式模塊部署(qmacvisual學習1)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】 雖然我們前面學習了很多的知識點,比如說在windows這邊,用qt寫界面,用opencv寫圖像處理代碼;在linux…

二維碼門樓牌管理系統技術服務:構建智慧城市的基石

文章目錄 前言一、標準地址設置規則二、門樓牌作為標準地址的法定載體三、二維碼門樓牌管理系統技術服務的優勢與應用前景 前言 在智慧城市建設的浪潮中,二維碼門樓牌管理系統技術服務以其高效、便捷的特性,逐漸成為城市管理的重要工具。本文將深入探討…

一張草圖直接生成視頻游戲,谷歌推出生成交互大模型

谷歌DeepMind的研究人員推出了,首個無需數據標記、無監督訓練的生成交互模型——Generative Interactive Environments,簡稱“Genie”。 Genie有110億參數,可以根據圖像、真實照片甚至草圖,就能生成各種可控制動作的視頻游戲。Ge…

項目可行性方案:人臉識別實現無感考勤的項目技術可行性方案

目 錄 1.引言 1.1編寫目的 1.2背景 2.可行性研究的前提 2.1要求 2.2目標 3.對現有系統的分析 3.1系統改進示意圖 3.2改進之處 3.3技術條件方面的可行性 4.結論 1.引言 1.1編寫目的 本報告編寫的目的是探究學校里對教室和辦公室內教師的人臉進行識別從而…

Linux --- 應用層 | HTTP | HTTPS

前言 前面寫的TCP/UDP客戶端在訪問服務端的時候,需要輸入ip地址和端口號才可以訪問, 但在現實中,我們訪問一個網站是直接輸入的一個域名,而不是使用的ip地址端口號。 比如在訪問百度 https://www.baidu.com/的時候, …

RocketMQ - 深入研究一下消費者是如何獲取消息處理以及進行ACK

1. 消費者組到底是個什么概念 消費者組的意思就是讓你給一組消費者起一個名字,比如有一個Topic叫“TopicOrderPaySuccess”,然后假設有庫存系統、積分系統、營銷系統、倉儲系統他們都要去消費這個Topic中的數據。 此時我們應該給這四個系統分別起一個消費組的名字,比如sto…

Linux:管道文件及相關API

目錄 前言一、管道文件1、基本概念2、匿名(無名)管道3、命名(有名)管道4、管道的特點5、思考:何時只能使用無名管道,何時又只能用有名管道?無名管道(匿名管道)適用的情況:有名管道(命名管道&…

2024最新AI系統ChatGPT網站源碼, AI繪畫系統

一、前言說明 R5Ai創作系統是基于ChatGPT進行開發的Ai智能問答系統和Midjourney繪畫系統,支持OpenAI-GPT全模型國內AI全模型。本期針對源碼系統整體測試下來非常完美,那么如何搭建部署AI創作ChatGPT?小編這里寫一個詳細圖文教程吧。已支持GP…

CVE-2024-23334 AIOHTTP 目錄遍歷漏洞分析

漏洞描述: aiohttp 是一個用于 asyncio 和 Python 的異步 HTTP 客戶端/服務器框架。使用aiohttp作為Web服務器并配置靜態路由時,需要指定靜態文件的根路徑。此外,選項“follow_symlinks”可用于確定是否遵循靜態根目錄之外的符號鏈接。當“f…

css樣式元素的相對定位,絕對定位,固定定位等元素定位運用技巧詳解

文章目錄 1.相對定位 relative2.絕對定位 absolute3.固定定位4.display 轉換元素5.float浮動6.float產生內容塌陷問題7.overflow CSS樣式學習寶典,關注點贊加收藏,防止迷路哦 在CSS中關于定位的內容是:position:relative | absolute | static…

Unreal觸屏和鼠標控制旋轉沖突問題

Unreal觸屏和鼠標控制旋轉沖突問題 鼠標控制攝像機旋轉添加Input軸計算旋轉角度通過軸事件控制旋轉 問題和原因問題原因 解決辦法增加觸摸控制旋轉代碼觸屏操作下屏蔽鼠標軸響應事件 鼠標控制攝像機旋轉 通過Mouse X和Mouse Y控制攝像機旋轉。 添加Input軸 計算旋轉角度 通過…