日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LSTM神经网络在证券市场分析上的应用

發(fā)布時間:2023/12/10 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LSTM神经网络在证券市场分析上的应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在前文中,我們利用tushare和python工具分析實現(xiàn)了對證券市場股票數(shù)據(jù)的獲取與保存。驗證了股票收益率符合正態(tài)分布,進而驗證了股票走勢較好符合布朗運動規(guī)律、維納過程和伊藤過程的這一基礎(chǔ)理論事實。此后,我們進一步探究股票價格的運動規(guī)律,引入基于神經(jīng)網(wǎng)絡(luò)的LSTM模型,通過學(xué)習(xí)以往的股票價格運動對未來趨勢加以預(yù)測,實現(xiàn)了更為細致精確的擬合。


提示:本文內(nèi)容限于本人對相關(guān)技術(shù)的原創(chuàng)性思考和理解,僅供學(xué)習(xí)參考。

目錄

  • 前言
  • 一、神經(jīng)網(wǎng)絡(luò)是什么?
  • 二、時間序列與神經(jīng)網(wǎng)絡(luò)
    • 1.傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的局限性
    • 2.循環(huán)神經(jīng)網(wǎng)絡(luò)RNN
    • 3.長短期記憶神經(jīng)網(wǎng)絡(luò)LSTM
    • 4.采用LSTM模型研究的優(yōu)勢
  • 三、滬深股指實證研究
    • 1.導(dǎo)入相關(guān)包
    • 2.讀入數(shù)據(jù)
    • 3.數(shù)據(jù)預(yù)處理
    • 4.LSTM模型訓(xùn)練
    • 5.可視化繪制
  • 四、預(yù)測結(jié)果
  • 總結(jié)


前言

本文主要分為三部分,在第一部分主要是對機器學(xué)習(xí)中的人工神經(jīng)網(wǎng)絡(luò)技術(shù)作簡要的介紹和引入。第二部分,將簡要說明時間序列(也即隨機過程)數(shù)據(jù)所具有的特征,以及傳統(tǒng)神經(jīng)網(wǎng)絡(luò)對于時間序列的學(xué)習(xí)所具有的缺陷,并引出當(dāng)前較為時興和前沿的LSTM神經(jīng)網(wǎng)絡(luò)技術(shù),強調(diào)其在時間序列數(shù)據(jù)訓(xùn)練和處理上所具有的優(yōu)越性。最后,本文將以LSTM網(wǎng)絡(luò)在滬深股票指數(shù)上的學(xué)習(xí)與訓(xùn)練作為技術(shù)的應(yīng)用實例,從實際的代碼層面對LSTM神經(jīng)網(wǎng)絡(luò)的具體原理和工作機制進行更為深入的講解。


一、神經(jīng)網(wǎng)絡(luò)是什么?

什么是神經(jīng)網(wǎng)絡(luò)呢?一說到神經(jīng)網(wǎng)絡(luò),根據(jù)我們在中學(xué)期間所學(xué)習(xí)的生物知識,我們會第一時間聯(lián)想到我們?nèi)祟惔竽X中所擁有的生物神經(jīng)網(wǎng)絡(luò)。作為計算機領(lǐng)域人工神經(jīng)網(wǎng)絡(luò)技術(shù)的原型,人類大腦中的生物神經(jīng)網(wǎng)絡(luò)具有極為強大的功能。
在大腦皮層中,約有10^11個神經(jīng)元通過神經(jīng)突觸與大約103個其它神經(jīng)元相連,形成了一個高度復(fù)雜高度靈活的動態(tài)網(wǎng)絡(luò)。正是這樣一個龐大而精密的神經(jīng)網(wǎng)絡(luò)系統(tǒng),讓人類得以從事各項復(fù)雜精巧的工作,從而開創(chuàng)了屬于人類的文化與歷史。
接下來,我們將神經(jīng)網(wǎng)絡(luò)細化至單個的神經(jīng)元細胞。在神經(jīng)元細胞中,外部刺激通過樹突輸入至細胞體。當(dāng)細胞體接收的信號量超過某個閾值時,細胞體就會被激活,產(chǎn)生電脈沖,并將電位信號沿著軸突并通過突觸傳遞到其它神經(jīng)元。神經(jīng)元細胞的工作機制,啟發(fā)軟件工程師設(shè)計出一種最為基本簡單的神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu),也即右圖所示的感知器模型。

  • 感知器模型包括了由兩個輸入神經(jīng)元組成的輸入層和一個輸出神經(jīng)元的輸出層,能夠完成基礎(chǔ)的與或非運算。

此后,工程師們便在單個網(wǎng)絡(luò)模型基礎(chǔ)上不斷豐富完善,搭建多個信息處理層,構(gòu)建各種激勵和損失函數(shù),并用網(wǎng)絡(luò)相互關(guān)聯(lián)各層的多個細胞,組合構(gòu)成出一個龐大可觀的復(fù)雜神經(jīng)網(wǎng)絡(luò)決策模型。
其中,長短期記憶LSTM神經(jīng)網(wǎng)絡(luò)是以循環(huán)神經(jīng)網(wǎng)絡(luò)RNN為基礎(chǔ)算法模板的改進算法。極大地優(yōu)化了對于長期依賴信息的學(xué)習(xí)過程,為長期隨機過程序列數(shù)據(jù)的機器學(xué)習(xí)提供了一份較好的解決方案。

二、時間序列與神經(jīng)網(wǎng)絡(luò)

1.傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的局限性

傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型在對于某一類型的數(shù)據(jù)處理上顯得有些捉襟見肘。這便是所謂的隨機過程,也即傳統(tǒng)意義上所說的“時間序列數(shù)據(jù)”。這類數(shù)據(jù)相較于常規(guī)數(shù)據(jù)而言,其隨機變量的變化依賴于某一特定參數(shù)(通常自變量軸為時間),也即在時間軸上的不同時間點處具有不同的變化特征的一類數(shù)據(jù)。傳統(tǒng)神經(jīng)網(wǎng)絡(luò)只能單次處理孤立的輸入信息并產(chǎn)生輸出,但在輸入輸出的前后序列間卻沒有構(gòu)建充分的關(guān)聯(lián)。

  • 打個比方,在英語完形填空的題目上,I grew up in China. There’s many delicious food…I speak(?)。此處根據(jù)邏輯判斷,很輕易便能依照前文的China聯(lián)想到“Chinese”。但是對于計算機的神經(jīng)網(wǎng)絡(luò)模型而言,卻是很難推測出這一缺失信息的。
  • 另一個例子是,如今的拼音輸入法能夠根據(jù)前文的輸入內(nèi)容自動猜測后續(xù)內(nèi)容,在詞性推測、語義推斷和輸入習(xí)慣上都進行了充分學(xué)習(xí)。但是以前常用的智能ABC輸入法,只能根據(jù)單個輸入預(yù)測下一詞,而不能從整體給出判斷建議,也是傳統(tǒng)神經(jīng)網(wǎng)絡(luò)短板的集中體現(xiàn)。

對于隨機過程的時間序列數(shù)據(jù)而言,其重要特征和意義,往往就蘊含于序列的前后關(guān)聯(lián)性上,常常具備時間相關(guān)性。因此,傳統(tǒng)神經(jīng)網(wǎng)絡(luò)所采用的簡單分類劃分的策略,不再普遍適用于此類數(shù)據(jù)的學(xué)習(xí)與預(yù)測。

2.循環(huán)神經(jīng)網(wǎng)絡(luò)RNN


循環(huán)神經(jīng)網(wǎng)絡(luò)RNN是一類以序列數(shù)據(jù)為輸入,并在序列的演進方向遞歸且所有節(jié)點按鏈?zhǔn)竭B接的遞歸神經(jīng)網(wǎng)絡(luò)。RNN的引入最初是為了解決時間序列數(shù)據(jù)的機器學(xué)習(xí)問題的,可被視為同一神經(jīng)網(wǎng)絡(luò)的多次復(fù)制和循環(huán)消息傳遞,其鏈?zhǔn)降奶卣髂軌蜉^好揭示序列的相關(guān)性。RNN的輸入和輸出能夠前后關(guān)聯(lián),便于存儲長期記憶,并隨時根據(jù)當(dāng)前的輸入對狀態(tài)進行更新,克服了傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的短板。
但是,當(dāng)RNN學(xué)習(xí)的序列間隔不斷增大時,其對信息的學(xué)習(xí)能力會不斷衰減至0,從而產(chǎn)生了長期記憶的依賴問題,也即RNN對于長記憶依賴關(guān)系的學(xué)習(xí)能力趨近于0。

3.長短期記憶神經(jīng)網(wǎng)絡(luò)LSTM

長短期記憶神經(jīng)網(wǎng)絡(luò)LSTM是在RNN的循環(huán)神經(jīng)網(wǎng)絡(luò)上加以改造和優(yōu)化的神經(jīng)網(wǎng)絡(luò)模型,通過在RNN的重復(fù)神經(jīng)網(wǎng)絡(luò)模塊基礎(chǔ)上引入四層神經(jīng)網(wǎng)絡(luò)交互層,極大地優(yōu)化了對于長期依賴信息的學(xué)習(xí)過程,為長期隨機過程序列數(shù)據(jù)的機器學(xué)習(xí)提供了一份較好的解決方案。

在LSTM中,其關(guān)鍵在于細胞狀態(tài)。類似于傳送帶,細胞狀態(tài)呈水平線在整個鏈圖上貫穿運行,而LSTM則通過精心設(shè)計的三大門層結(jié)構(gòu),控制信息在細胞上的傳遞與交互,從而影響對序列數(shù)據(jù)的學(xué)習(xí)效果。
三大門層是LSTM神經(jīng)網(wǎng)絡(luò)的核心,包括決定從細胞狀態(tài)中丟棄信息的忘記門層、確定添加至細胞狀態(tài)中信息的輸入門層和確認(rèn)過濾后輸出信息內(nèi)容的輸出門層。三大門層的核心內(nèi)涵如下:

  • 忘記門層:對于前一狀態(tài)矩陣中每個輸入值都會產(chǎn)生一個對應(yīng)的向量,該向量中的0-1值表示細胞狀態(tài)中的信息遺忘的程度。具體邏輯如圖所示。
  • 輸入門層:在輸入邏輯上,首先利用輸入門層篩選所需要更新的信息,然后利用內(nèi)部的一個tanh層得到新的候選細胞信息。接下來,通過忘記門層篩選忘記舊細胞信息的一部分(σ),再通過輸入門層選擇添加候選細胞信息的一部分(忘記后剩下的部分與新添加信息的權(quán)重加和),從而更新得到新的細胞信息。
  • 輸出門層:細胞狀態(tài)更新完畢后,將輸入信息經(jīng)過輸出門層的sigmoid層得到判斷條件,然后將細胞狀態(tài)經(jīng)過tanh層激活得到一個-1~1之間值的向量。該向量再與輸出門得到的判斷條件相乘,便得到了該層LSTM網(wǎng)絡(luò)的輸出結(jié)果。

整體流程:遺忘→根據(jù)現(xiàn)有的輸入和上一個細胞的輸出更新狀態(tài)→根據(jù)現(xiàn)有的狀態(tài)輸出預(yù)測值。

在上述所列示的圖中,有幾個要點:

  • LSTM模塊當(dāng)中的線就是狀態(tài)矩陣C和輸出h的流動,一般來說變動很少,主線是最上面那條直線,其他的線都是對這條主要流動線進行微加工。

  • 里面有一些黃色方塊代表層:σ激活層輸出0到1的值,代表權(quán)重;tanh層表示對輸入進行激活,輸出新的候選值。

  • 粉色的部分代表操作,x號代表矩陣點乘,+代表添加,tanh代表運算。

概括來說,LSTM上細胞狀態(tài)信息流動過程的主要特征可總結(jié)為以下三點:

  • 基于RNN,更好適應(yīng)刻畫時間序列長記憶依賴關(guān)系。具有更多的神經(jīng)網(wǎng)絡(luò)重復(fù)模塊鏈結(jié)構(gòu)層數(shù),構(gòu)建門層方式用以交互。相較于BP神經(jīng)網(wǎng)絡(luò)和傳統(tǒng)RNN模型具有更高的預(yù)測準(zhǔn)確度。
  • LSTM具備優(yōu)異的特征,包括時間序列特性、選擇記憶特性以及信息門層邏輯的架構(gòu)。
  • LSTM作為一種模型本身,自然也具備一些短板和不足。其中最大的缺陷便是“時滯效應(yīng)”,也即預(yù)測值可能在時間軸上相較真實值具備滯后性。這一現(xiàn)象產(chǎn)生的原因可追溯至?xí)r間序列本身所存在的自相關(guān)特性,可通過對時間序列數(shù)據(jù)采用廣義差分法等消減自相關(guān)性,或者調(diào)整優(yōu)化模型訓(xùn)練參數(shù)來較好規(guī)避。

通過上述基本邏輯,LSTM模型便可初步實現(xiàn)通過充分利用過往時間序列信息對未來時點信息進行預(yù)測的機制。

4.采用LSTM模型研究的優(yōu)勢

在金融數(shù)據(jù)等時間序列數(shù)據(jù)的研究中廣泛應(yīng)用LSTM模型進行學(xué)習(xí)訓(xùn)練和預(yù)測,已逐漸成為當(dāng)下數(shù)據(jù)分析和機器學(xué)習(xí)的熱點話題。這是由于LSTM對于這一類數(shù)據(jù)的學(xué)習(xí)上,具有諸多獨特的優(yōu)勢和特點:

  • LSTM模型能便利地利用已有現(xiàn)成封裝的包keras、廣泛應(yīng)用于機器學(xué)習(xí)算法中的數(shù)據(jù)流編程符號數(shù)學(xué)系統(tǒng)TensorFlow,對于初學(xué)者較為友好。
  • 在目前的實證研究中,綜合比較類似模型而言,LSTM模型對于時間序列分析的擬合優(yōu)度較高,能較好解決梯度消失和梯度爆炸的問題,從而規(guī)避在實證研究和預(yù)測中,資產(chǎn)價格出現(xiàn)大幅度偏離實際的極端情況。
  • LSTM模型的構(gòu)建和使用過程能較好對接tushare接口所導(dǎo)出的數(shù)據(jù)格式,也能較好發(fā)揮python這一高級編程語言及其配套環(huán)境的資源稟賦優(yōu)勢。

三、滬深股指實證研究

利用前文的tushare和python工具獲取并保存證券市場股票數(shù)據(jù),在接下來的代碼中采用lstm神經(jīng)網(wǎng)絡(luò)對本地保存的金融序列數(shù)據(jù)進行預(yù)測分析并生成圖片。

1.導(dǎo)入相關(guān)包

在代碼中引入了keras包,采用該神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)庫提供的現(xiàn)成LSTM模型,對所獲取的股票時間序列數(shù)據(jù)加以學(xué)習(xí)與訓(xùn)練,可為模型訓(xùn)練提供充足便利。此外,還引入了一個強力的機器學(xué)習(xí)庫sklearn(scikit-learn),用于進行數(shù)據(jù)預(yù)處理,能夠極大節(jié)省編程時間和代碼量。讓用戶得以擁有更多的精力去分析數(shù)據(jù)分布,調(diào)整模型和修改超參。

import numpy as np import matplotlib.pyplot as plt import pandas as pd import warnings import os os.environ["CUDA_VISIBLE_DEVICES"]="-1"#限于各驅(qū)動程序差異,此處禁止GPU運算處理 from keras.models import Sequential from keras.optimizers import Adam from keras.layers import Dense, LSTM, LeakyReLU, Dropout from sklearn.preprocessing import MinMaxScaler

2.讀入數(shù)據(jù)

將待獲取的股票代碼存為列表,通過遍歷的方式將此前存儲的股票數(shù)據(jù)文件加以讀取。

stock=['601318','601988','601939','600519','002230','000858','002594','601099','600019','600036']for i in stock:filepath="D:/Documents/finance/data/"+str(i)ds = pd.read_csv(filepath+".csv",index_col="ts_code")[["pct_chg","close","open","high","low"]]#讀取表格中的各項數(shù)據(jù)

3.數(shù)據(jù)預(yù)處理

通過sklearn包中MinMaxScaler()的fit_transform()對數(shù)據(jù)進行歸一化和訓(xùn)練轉(zhuǎn)化處理。

min_max_scaler = MinMaxScaler()#對數(shù)據(jù)進行均一化處理close_price = ds[['close']]close_norm_data = min_max_scaler.fit_transform(close_price.values)open_price = ds[['open']]open_norm_data = min_max_scaler.fit_transform(open_price.values)high_price = ds[['high']]high_norm_data = min_max_scaler.fit_transform(high_price.values)low_price = ds[['low']]low_norm_data = min_max_scaler.fit_transform(low_price.values)

4.LSTM模型訓(xùn)練

根據(jù)所選時間序列數(shù)據(jù)的實際特征,設(shè)置相應(yīng)的訓(xùn)練和測試參數(shù),用于對數(shù)據(jù)進行更好的預(yù)處理。例如此處將past_history設(shè)為5,future_target設(shè)為0,并按TRAIN_SPLIT取了模型的前80%進行訓(xùn)練,后20%用于模型測試。按上述參數(shù)調(diào)用univariate_data函數(shù),分別獲取預(yù)處理后的訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集。

past_history = 5future_target = 0# 取 80%數(shù)據(jù)進行訓(xùn)練 20%進行測試TRAIN_SPLIT = int(len(close_norm_data) * 0.8)# 訓(xùn)練數(shù)據(jù)集x_train, y_train = univariate_data(close_norm_data,open_norm_data,high_norm_data,low_norm_data,0,TRAIN_SPLIT,past_history,future_target)# 測試數(shù)據(jù)集x_test, y_test = univariate_data(close_norm_data,open_norm_data,high_norm_data,low_norm_data,TRAIN_SPLIT,len(close_norm_data),past_history,future_target)

配置神經(jīng)網(wǎng)絡(luò)相關(guān)的參數(shù),按照數(shù)據(jù)與模型特征和訓(xùn)練實際要求,以達到更為優(yōu)越的訓(xùn)練與擬合結(jié)果。相關(guān)參數(shù)在機器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中具有通用意義。

  • num_units:LSTM網(wǎng)絡(luò)輸出結(jié)果向量的維度。
  • learning_rate:學(xué)習(xí)率,控制模型學(xué)習(xí)進度。
  • activation_function:激活函數(shù),定義神經(jīng)網(wǎng)絡(luò)節(jié)點在給定輸入或輸入集合下輸出。
  • loss_function:損失函數(shù),估量模型的預(yù)測值與真實值的不一致程度,表征魯棒性。
  • batch_size:一次訓(xùn)練所選取的樣本數(shù)。
  • num_epochs:樣本批次的訓(xùn)練迭代次數(shù)。
  • Input_shape(x,y):規(guī)定了時間上展開框的個數(shù)以及每個時刻輸入樣本向量的維度。

上述參數(shù)指定完畢后,即可開始編譯模型并指定相應(yīng)參數(shù)變量。采用model.fit()函數(shù)訓(xùn)練LSTM模型,并返回一個名為history的對象,用于在周期結(jié)束時記錄跟蹤的損失和所指定的參數(shù)。

# Initialize the RNNmodel = Sequential()# input_shape 時間步,每個時間步的特征長度(dim)model.add(LSTM(units=num_units, activation=activation_function, input_shape=(4, 5)))model.add(LeakyReLU(alpha=0.5))model.add(Dropout(0.2))model.add(Dense(units=1))# Compiling the RNNmodel.compile(optimizer=adam, loss=loss_function)# 訓(xùn)練模型# Using the training set to train the modelhistory = model.fit(x_train,y_train,validation_split=0.1,batch_size=batch_size,epochs=num_epochs,shuffle=False)
  • validation_split:指定一部分訓(xùn)練數(shù)據(jù)作為驗證集
  • shuffle:指定每個epoch開始前是否打亂訓(xùn)練集數(shù)據(jù)順序(由于時間序列相關(guān)數(shù)據(jù)的特性恰恰體現(xiàn)在其順序相關(guān)性上,因此在時間序列的訓(xùn)練中該參數(shù)應(yīng)被禁用)

5.可視化繪制

模型訓(xùn)練完畢后,將數(shù)據(jù)格式處理為pd.DataFrame,并調(diào)用matplotlib.pyplot對結(jié)果進行可視化繪圖,便于直觀衡量模型的訓(xùn)練和測試結(jié)果,分析并比較模型的擬合優(yōu)度和有效性。

#繪圖并加入標(biāo)簽original_value = min_max_scaler.inverse_transform(y_test).flatten()predictions_value = min_max_scaler.inverse_transform(model.predict(x_test)).flatten()df_result = pd.DataFrame({"key": pd.Series(range(0, len(original_value))), "original": original_value, "predictions": predictions_value})df_result["original"].plot(label="original")df_result["predictions"].plot(label="predictions")plt.xlabel('time')plt.ylabel('index')plt.title('Stock:'+i+'\'s chart')plt.legend()plt.savefig(filepath+"lstm.png")plt.close()

四、預(yù)測結(jié)果

我們在python中編譯運行上述代碼,將10只股票1318個交易日內(nèi)的開盤價(open)、最高價(high)、最低價(low)、收盤價(close)進行歸一化處理后導(dǎo)入LSTM模型,取其中80%的數(shù)據(jù)(約1055個交易日的股票數(shù)據(jù))對神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練,并用剩余的數(shù)據(jù)對模型加以驗證。利用matplotlib包提供的可視化工具將進行訓(xùn)練預(yù)測后10只股票真實值和預(yù)測值折線圖繪制如下:


上圖中,藍色線為原始數(shù)據(jù),橙色線為預(yù)測線。我們可以明顯觀察得出,經(jīng)由LSTM神經(jīng)網(wǎng)絡(luò)訓(xùn)練后的預(yù)測曲線和原始數(shù)據(jù)曲線走勢的重合度較高,證明該模型能夠較好預(yù)測擬合證券市場股票的價格走勢。
不過,從圖中仍可看出LSTM的些許弊端,例如預(yù)測值存在時滯效應(yīng),預(yù)測效果仍較差強人意等,可通過改進模型算法、參數(shù)調(diào)整、數(shù)據(jù)預(yù)處理等方式進一步優(yōu)化模型的擬合精度。


總結(jié)

總而言之,LSTM是一種基于RNN的長短期記憶神經(jīng)網(wǎng)絡(luò),通過精心設(shè)計的“三大門層”架構(gòu),對細胞狀態(tài)中的數(shù)據(jù)加以選擇性過濾,能夠更好刻畫時間序列的長記憶依賴關(guān)系。相較于BP、RNN等傳統(tǒng)神經(jīng)網(wǎng)絡(luò)模型而言,LSTM對于時間序列的學(xué)習(xí)具有更高的預(yù)測準(zhǔn)確度。盡管LSTM模型本身也具備“時滯效應(yīng)”的短板,不過隨著模型的不斷豐富和優(yōu)化,LSTM的優(yōu)勢正被不斷挖掘和凸顯。各種在LSTM基礎(chǔ)上衍生而出的變種算法也不斷涌現(xiàn)。相信在不遠的將來,LSTM模型的應(yīng)用領(lǐng)域?qū)訌V泛。

總結(jié)

以上是生活随笔為你收集整理的LSTM神经网络在证券市场分析上的应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。