基于CNN的股票預測方法【卷積神經網絡】

基于機器學習方法的股票預測系列文章目錄

一、基于強化學習DQN的股票預測【股票交易】
二、基于CNN的股票預測方法【卷積神經網絡】


文章目錄

  • 基于機器學習方法的股票預測系列文章目錄
  • 一、CNN建模原理
  • 二、模型搭建
  • 三、模型參數的選擇
    • (1)探究`window_size`的影響
    • (2)探究`kernel_size`的影響
    • (3)探究探究模型結構的影響
    • (4) 模型擬合效果
  • 四、數據處理
    • (1)數據變換
    • (2)Kalman濾波
  • 五、參考資料


本文探討了利用卷積神經網絡(CNN)進行股票預測的建模方法,并詳細介紹了模型的搭建、參數選擇以及數據處理方法。盡管序列建模通常與遞歸神經網絡(如LSTM和GRU)相關,但本文展示了如何使用CNN進行時間序列數據的預測,完整代碼放在GitHub上——Stock-Prediction-Using-Machine-Learing.

一、CNN建模原理

深度學習背景下的序列建模主題主要與遞歸神經網絡架構(如LSTM和GRU)有關,但事實上CNN也可以用于對序列數據的建模。與處理圖像所用的二維卷積不同,處理時間序列可以使用一維卷積,用多個以前的數據序列預測下一時刻。如下圖所示,Input_length是指定用幾個以前的數據來預測下一天的股票價格,用一個一個卷積核來滑動提取特征,最后通過一個線性層得到輸出的預測值,具體網絡搭建見下一小節。

截屏2022-05-23 下午8.22.12

其中兩個關鍵的參數是:

  1. Input_length: 用幾個以前的數據作為輸入,來預測下一時刻。(在后文稱為Window_size)
  2. Kernel_size: 卷積核大小。

事實上也可以用二維的卷積和來建模,比如輸入可以是多只股票,用二維卷積核對多只股票同時建模預測,或者將一只股票的多個特征同時建模預測,本文僅探究用股票的收盤價來預測未來的股票收盤價格,沒有利用股票數據的其他技術指標。

二、模型搭建

基于Pytorch深度學習框架,搭建的CNN網絡如下所示:

kernel_size=2   #一維卷積核大小class CNNmodel(nn.Module):def __init__(self):super(CNNmodel, self).__init__()self.conv1 = nn.Conv1d(1, 64, kernel_size=kernel_size)   #1xkersize的卷積核 #self.conv2 = nn.Conv1d(64,128,1)self.relu = nn.ReLU(inplace=True)self.Linear1 = nn.Linear(64*(window_size-kernel_size+1), 10)self.Linear2 = nn.Linear(10, 1)def forward(self, x):x = self.conv1(x)x = self.relu(x)x = x.view(-1)x = self.Linear1(x)x = self.relu(x)x = self.Linear2(x)return xmodel = CNNmodel()
print(model)

選用relu函數作為激勵函數,因為股票都是正數,而relu函數的性質,可以很好的避免模型輸出值為負值。

三、模型參數的選擇

(1)探究window_size的影響

調節CNN模型中window_size參數,并比較不同window_size下訓練集與測試集的相對誤差率,結果如下表所示:

window_size訓練集相對誤差率測試集相對誤差率
52.22%2.18%
61.69%1.48%
72.30%2.27%
82.36%2.12%
151.65%1.58%
202.01%2.03%
502.37%2.55%
150 (kernel_size=40)3.21%2.72%

分析上表知:

  1. 不同window_size對結果有一定影響
  2. window_size比較大時,誤差很大
  3. 在10左右,效果比較好,最終我們選擇 window_size=6

(2)探究kernel_size的影響

調節CNN模型中kernel_size參數,并比較不同kernel_size下訓練集與測試集的相對誤差率,結果如下表所示(window_size=6):

Kernel_size訓練集相對誤差率測試集相對誤差率
21.69%1.48%
31.76%1.58%
41.82%1.94%
51.90%1.73%

分析上表數據知較小的kernel_size能使相對誤差率更小,最終我們選擇kernel_size=2。

(3)探究探究模型結構的影響

調節CNN模型中模型結構,并比較不同模型結構下的平均誤差和平均相對誤差率,結果如下表所示:

模型結構平均誤差平均相對誤差率
兩個卷積層0.522.46%
1個卷積層,線性層1000.462.29%
1個卷積層,線性層100.281.38%

由上表知,模型對學習率十分敏感;模型結構過于復雜,不容易學習,且容易過擬合。

(4) 模型擬合效果

通過以上探究得到的模型結構以及參數,以AAPL股票為例,采用原始數據進行訓練,其預測結果如下圖所示:

截屏2022-05-29 下午10.55.49

由上圖知,以原始數據進行訓練有不錯的擬合效果,但滯后比較明顯,神經網絡會“偷懶”,這是因為數據序列中產生了變化趨勢,而基于滑動時間窗口策略的對發生變化趨勢的數據感知是滯后的。

對測試集進行預測:

截屏2022-05-29 下午10.34.21

四、數據處理

(1)數據變換

為了解決預測過程中出現的“滯后”問題,常常對原始數據進行一定的處理。常見的數據處理方法有:

  1. 數據歸一化
  2. 不直接給出希望模型預測的未經處理的真實值,對輸入樣本進行非線性化的處理如,如:平方、開根號、ln等
  3. 差分,預測時間t和t-1處值的差異,而不是直接預測t時刻的值

如以AAPL股票數據為例,對其收盤價取其平方的對數進行訓練,最終的預測效果如下圖所示:

與上一小節的圖對比知,“滯后”現象得到顯著的減弱,模型的可信度更好。

(2)Kalman濾波

卡爾曼濾波(Kalman filtering)是一種利用線性系統狀態方程,通過系統輸入輸出觀測數據,對系統狀態進行最優估計的算法。由于觀測數據中包括系統中的噪聲和干擾的影響,所以最優估計也可看作是濾波過程。

Kalman濾波原理及數理處理過程如下:

  1. 給定初始估計值、系統輸入、初始協方差矩陣和誤差的方差 Q Q Q, 首先要計算預測值、預測值和真實值之間誤差協方差矩陣:

X ^ k ′ = A X ^ k ? 1 + B u k ? 1 P k ′ = A P k ? 1 A T + Q \begin{aligned} &\hat{X}_{k}^{\prime}=A \hat{X}_{k-1}+B u_{k-1} \\ &P_{k}^{\prime}=A P_{k-1} A^{T}+Q \end{aligned} ?X^k?=AX^k?1?+Buk?1?Pk?=APk?1?AT+Q?

  1. 然后根據 P k ′ P_{k}^{\prime} Pk? 計算卡爾曼增益 K k K_{k} Kk? :

K k = P k ′ H T ( H P k ′ H T + R ) ? 1 K_{k}=P_{k}^{\prime} H^{T}\left(H P_{k}^{\prime} H^{T}+R\right)^{-1} Kk?=Pk?HT(HPk?HT+R)?1

  1. 然后根據卡爾曼增益 K k K_{k} Kk? X ^ k ′ \hat{X}_{k}{ }^{\prime} X^k? 以及測量值 Z k Z_{k} Zk?, 調和平均得到估計值:

X ^ k = X ^ k ′ + K k ( Z k ? H X ^ k ′ ) \hat{X}_{k}=\hat{X}_{k}^{\prime}+K_{k}\left(Z_{k}-H \hat{X}_{k}^{\prime}\right) X^k?=X^k?+Kk?(Zk??HX^k?)

  1. 最后還要計算估計值和真實值之間的誤差協方差矩陣, 為下次遞推做準備:

P k = ( I ? K k H ) P k ′ P_{k}=\left(I-K_{k} H\right) P_{k}^{\prime} Pk?=(I?Kk?H)Pk?

以AAPL股票數據為例,對其收盤價進行kalman濾波后,以CNN模型進行訓練,結果如下圖所示:

截屏2022-05-29 下午10.59.48

與圖3對比可知,圖3中平均誤差為0.11,相對誤差率為2.30%,采用kalman濾波后,平均誤差為0.08,相對誤差率為1.71%,效果變好。

通過前面2種不同數據處理方法對不同模型效果的影響,我們可以看到,不同數據處理方法對不同模型的影響不一樣,但總的來說對數據進行相應的處理后,能夠提升模型的性能。而通過實驗我們發現Kalman濾波進行數據處理后,模型效果有顯著的提升。

五、參考資料

  1. 王宇軒.基于卷積神經網絡的股票預測[D].天津工業大學,2019.

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

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

相關文章

下代iPhone或回歸可拆卸電池,蘋果這操作把我看傻了

剛度過一個愉快的周末,蘋果又雙叒叕攤上事兒了。 iPhone13 系列被曝扎堆電池鼓包了。 早在去年,就有 iPhone13 和 iPhone14 用戶反饋過類似的問題,表示在手機僅僅使用了一年多的時間就出現了電池鼓包的情況,而且還把屏幕給撐起來了…

舞會無領導:一種樹形動態規劃的視角

沒有上司的舞會 Ural 大學有 𝑁 名職員,編號為1~𝑁。 他們的關系就像一棵以校長為根的樹,父節點就是子節點的直接上司。 每個職員有一個快樂指數,用整數 𝐻𝑖 給出,其中1≤&…

校園卡手機卡怎么注銷?

校園手機卡的注銷流程可以根據不同的運營商和具體情況有所不同,但一般來說,以下是注銷校園手機卡的幾種常見方式,我將以分點的方式詳細解釋: 一、線上注銷(通過手機APP或官方網站) 下載并打開對應運營商的…

C++ 指針介紹

指針是C編程語言中的一個強大且重要的特性。它允許程序員直接操作內存地址,從而提供了對低級別內存的訪問和控制。雖然指針在使用時可能比較復雜且容易出錯,但它們在提高程序效率和靈活性方面有著不可替代的作用。本文將介紹C指針的基本概念、用法及其應…

Docker 中 MySQL 遷移策略(單節點)

目錄 一、 簡介二、操作流程2.1 進入mysql容器2.2 導出 MySQL 數據2.3. 將導出的文件復制到宿主機2.4 創建 Docker Compose 配置2.5 啟動新的 Docker 容器2.6 導入數據到新的容器2.7 驗證數據2.8 刪除舊的容器(刪除操作需慎重) 三、推薦配置四、寫在后面…

當年很多跑到美加澳寫代碼的人現在又移回香港?什么原因?

當年很多跑到美加澳寫代碼的人現在又移回香港?什么原因? 近年來,確實有部分曾經移民到美國、加拿大、澳大利亞等地的香港居民選擇移回香港。這一現象與多種因素相關,主要可以歸結為以下幾點: 疫情后的環境變化&#…

【STM32】溫濕度采集與OLED顯示

一、任務要求 1. 學習I2C總線通信協議,使用STM32F103完成基于I2C協議的AHT20溫濕度傳感器的數據采集,并將采集的溫度-濕度值通過串口輸出。 任務要求: 1)解釋什么是“軟件I2C”和“硬件I2C”?(閱讀野火配…

2025第13屆常州國際工業裝備博覽會招商全面啟動

常州智造 裝備中國|2025第13屆常州國際工業裝備博覽會招商全面啟動 2025第13屆常州國際工業裝備博覽會將于2025年4月11-13日在常州西太湖國際博覽中心盛大舉行!目前,各項籌備工作正穩步推進。 60000平米的超大規模、800多家國內外工業裝備制造名企將云集…

C++中的RAII(資源獲取即初始化)原則

C中的RAII(Resource Acquisition Is Initialization,資源獲取即初始化)原則是一種管理資源、避免資源泄漏的慣用法。RAII是C之父Bjarne Stroustrup提出的設計理念,其核心思想是將資源的獲取(如動態內存分配、文件句柄、…

最細最有條理解析:事件循環(消息循環)是什么?進程與線程的定義、關系與差異

目錄 事件循環:引入 一、瀏覽器的進程模型 1.1、什么是進程(Process) 1.2、什么是線程(Thread) 1.3、進程與線程之間的關系聯系與區別 二、瀏覽器有哪些進程和線程 2.1、瀏覽器的主要進程 ①瀏覽器進程 ②網絡…

ctfshow sqli-libs web561--web568

web561 ?id-1 or 1--?id-1 union select 1,2,3--?id-1 union select 1,(select group_concat(column_name) from information_schema.columns where table_nameflags),3-- Your Username is : id,flag4s?id-1 union select 1,(select group_concat(flag4s) from ctfshow.f…

擴展學習|風險評估和風險管理:回顧其基礎上的最新進展

文獻來源:[1]Aven, T. (2016). Risk assessment and risk management: Review of recent advances on their foundation. European journal of operational research, 253(1), 1-13. 文章簡介:大約30-40年前,風險評估和管理被確立為一個科學領…

數據結構 - C/C++ - 鏈表

目錄 結構特性 內存布局 結構樣式 結構拓展 單鏈表 結構定義 節點關聯 插入節點 刪除節點 常見操作 雙鏈表 環鏈表 結構容器 結構設計 結構特性 線性結構的存儲方式 順序存儲 - 數組 鏈式存儲 - 鏈表 線性結構的鏈式存儲是通過任意的存儲單元來存儲線性…

技術分享:分布式數據庫DNS服務器的架構思路

DNS是企業數字化轉型的基石。伴隨微服務或單元化部署的推廣,許多用戶也開始采用分布式數據庫將原來的單體數據庫集群服務架構拆分為大量分布式子服務集群,對應不同的微服務或服務單元。本文將從分布式數據庫DNS服務器的架構需求、架構分析兩方面入手&…

1_插入排序_循環不變式

01_插入排序 #include<stdio.h>void insert_sort(int arr[], int n); void printArray(int arr[], size);int main() {int arr[] {1, 2, 3, 22, 5, 9};int n sizeof(arr) / sizeof(arr[0]);printf("打印原始數組:\n");prinfArray(arr, n);insert_sort(arr, …

湖北大學2024年成人高考函授報名專升本市場營銷專業介紹

在璀璨的學術殿堂中&#xff0c;湖北大學如同一顆璀璨的明珠&#xff0c;熠熠生輝。為了滿足廣大社會人士對于繼續深造、提升自我、實現職業夢想的渴望&#xff0c;湖北大學特別開設了成人高等繼續教育項目&#xff0c;為廣大有志之士敞開了一扇通往知識殿堂的大門。 而今&…

【FFmpeg】av_write_frame函數

目錄 1.av_write_frame1.1 寫入pkt&#xff08;write_packets_common&#xff09;1.1.1 檢查pkt的信息&#xff08;check_packet&#xff09;1.1.2 準備輸入的pkt&#xff08;prepare_input_packet&#xff09;1.1.3 檢查碼流&#xff08;check_bitstream&#xff09;1.1.4 寫入…

【創建者模式-建造者模式】

概要 將一個復雜對象的構建與表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示。 建造者模式包含以下角色 抽象建造者類&#xff08;Builder&#xff09;&#xff1a;這個接口規定要實現復雜對象的那些部分的創建&#xff0c;并不涉及具體的部件對象的創建。具體建…

什么是ISR?

ISR&#xff08;Interrupt Service Routine&#xff0c;中斷服務程序&#xff09;是一個用于處理硬件中斷的特定程序。中斷是硬件或軟件引起的事件&#xff0c;會暫時打斷當前正在運行的任務&#xff0c;以便緊急處理某個事件。ISR的目的是快速響應中斷信號&#xff0c;執行所需…

在WSL Ubuntu中啟用root用戶的SSH服務

在 Ubuntu 中&#xff0c;默認情況下 root 用戶是禁用 SSH 登錄的&#xff0c;這是為了增加系統安全性。 一、修改配置 找到 PermitRootLogin 行&#xff1a;在文件中找到 PermitRootLogin 配置項。默認情況下&#xff0c;它通常被設置為 PermitRootLogin prohibit-password 或…