亞寵展、全球?qū)櫸锂a(chǎn)業(yè)風(fēng)向標(biāo)——亞洲寵物展覽會(huì)深度解析
1226
2025-03-31
摘要
LSTM模型是RNN的一種,其特點(diǎn)是在單一循環(huán)神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上,構(gòu)建出了長(zhǎng)短記憶門,也就是可以長(zhǎng)時(shí)間發(fā)現(xiàn)和記憶長(zhǎng)依賴關(guān)系。本次比較將使用LSTM模型來(lái)預(yù)測(cè)招商銀行三天后的收盤價(jià),也就是利用5月10日前的數(shù)據(jù),來(lái)預(yù)測(cè)5月15日的收盤價(jià)。
一、模型選擇
股價(jià)價(jià)格的預(yù)測(cè)其實(shí)是一件極其不靠譜的事情。很多專業(yè)機(jī)構(gòu)和量化交易的個(gè)人都是極力在規(guī)避價(jià)格預(yù)測(cè)這種做法的。
原因有二:一是股市(無(wú)論哪個(gè)國(guó)家,哪種性質(zhì))隨機(jī)突發(fā)事件太多,且突發(fā)事件對(duì)股市的影響力也是高度隨機(jī)和不可預(yù)測(cè)的,也就是所謂的噪音多到讓你懷疑人生。二是,連續(xù)變量作為預(yù)測(cè)目標(biāo)是個(gè)糟糕的設(shè)計(jì),因?yàn)檫@會(huì)使得預(yù)測(cè)空間太大,而導(dǎo)致所搜空間無(wú)限大。這個(gè)見解來(lái)自于強(qiáng)化學(xué)習(xí),強(qiáng)化學(xué)習(xí)的一個(gè)技術(shù)要點(diǎn)就是把預(yù)測(cè)空間有限化,即便客觀世界是連續(xù)而無(wú)限的,也需要采用類似于Tile coding的技術(shù)使其離散化,有限化。本著迎難而上,不成功也可以提高自己的初衷,嘗試開始著手解決這一難題。
選擇LSTM模型作為主算法來(lái)采用,是參考了kaggle上一個(gè)長(zhǎng)期項(xiàng)目,預(yù)測(cè)美股收盤價(jià)的一個(gè)項(xiàng)目,其中第三名就是采用LSTM的。拿來(lái)測(cè)試之后,具有一定預(yù)測(cè)作用,但是預(yù)測(cè)精度不高,且性能不穩(wěn)定。然后小組討論后,是否就采用這個(gè)基本模型為核心,開展算法升級(jí),得到一致同意后,于是確定了LSTM算法為核心算法,并做再次開發(fā)。
二、模型升級(jí)
LSTM模型之所有能夠具有預(yù)測(cè)股價(jià)的能力,主要的還是模型本身捕捉了價(jià)格序列中的時(shí)序要素中所透射出來(lái)的信息。對(duì)于模型進(jìn)行預(yù)測(cè)本身是完全沒有問題的,而這次模型升級(jí)的根本目標(biāo)是提升預(yù)測(cè)精度。
關(guān)于模型升級(jí)主要來(lái)自于兩方面的,一是通過對(duì)模型的優(yōu)化,二是優(yōu)化數(shù)據(jù)。
LSTM模型大概有6種變形形式,主要的特點(diǎn)就是針對(duì)不同數(shù)據(jù)輸入的類型。這里我選用了Multiple Input模型,也就是多序列輸入,單序列輸出。選擇這個(gè)模型,對(duì)數(shù)據(jù)的構(gòu)建也有非常好的促進(jìn)作用,可以構(gòu)建一個(gè)張量(多維數(shù)組),這個(gè)張量是一個(gè)5維張量,每個(gè)維度是一個(gè)特征數(shù)據(jù),同時(shí)還可以按照N天的方式形成數(shù)據(jù)切片,這種設(shè)計(jì)基于兩個(gè)原因:
一是數(shù)據(jù)中包含了大量信息,而越多的特征數(shù)據(jù),提供的信息越多,多因子的雛形。
二是在保持多特征數(shù)據(jù)的基礎(chǔ)上,保留的時(shí)間序列的特點(diǎn)。也就是在不增加特征的情況,將特征信息成倍增加。
這種數(shù)據(jù)處理模式極大的優(yōu)于ML的諸多算法。ML的諸多算法還是以單一樣本為切片輸入所有維度的數(shù)據(jù),在時(shí)序構(gòu)建方面是有所欠缺的。
數(shù)據(jù)是從大智慧中取出的數(shù)據(jù),數(shù)據(jù)時(shí)間段是2010年1月1日—2019年5月10日,數(shù)據(jù)包含open(開盤價(jià))、close(收盤價(jià))、volume(成交量)、turnover(成交額度)、return(日收益率)。特征選擇了5個(gè),原因是增加特征必然增加數(shù)據(jù)的獲取難度,多因子模型的構(gòu)建是基于豐富的數(shù)據(jù)供應(yīng)基礎(chǔ)上,在目前的這個(gè)比賽中,是不具備這個(gè)條件,所以只用4個(gè)基本特征數(shù)據(jù)加一個(gè)收益率的衍生變量。
按照N個(gè)交易日的模式,將數(shù)據(jù)變成一個(gè)(M,N,5)的張量表。
三、代碼解析
接下來(lái)開始構(gòu)建數(shù)據(jù),主要分為三個(gè)步驟完成 第一步導(dǎo)入數(shù)據(jù) 第二步生成數(shù)據(jù)切片,以及監(jiān)督學(xué)習(xí)的標(biāo)簽,也就是三天后的收盤價(jià)。拆分訓(xùn)練序列訓(xùn)練集、測(cè)試集、標(biāo)簽 第三步載入模型進(jìn)行訓(xùn)練
數(shù)據(jù)導(dǎo)入的基本操作,順便觀察下數(shù)據(jù)集的情況。
構(gòu)建兩個(gè)處理數(shù)據(jù)生成張量表的函數(shù),一個(gè)用帶標(biāo)簽輸出,另外一個(gè)只處理輸入數(shù)據(jù)集,生成20x5的切片數(shù)據(jù)。
開始處理數(shù)據(jù),同時(shí)對(duì)數(shù)據(jù)進(jìn)行特征縮放處理,因?yàn)楹竺嫘枰獙?duì)特征縮放的數(shù)據(jù)進(jìn)行逆運(yùn)算,所以,要定義兩個(gè)不同的特征縮放函數(shù),否則后面針對(duì)輸出標(biāo)簽?zāi)孢\(yùn)算會(huì)無(wú)法進(jìn)行。 對(duì)數(shù)據(jù)進(jìn)行特征縮放處理,將數(shù)據(jù)縮放到0-1區(qū)間內(nèi),這樣可以加快訓(xùn)練結(jié)果的快速收斂。
對(duì)數(shù)據(jù)集進(jìn)行訓(xùn)練集和測(cè)試集的拆分,我在這里偷了個(gè)懶,只生成了兩組數(shù)據(jù)集。
拆分出來(lái)的數(shù)據(jù)是這個(gè)樣子的
y_train的數(shù)據(jù)結(jié)構(gòu)為: (1783,)
y_test的數(shù)據(jù)結(jié)構(gòu)為: (446,)
X_train的數(shù)據(jù)結(jié)構(gòu)為: (1783, 20, 5) # 1783個(gè)20x5的數(shù)據(jù)切片
X_test的數(shù)據(jù)結(jié)構(gòu)為: (446, 20, 5) # 446個(gè)20x5的數(shù)據(jù)切片
張量表的結(jié)構(gòu)為:(一個(gè)切片)
模型訓(xùn)練過程中的loss值,一個(gè)真實(shí)值的loss,一個(gè)是預(yù)測(cè)值的loss,可以明顯的看到,兩個(gè)loss已經(jīng)快速收斂,但是預(yù)測(cè)值的loss并不穩(wěn)定。在這種情況下,如果模型使用精確度來(lái)進(jìn)行評(píng)估,明顯已經(jīng)不符合實(shí)際要求。故需要重新找到模型性能評(píng)估的方法。
模型訓(xùn)練完畢之后,需要對(duì)訓(xùn)練模型進(jìn)行效果評(píng)估,大概的評(píng)估思路分為三步:
第一步單值預(yù)測(cè)檢驗(yàn) 第二步序列預(yù)測(cè)檢驗(yàn) 第三步用統(tǒng)計(jì)檢驗(yàn)方法中的T檢驗(yàn)對(duì)預(yù)測(cè)性能進(jìn)行評(píng)估
預(yù)測(cè)值:[[0.7393236]], 實(shí)際值:[[0.74340618]]
統(tǒng)計(jì)指標(biāo)說(shuō)明: - mean:代表測(cè)試集驗(yàn)證后的結(jié)果與真實(shí)情況的差值序列的平均值,也就是整體差異水平。正負(fù)無(wú)所謂,越趨近0越好。通過上述的結(jié)果來(lái)看,這次訓(xùn)練的模型預(yù)測(cè)結(jié)果于真實(shí)情況的整體誤差已經(jīng)小于1%, - std:標(biāo)準(zhǔn)差,代表均值在正負(fù)兩個(gè)方向的分散程度,越小越好,說(shuō)明結(jié)果比較集中,誤差比較小,通過以上結(jié)果來(lái)看分散度僅有4.33%,在95%的置信度下。
因?yàn)樵谟?xùn)練模型時(shí),確保能夠產(chǎn)生最大的隨機(jī)數(shù),并未設(shè)置隨機(jī)數(shù)種子。如果遇到性能較好的結(jié)果就運(yùn)行下面的代碼,以便將模型保存在本地。方便評(píng)估模型訓(xùn)練的最優(yōu)參數(shù)。
path='my_model_2' # 請(qǐng)自行設(shè)置存儲(chǔ)路徑及文件名,例如:D:\\股票\\my_model
model_2.save(path+'.h5',include_optimizer=True) # 保存模型本體
model_2.save_weights(path + '_weights.h5') # 保存模型權(quán)重
說(shuō)明: 由于神經(jīng)網(wǎng)絡(luò)依靠隨機(jī)數(shù),未設(shè)置隨機(jī)數(shù)種子,所以每次訓(xùn)練結(jié)果均不相同。所以將性能較好的模型進(jìn)行存儲(chǔ)。 在實(shí)際使用時(shí)進(jìn)行模型載入,分別查看預(yù)測(cè)結(jié)果。取最佳模型。 載入數(shù)據(jù)預(yù)測(cè)5月15日的close數(shù)值
filepath = 'my_model_1'
my_model = keras.models.load_model(filepath+'.h5')
p_1 = my_model.predict(X_test)
p_1 = scl.inverse_transform(p_1)
print('5月15日的close為:',p_1[-1])
5月15日的close為: [33.819942]
總結(jié)
該模型最優(yōu)參數(shù)組合,是通過幾十次的反復(fù)訓(xùn)練所的得到的。在這個(gè)過程中還做了大量的調(diào)整和比對(duì)試驗(yàn),就不做贅述,只將總結(jié)到的要點(diǎn)進(jìn)行歸納闡述:
因?yàn)闃?gòu)建的張量維度數(shù)并不是十分大,所以在網(wǎng)絡(luò)的設(shè)計(jì)上,一個(gè)LSTM層加一個(gè)全連接層就已經(jīng)足夠了。如果我們的維度數(shù)可以增加到上百個(gè),這個(gè)情況就可以繼續(xù)增加隱藏層的數(shù)量,同時(shí)使用dropout層,丟棄部分冗余。
對(duì)于LSTM模型,在做預(yù)測(cè)的時(shí)候,不能只給一個(gè)切片(單值)數(shù)據(jù),這個(gè)預(yù)測(cè)的結(jié)果很大概率會(huì)產(chǎn)生偏差。正確的做法,應(yīng)該是給一個(gè)切片序列,而你要預(yù)測(cè)的內(nèi)容必須放置到最后一個(gè)。因?yàn)閷?shí)驗(yàn)發(fā)現(xiàn),LSTM模型的運(yùn)行原理中,會(huì)根據(jù)上下連接的數(shù)據(jù)切片修正自己的長(zhǎng)短記憶內(nèi)容,也就是具備一定的推理能力,在使用這個(gè)模型時(shí),需要給與足夠的數(shù)據(jù),讓模型能夠進(jìn)行推理。
Y值(標(biāo)簽)的構(gòu)建同樣需要和X值(輸入)的設(shè)計(jì)進(jìn)行關(guān)聯(lián),因?yàn)檫@關(guān)系到你的訓(xùn)練數(shù)據(jù)是離散化,還是序列化,也關(guān)系到你的訓(xùn)練方式是可以離散化,還是序列化(時(shí)序化)。非常重要。這也是針對(duì)預(yù)測(cè)目標(biāo)反推需要選擇哪些數(shù)據(jù)組成數(shù)組的宗旨。
Ad Time
本文轉(zhuǎn)載自異步社區(qū)
機(jī)器學(xué)習(xí) 5G游戲
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。