【Python時序預測系列】基于CNN+Bi-LSTM實現單變量時間序列預測(案例+源碼)

這是我的第309篇原創文章。

一、引言

基于CNN(卷積神經網絡)和Bi-LSTM(雙向長短期記憶網絡)的單變量時間序列預測是一種結合空間特征提取和時間依賴建模的方法。以下是一個基于Python和TensorFlow/Keras實現的示例,展示了如何構建和訓練這種混合模型來進行時間序列預測。

二、實現過程

2.1 讀取數據集

# 讀取數據集
data = pd.read_csv('data.csv')
# 將日期列轉換為日期時間類型
data['Month'] = pd.to_datetime(data['Month'])
# 將日期列設置為索引
data.set_index('Month',?inplace=True)

data:

圖片

2.2 劃分數據集

#?拆分數據集為訓練集和測試集
train_size = int(len(data) * 0.8)
train_data = data[:train_size]
test_data = data[train_size:]# 繪制訓練集和測試集的折線圖
plt.figure(figsize=(10, 6))
plt.plot(train_data, label='Training Data')
plt.plot(test_data, label='Testing Data')
plt.xlabel('Year')
plt.ylabel('Passenger Count')
plt.title('International Airline Passengers - Training and Testing Data')
plt.legend()
plt.show()

共144條數據,8:2劃分:訓練集115,測試集29。

訓練集和測試集:

圖片

2.3 歸一化

# 將數據歸一化到 0~1 范圍
scaler = MinMaxScaler()
train_data_scaler = scaler.fit_transform(train_data.values.reshape(-1, 1))
test_data_scaler?=?scaler.transform(test_data.values.reshape(-1,?1))

2.4 構造數據集

# 定義滑動窗口函數
def create_dataset(data, look_back=1):pass# 定義滑動窗口大小
window_size?=?3
# 創建滑動窗口數據集
X_train, Y_train = create_dataset(train_data_scaler, look_back)
X_test,?Y_test?=?create_dataset(test_data_scaler,?look_back)

2.5 建立模擬合模型進行預測

#?構建模型
model = Sequential()
model.add(TimeDistributed(Conv1D(filters=64, kernel_size=1, activation='relu', input_shape=(None, X_train.shape[0],  X_train.shape[1],1))))
model.add(TimeDistributed(MaxPooling1D(pool_size=1)))
model.add(TimeDistributed(...))
model.add(Bidirectional(LSTM(4, activation='relu')))
model.add(Dense(1))my_model.compile(loss='mean_squared_error', optimizer='adam')
my_model.fit(X_train, Y_train, epochs=50, batch_size=1, verbose=2)
# 打印模型
model.summary()# 使用模型進行預測
train_predictions = model.predict(X_train)
test_predictions?=?model.predict(X_test)

test_predictions:

圖片

2.6 預測效果展示

# 繪制測試集預測結果的折線圖
plt.figure(figsize=(10, 6))
plt.plot(test_data, label='Actual')
plt.plot(list(test_data.index)[-len(test_predictions):], test_predictions, label='Predicted')
plt.xlabel('Month')
plt.ylabel('Passengers')
plt.title('Actual vs Predicted')
plt.legend()
plt.show()

測試集真實值與預測值:

圖片

# 繪制原始數據、訓練集預測結果和測試集預測結果的折線圖
plt.figure(figsize=(10, 6))
plt.plot(data, label='Actual')
plt.plot(list(train_data.index)[look_back:train_size], train_predictions, label='Training Predictions')
plt.plot(list(test_data.index)[-(len(test_data)-look_back):], test_predictions, label='Testing Predictions')
plt.xlabel('Year')
plt.ylabel('Passenger Count')
plt.title('International Airline Passengers - Actual vs Predicted')
plt.legend()
plt.show()

原始數據、訓練集預測結果和測試集預測結果:

圖片

作者簡介:

讀研期間發表6篇SCI數據挖掘相關論文,現在某研究院從事數據算法相關科研工作,結合自身科研實踐經歷不定期分享關于Python、機器學習、深度學習、人工智能系列基礎知識與應用案例。致力于只做原創,以最簡單的方式理解和學習,關注我一起交流成長。需要數據集和源碼的小伙伴可以關注底部公眾號添加作者微信。

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

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

相關文章

C++ 高頻面試題

C 初級面試題及其詳細解答 1. 解釋 C 中的基本數據類型。 解答: C 提供了幾種基本數據類型,包括: int:整型,用于存儲整數。float 和 double:浮點型,用于存儲小數。char:字符型&am…

Android 強制使用移動網絡訪問接口

Android 強制使用移動網絡訪問接口_安卓連接wifi強制使用移動數據-CSDN博客 Android應用層實現恢復出廠設置功能_android7 intent 打開恢復出廠設置-CSDN博客

YOLOv8改進 | 主干網絡| 可變形卷積網絡C2f_DCN【CVPR2017】

💡💡💡本專欄所有程序均經過測試,可成功執行💡💡💡 專欄目錄:《YOLOv8改進有效漲點》專欄介紹 & 專欄目錄 | 目前已有40篇內容,內含各種Head檢測頭、損失函數Loss、B…

java SQL server 多實例的情況

而對于java,對付多個數據庫實例就有些要注意的了: 首先,同樣連接字符串上加上“\實例名”: jdbc:sqlserver://127.0.0.1\\mssqlserver2008;DatabaseNameLPT; 此處應去掉端口1433。因為連接數據庫自命名實例的url中沒有端口號1433…

SiLM585x系列SiLM5851NHCG-DG一款具有分離的管腳輸出 單通道隔離驅動器 擁有強勁的驅動能力

SiLM585x系列SiLM5851NHCG-DG是一款單通道隔離驅動器,具有分離的管腳輸出,提供3.0A源電流和6.0A灌電流。主動保護功能包括退飽和過流檢測、UVLO、隔離故障報警和 2.5A 米勒鉗位。輸入側電源的工作電壓為3V至5.5V,輸出側電源的工作電壓范圍為1…

獨孤思維:研發的新賺錢項目,活脫脫掉了幾層皮

01 今天有個讀者問我,xx項目,成功概率多少? 其實這和做這個項目,能賺多少錢,本質是一個問題。 即,有多大的確定性。 言外之意,沒有確定性,不穩定,我就不做了。 可以…

一位軟件測試工程師繁忙的一天

早晨:啟動一天的工作 7:00 AM - 起床 早晨七點準時起床。洗漱、早餐后,檢查了手機上的郵件和消息,了解今天的工作安排和優先事項。 8:00 AM - 前往公司 乘坐地鐵前往公司。在地鐵上,他習慣性地閱讀一些技術博客,了解…

小柴沖刺嵌入式系統設計師系列總目錄

工作兩年 逐漸意識到基礎知識的重要性?? 意識到掌握了這個證書好像就已經掌握了80%工作中用到的知識了。剩下的就在工作的實戰中學習 來和小柴一起沖刺軟考吧!加油😜 【小柴沖刺軟考中級嵌入式系統設計師系列】總目錄 前言 專欄目標:沖刺…

涵蓋多項功能的文件外發系統,了解一下

伴隨著業務范圍的不斷擴大,信息化的迅速發展,企業與客戶、供應商等合作伙伴之間的文件交換也愈加頻繁,尤其涉及到核心數據,像核心技術、設計圖紙等敏感數據,對其的保護也是越發重視。文件外發系統,應運而生…

Linux基礎 - RAID 與 LVM 磁盤陣列技術

目錄 零. 簡介 一. RAID 二. LVM 三. 總結 零. 簡介 在 Linux 中,RAID(Redundant Array of Independent Disks,獨立磁盤冗余陣列)和 LVM(Logical Volume Manager,邏輯卷管理器)是兩種常用的…

機械繼電器、固態繼電器和模擬開關對比分析

1 結構 2 長期可靠性 與機械繼電器相比,光繼電器明顯提高了可靠性,因為沒有活動器件。 光繼電器通過 LED 進行光學控制。通常情況下,此 LED 會隨著時間的推移比開關本身更快地降級,具體取決于溫度、正向電流、開關速度等。隨著 LE…

群輝NAS使用Kodi影視墻

目錄 一、KODI安裝 二、修改UI語言 1、修改顯示字體 2、修改語言為中文 四、添加媒體庫 五、觀看電影 五、高級設置 1、視圖類型 2、修改點擊播動作 五、補充 1、文件組織結構及命名 2、電影信息的刮削 (1)添加影片 (2)演員管理 (3)影片管理 (4)說明 K…

【面試題】消息中間件

目錄 1.什么是消息中間件?它在分布式系統中的作用是什么?2.列舉并簡述幾種常見的消息隊列(MQ)產品,比如RabbitMQ, Kafka, ActiveMQ, RocketMQ等。3.描述一下點對點(PTP)和發布/訂閱(…

基于opencv的圖像拼接

利用Python的OpenCV庫實現了簡單的圖像拼接,示例 1. 圖像拼接的基本原理 圖像拼接主要包括以下幾個步驟: 特征檢測與匹配:首先,需要在待拼接的圖像之間找到匹配的關鍵點或特征。OpenCV提供了如SIFT、SURF、ORB等特征提取器以及…

嵌入式EMC之TVS管

整理一些網上摘抄的筆記: TVS管認識: TVS的Vc要比,DCDC的最大承受電壓要小

Flexbox布局詳解

Flexbox布局詳解:現代CSS布局的利器 在現代Web開發中,布局是一個至關重要的部分。傳統的布局方式,如浮動和定位,雖然可以實現復雜的布局,但往往需要大量的CSS代碼,并且在維護和擴展時容易出現問題。Flexbo…

web前端大作業--美團外賣1

文章目錄 概述代碼截圖代碼鏈接 概述 web美團 登錄和注冊功能、頁面展示。 代碼 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><link rel"stylesheet" href&quo…

Vue組件生命周期深度剖析:從創建到銷毀的八大鉤子實戰指南

系列文章目錄 Vue核心指令解析&#xff1a;探索MVVM與數據操作之美 文章目錄 系列文章目錄前言一、Vue生命周期是什么&#xff1f;二、鉤子函數講解1. beforeCreate( 創建前 )2. created ( 創建后 &#xff09;3. beforeMount&#xff08;掛載前&#xff09;4. mounted&#xf…

Redis-數據類型-Geospatial(地理空間索引)

文章目錄 1、查看redis是否啟動2、通過客戶端連接redis3、切換到db5數據庫4、將地理位置信息&#xff08;經度和緯度&#xff09;添加到 Redis 的鍵&#xff08;key&#xff09;中4.1、添加大江商廈4.2、添加西部硅谷 5、升序返回有序集key&#xff0c;讓分數一起和值返回的結果…

簡約的服務器監控工具Ward

什么是 Ward &#xff1f; Ward 是一個簡單簡約的服務器監控工具。 Ward 支持自適應設計系統。此外&#xff0c;它還支持深色主題。它僅顯示主要信息&#xff0c;如果您想查看漂亮的儀表板而不是查看一堆數字和圖表&#xff0c;則可以使用它。 Ward 在所有流行的操作系統上都能…