五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

Python中TensorFlow的長短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM)、指數(shù)移動(dòng)平均法預(yù)測股票市場和可視化

2023-06-06 23:30 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=23689

最近我們被客戶要求撰寫關(guān)于LSTM的研究報(bào)告,包括一些圖形和統(tǒng)計(jì)輸出。

本文探索Python中的長短期記憶(LSTM)網(wǎng)絡(luò),以及如何使用它們來進(jìn)行股市預(yù)測?(?點(diǎn)擊文末“閱讀原文”獲取完整代碼數(shù)據(jù)********?)。

在本文中,你將看到如何使用一個(gè)被稱為長短時(shí)記憶的時(shí)間序列模型。LSTM模型很強(qiáng)大,特別是在保留長期記憶方面。在本文中,你將解決以下主題。

  • 理解為什么你需要能夠預(yù)測股票價(jià)格的變動(dòng)。

  • 下載數(shù)據(jù) - 使用從雅虎財(cái)經(jīng)收集的股市數(shù)據(jù)

  • 分割訓(xùn)練-測試數(shù)據(jù),并進(jìn)行數(shù)據(jù)歸一化

  • 應(yīng)用單步預(yù)測技術(shù)。

  • 討論LSTM模型。

  • 用當(dāng)前的數(shù)據(jù)預(yù)測和可視化未來的股票市場

為什么你需要時(shí)間序列模型?

你希望對股票價(jià)格進(jìn)行正確的建模,所以作為一個(gè)股票買家,你可以合理地決定何時(shí)買入股票,何時(shí)賣出股票以獲得利潤。這就是時(shí)間序列模型的作用。你需要好的機(jī)器學(xué)習(xí)模型,它可以觀察一連串?dāng)?shù)據(jù)的歷史,并正確預(yù)測該序列的未來數(shù)據(jù)。

提示:股票市場的價(jià)格是高度不可預(yù)測和波動(dòng)的。這意味著數(shù)據(jù)中沒有一致的模式,使你能夠近乎完美地模擬股票價(jià)格隨時(shí)間變化。

然而,我們不要一味地認(rèn)為這只是一個(gè)隨機(jī)的或者隨機(jī)的過程,機(jī)器學(xué)習(xí)沒有希望。我們至少對數(shù)據(jù)進(jìn)行建模,做出的預(yù)測與數(shù)據(jù)的實(shí)際行為相關(guān)。換句話說,你不需要未來確切的股票價(jià)值,而是需要股票價(jià)格的變動(dòng)(也就是說,如果它在不久的將來會(huì)上漲或下跌)。

#?可用的庫import?numpy?as?npimport?tensorflow?as?tf

下載數(shù)據(jù)

股票價(jià)格有幾種不同的變量。它們是

  • 開盤:當(dāng)天的開盤股票價(jià)格

  • 收盤價(jià):當(dāng)天的收盤股價(jià)

  • 高點(diǎn):數(shù)據(jù)中最高的股票價(jià)格

  • 低點(diǎn):當(dāng)天的最低股價(jià)

獲取數(shù)據(jù)

你要利用航空公司的股票市場價(jià)格來進(jìn)行預(yù)測,所以你把股票代碼設(shè)置為 "AAL"。此外,你還定義了一個(gè)url_string,它將返回一個(gè)JSON文件,其中包含航空公司過去20年的所有股市數(shù)據(jù),以及一個(gè)file_to_save,它是你保存數(shù)據(jù)的文件。

接下來,指定條件:如果你還沒有保存數(shù)據(jù),從你在url_string中設(shè)置的URL中抓取數(shù)據(jù);把日期、低點(diǎn)、高點(diǎn)、成交量、收盤價(jià)、開盤價(jià)存儲到一個(gè)pandas DataFrame df中,把它保存到file_to_save。

????#?從URL中抓取數(shù)據(jù)????#?將日期、低點(diǎn)、高點(diǎn)、成交量、收盤價(jià)、開盤價(jià)存儲到Pandas?DataFrame中????????????#提取股票市場數(shù)據(jù)????????????df?=?pd.DataFrame(columns=['Date',?'Low',?'High',?'Close',?'?Open'])??????????????print('數(shù)據(jù)保存到:%s'%file_to_save)????????????#?如果數(shù)據(jù)已經(jīng)存在,只需從CSV中加載即可????否則。????????print('文件已經(jīng)存在,從CSV中加載數(shù)據(jù)')????????df?=?pd.read_csv(file_to_save)

數(shù)據(jù)探索

在這里你將把收集的數(shù)據(jù)輸出到DataFrame中。你還應(yīng)該確保數(shù)據(jù)是按日期排序的,因?yàn)閿?shù)據(jù)的順序在時(shí)間序列建模中至關(guān)重要。

#?按日期對數(shù)據(jù)框架進(jìn)行排序df?=?df.sort_values('Date')#?仔細(xì)檢查結(jié)果df.head()

數(shù)據(jù)可視化

現(xiàn)在讓我們來看看是什么樣的數(shù)據(jù)。

plot(range(df.shape[0]),(df)/2.0)

這張圖已經(jīng)說明了很多問題。我選擇這家公司而不是其他公司的原因是,這張圖隨著時(shí)間的推移,股票價(jià)格有不同表現(xiàn)行為。這將使模型學(xué)習(xí)更加穩(wěn)健,并且給你一個(gè)價(jià)格變化來測試對各種情況的預(yù)測有多好。

另一個(gè)需要注意的是,接近2017年的數(shù)值要比接近20世紀(jì)70年代的數(shù)值高得多,而且波動(dòng)也大。因此,你需要確保數(shù)據(jù)在整個(gè)時(shí)間范圍內(nèi)表現(xiàn)為類似的價(jià)格范圍,需要將數(shù)據(jù)標(biāo)準(zhǔn)化。

點(diǎn)擊標(biāo)題查閱相關(guān)內(nèi)容

R語言Keras用RNN、雙向RNNs遞歸神經(jīng)網(wǎng)絡(luò)、LSTM分析預(yù)測溫度時(shí)間序列、 IMDB電影評分情感

左右滑動(dòng)查看更多

01

02

03

04

將數(shù)據(jù)分割成訓(xùn)練集和測試集

你將使用通過取一天中最高和最低價(jià)格的平均值計(jì)算出的中間價(jià)格。

現(xiàn)在你可以把訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)分開。訓(xùn)練數(shù)據(jù)將是時(shí)間序列的前4000個(gè)數(shù)據(jù)點(diǎn),其余的將是測試數(shù)據(jù)。

train_data?=?mid[:4000]test_data?=?mid[4000:]

標(biāo)準(zhǔn)化數(shù)據(jù)

現(xiàn)在你需要定義標(biāo)準(zhǔn)化來規(guī)范數(shù)據(jù)。將訓(xùn)練和測試數(shù)據(jù)變化為[data_size, num_features]的維度。

將測試數(shù)據(jù)和訓(xùn)練數(shù)據(jù)相對于訓(xùn)練數(shù)據(jù)歸一。scaler?=?MinMaxScaler()

由于你先前的觀察,即不同時(shí)間段的數(shù)據(jù)有不同的值范圍,通過將全序列分割成窗口來標(biāo)準(zhǔn)化數(shù)據(jù)。如果你不這樣做,早期的數(shù)據(jù)將接近于0,對學(xué)習(xí)過程不會(huì)有太大的價(jià)值。這里你選擇了一個(gè)800的窗口大小。

提示:在選擇窗口大小時(shí),不要太小,因?yàn)楫?dāng)你進(jìn)行窗口標(biāo)準(zhǔn)化時(shí),會(huì)在每個(gè)窗口的最末端引入一個(gè)斷點(diǎn),因?yàn)槊總€(gè)窗口都是獨(dú)立標(biāo)準(zhǔn)化的。

#?用訓(xùn)練數(shù)據(jù)和平滑數(shù)據(jù)訓(xùn)練window_size?=?800scaler.transform(train_data[di:di+window_size,:])

將數(shù)據(jù)重塑為[data_size]的形狀。

#?重塑訓(xùn)練和測試數(shù)據(jù)reshape(-1)#?對測試數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理scaler.transform(test_data).reshape(-1)

現(xiàn)在你可以使用指數(shù)移動(dòng)平均線對數(shù)據(jù)進(jìn)行平滑處理。

請注意,你應(yīng)該只平滑訓(xùn)練數(shù)據(jù)。

#?現(xiàn)在進(jìn)行指數(shù)移動(dòng)平均平滑處理#?所以數(shù)據(jù)會(huì)比原來的鋸齒狀數(shù)據(jù)有一個(gè)更平滑的曲線??EMA?=?gamma*train[i]?+?(1-gamma)*EMA??train[i]?=?EMA

通過平均法進(jìn)行單步超前預(yù)測

平均法允許你通過將未來的股票價(jià)格表示為以前觀察到的股票價(jià)格的平均值來進(jìn)行預(yù)測(通常是提前一個(gè)時(shí)間步)。下面看兩種平均技術(shù);標(biāo)準(zhǔn)平均法和指數(shù)移動(dòng)平均法。你將對這兩種算法產(chǎn)生的結(jié)果進(jìn)行定性(目測)和定量(平均平方誤差)的評估。

平均平方誤差(MSE)的計(jì)算方法是:取前一步的真實(shí)值和預(yù)測值之間的平方誤差,并對所有的預(yù)測值進(jìn)行平均。

標(biāo)準(zhǔn)平均

可以通過首先嘗試將其作為一個(gè)平均計(jì)算問題的模型來理解這個(gè)問題的難度。首先,嘗試預(yù)測未來的股票市場價(jià)格(例如,xt+1),作為一個(gè)固定大小的窗口(例如,xt-N,...,xt)(例如之前的100天)內(nèi)先前觀察到的股票市場價(jià)格的平均值。此后,嘗試更高級的 "指數(shù)移動(dòng)平均 "方法,看看它的效果如何。然后,進(jìn)入長短期記憶模型

首先,正常的平均數(shù)。

換句話說,你說t+1的預(yù)測是你在t到t-N的窗口內(nèi)觀察到的所有股票價(jià)格的平均值。

????pred.append(np.mean(train[idx-window_size:idx]))????mse_errors.append((std_avg[-1]-train[pred_idx])**2)

MSE:?0.00418

看一下下面的平均結(jié)果。它與股票的實(shí)際行為相當(dāng)接近。接下來,你將看到一個(gè)更準(zhǔn)確的一步預(yù)測方法。

plt.plot(std_avg_pred)plt.legend(fontsize=18)plt.show()

那么,上面的圖表(和MSE)說明了什么?

似乎對于非常短的預(yù)測(提前一天)來說,這個(gè)模型還不算太差。鑒于股票價(jià)格不會(huì)在一夜之間從0變化到100,這種行為是合理的。接下來,使用指數(shù)移動(dòng)平均線。

指數(shù)移動(dòng)平均線

你可能已經(jīng)在互聯(lián)網(wǎng)上看到一些文章,使用非常復(fù)雜的模型,并預(yù)測了幾乎準(zhǔn)確的股票市場行為。但是請注意! 這些只是視覺上的錯(cuò)覺,并不是由于學(xué)到了有用的東西。你將在下面看到如何用一個(gè)簡單的平均法來復(fù)制這種行為。

在指數(shù)移動(dòng)平均法中,你計(jì)算xt+1為。

其中?

?和?

?是在一段時(shí)間內(nèi)保持的指數(shù)移動(dòng)平均數(shù)值。.

上述公式基本上是計(jì)算t+1時(shí)間步長的指數(shù)移動(dòng)平均線,并將其作為超前一步的預(yù)測。γ決定最近的預(yù)測對EMA的貢獻(xiàn)是什么。例如,γ=0.1只能得到當(dāng)前值的10%進(jìn)入EMA。因?yàn)槟阒蝗∽罱囊恍〔糠?,它允許保留你在平均數(shù)中很早看到的更早的值。請看下面用于預(yù)測向前一步的情況。

for?idx?in?range(1,N):????mean?=?mean*dec?+?(1.0-de)*train[idx-1]????pred.append(mean)

MSE:?0.00003

plt.plot(mid_data)plt.plot(pred)

如果指數(shù)式移動(dòng)平均數(shù)這么好,為什么還需要更好的模型?

擬合結(jié)果很好,遵循真實(shí)的分布(并且由非常低的MSE證明)。實(shí)際上,僅憑第二天的股票市場價(jià)格是沒有意義的。就我個(gè)人而言,我想要的不是第二天的確切股市價(jià)格,而是未來30天的股市價(jià)格是上漲還是下跌。嘗試這樣做,你會(huì)發(fā)現(xiàn)EMA方法的缺陷。

現(xiàn)在嘗試在窗口中進(jìn)行預(yù)測(比如你預(yù)測未來2天的窗口,而不是僅僅預(yù)測未來一天)。然后你會(huì)意識到EMA會(huì)有多大的誤差。下面是一個(gè)例子。

預(yù)測超過一步的未來股價(jià)

我們假設(shè)數(shù)值,比如xt=0.4,EMA=0.5,γ=0.5

  • 假設(shè)你得到的輸出有以下公式

所以你有?

所以?

所以下一個(gè)預(yù)測Xt+2變成了

這就是?

或者在這個(gè)例子中,?

所以,無論你對未來進(jìn)行多少步預(yù)測,你都會(huì)在所有未來的預(yù)測步中不斷得到相同的答案。

你有一個(gè)解決方案,可以輸出有用的信息,就是看看基于動(dòng)量的算法。它們根據(jù)過去最近的數(shù)值是上升還是下降(不是準(zhǔn)確的數(shù)值)進(jìn)行預(yù)測。例如,它們會(huì)說第二天的價(jià)格可能會(huì)降低,如果過去幾天的價(jià)格一直在下降,這聽起來很合理。然而,我們使用一個(gè)更復(fù)雜的模型:LSTM模型。

這些模型已經(jīng)在時(shí)間序列預(yù)測領(lǐng)域非常熱門,因?yàn)樗鼈冊跁r(shí)間序列數(shù)據(jù)的建模方面非常出色。你將看到數(shù)據(jù)中是否真的隱藏有你可以利用的模式。

LSTM簡介:對股票走勢進(jìn)行遠(yuǎn)期預(yù)測

長短期記憶模型是極其強(qiáng)大的時(shí)間序列模型。它們可以預(yù)測未來任意步。LSTM模塊(或單元)有5個(gè)基本組成部分,使其能夠?qū)﹂L期和短期數(shù)據(jù)進(jìn)行建模。

  • 單元狀態(tài)(ct)--這代表了單元的內(nèi)部記憶,它同時(shí)存儲了短期記憶和長期記憶

  • 隱藏狀態(tài)(ht)--這是根據(jù)當(dāng)前輸入、以前的_隱藏狀態(tài)_和當(dāng)前的單元輸入計(jì)算出來的輸出狀態(tài)信息,你最終會(huì)用它來預(yù)測未來的股市價(jià)格。此外,隱藏狀態(tài)可以決定只檢索存儲在單元狀態(tài)中的短期或長期或兩種類型的記憶來進(jìn)行下一次預(yù)測。

  • 輸入門(it)--決定當(dāng)前輸入的信息有多少流向單元狀態(tài)

  • 遺忘門(ft)--決定有多少來自當(dāng)前輸入和前一個(gè)單元狀態(tài)的信息流入當(dāng)前單元狀態(tài)

  • 輸出門(ot)--決定多少信息從當(dāng)前單元狀態(tài)流入隱藏狀態(tài),因此,如果需要,LSTM可以只挑選長期記憶或短期記憶和長期記憶。

TensorFlow為實(shí)現(xiàn)時(shí)間序列模型提供了一個(gè)不錯(cuò)的API(稱為RNN API)。

數(shù)據(jù)生成器

你首先要實(shí)現(xiàn)一個(gè)數(shù)據(jù)生成器來訓(xùn)練你的模型。這個(gè)數(shù)據(jù)生成器將有一個(gè)名為.unroll_batches(...)的方法,它將輸出一組依次獲得的num_unrollings批次的輸入數(shù)據(jù),其中一個(gè)批次的數(shù)據(jù)大小為[batch_size, 1]。那么每一批輸入數(shù)據(jù)都會(huì)有一個(gè)相應(yīng)的輸出數(shù)據(jù)批。

例如,如果num_unrollings=3,batch_size=4,一組unrolled批次。

  • 輸入數(shù)據(jù)

  • 輸出數(shù)據(jù):

數(shù)據(jù)增強(qiáng)(Data?Augmentation)

數(shù)據(jù)增強(qiáng)(Data?Augmentation)又稱為數(shù)據(jù)增廣。另外,為了使你的模型穩(wěn)健,你不會(huì)讓x_t的輸出總是x_t+1。相反,你將從x_t+1,x_t+2,...,xt+N的集合中隨機(jī)抽取一個(gè)輸出,其中N是一個(gè)小窗口大小。

這里你要做以下假設(shè):

  • x_t+1,x_t+2,...,xt+N不會(huì)彼此相距很遠(yuǎn)。

我個(gè)人認(rèn)為這對股票走勢預(yù)測來說是一個(gè)合理的假設(shè)。

下面你直觀地說明一批數(shù)據(jù)是如何產(chǎn)生的。


定義超參數(shù)

在本節(jié)中,你將定義幾個(gè)超參數(shù)。D是輸入的維度。這很簡單,因?yàn)槟惆阎暗墓善眱r(jià)格作為輸入,并預(yù)測下一個(gè)股票價(jià)格,這應(yīng)該是1。

然后你有num_unrollings,這是一個(gè)與用于優(yōu)化LSTM模型的通過時(shí)間的反向傳播(BPTT)有關(guān)的超參數(shù)。這表示你在一個(gè)優(yōu)化步驟中考慮多少個(gè)連續(xù)的時(shí)間步驟??梢哉J(rèn)為,不是通過查看單個(gè)時(shí)間步驟來優(yōu)化模型,而是通過查看num_unrollings時(shí)間步驟來優(yōu)化網(wǎng)絡(luò)。越大越好。

然后,你有batch_size。批量大小是指在一個(gè)時(shí)間步長中考慮多少個(gè)數(shù)據(jù)樣本。

接下來你定義num_nodes,它代表每個(gè)單元中隱藏神經(jīng)元的數(shù)量。你可以看到,在這個(gè)例子中,有三層LSTMs。

D?=?1?#?數(shù)據(jù)的維度。因?yàn)槟愕臄?shù)據(jù)是一維的,所以是1unrollings?=?50?#?未來的時(shí)間步數(shù)。batch_size?=?500?#?一個(gè)批次中的樣本數(shù)num_nodes?=?[200,200,150]?#?我們所使用的深層LSTM堆棧中每一層的隱藏節(jié)點(diǎn)數(shù)量n_layers?=?len(num_nodes)?#?層的數(shù)量dropout?=?0.2?#?丟棄量

定義輸入和輸出

接下來你要為訓(xùn)練輸入和標(biāo)簽定義占位符。你有一個(gè)輸入占位符的列表,其中每個(gè)占位符都包含一個(gè)批次的數(shù)據(jù)。而列表中有num_unrollings占位符,這些占位符將被一次性用于一個(gè)優(yōu)化步驟。

#輸入數(shù)據(jù)train_inputs,?train_outputs?=?[],[]

定義LSTM和回歸層的參數(shù)

你將有三層LSTM和一個(gè)線性回歸層,用w和b表示,它采取最后一個(gè)長短期記憶單元的輸出,并輸出下一個(gè)時(shí)間步驟的預(yù)測。此外,你可以讓dropout實(shí)現(xiàn)LSTM單元,因?yàn)樗鼈兛梢蕴岣咝阅?,減少過擬合。

計(jì)算LSTM輸出并將其傳遞到回歸層以獲得最終預(yù)測結(jié)果

在這一節(jié)中,你首先創(chuàng)建TensorFlow變量(c和h),這些變量將保持長短時(shí)記憶單元的狀態(tài)和隱藏狀態(tài)。然后,你將訓(xùn)練輸入的列表轉(zhuǎn)換為[unrollings, batch_size, D]的形狀。然后用ynamic_rnn函數(shù)計(jì)算LSTM輸出,并將輸出分割成num張量列表。

#?創(chuàng)建單元格狀態(tài)和隱藏狀態(tài)變量保持LSTM的狀態(tài)for?li?in?range(n):??c.append(tf.Variable(tf.zeros([batch_size,?num_nodes[li]])))??h.append(tf.Variable(tf.zeros([batch_size,?num_nodes[li]])))#?做幾次張量轉(zhuǎn)換,因?yàn)楹瘮?shù)dynamic_rnn要求輸出必須是一種特定的格式。

損失計(jì)算和優(yōu)化器

現(xiàn)在,要計(jì)算損失。對于每一批預(yù)測和真實(shí)輸出,都要計(jì)算出平均平方誤差。而你把所有這些均方差損失加在一起(不是平均)。最后,定義你要使用的優(yōu)化器來優(yōu)化神經(jīng)網(wǎng)絡(luò)。在這種情況下,你可以使用Adam,它是一個(gè)非常新的、表現(xiàn)良好的優(yōu)化器。

#?在計(jì)算損失時(shí),你需要注意準(zhǔn)確的形式,因?yàn)槟阌?jì)算的是所有未滾動(dòng)的步的損失#?因此,取每個(gè)批的平均誤差,并得到所有未滾動(dòng)步的總和range(n)]):??for?ui?in?range(nums):????loss?+=?tf.mean(0.5*(splits[ui]-train[ui])**2)

預(yù)測相關(guān)的計(jì)算

在這里,你定義了預(yù)測相關(guān)的TensorFlow操作。首先,定義一個(gè)用于輸入的占位符(sample_inputs),然后與訓(xùn)練階段類似,你定義預(yù)測的狀態(tài)變量(sample_c和sample_h)。最后,你用dynamic_rnn函數(shù)計(jì)算預(yù)測結(jié)果,然后通過回歸層(w和b)發(fā)送輸出。你還應(yīng)該定義reset_sample_state操作,它可以重置單元狀態(tài)和隱藏狀態(tài)。

#?為預(yù)測階段保持LSTM狀態(tài)for?li?in?range(n_layers):??sample_c.append(tf.Variable(tf.zeros([1,?num_nodes[li]]))??sample_h.append(tf.Variable(tf.zeros([1,?num_nodes[li]])))

運(yùn)行LSTM

在這里,你將訓(xùn)練并預(yù)測幾個(gè)歷時(shí)的股票價(jià)格走勢,并觀察預(yù)測結(jié)果是否隨著時(shí)間的推移而變得更好或更差。

  • 在時(shí)間序列上定義一個(gè)測試起點(diǎn)集(test_points_seq)來評估模型。

  • 對于每個(gè)訓(xùn)練輪數(shù)

  • 對于訓(xùn)練數(shù)據(jù)的完整序列長度

  • 通過迭代測試點(diǎn)之前的num_unrollings數(shù)據(jù)點(diǎn)來更新LSTM狀態(tài)

  • 連續(xù)進(jìn)行n_predict_once步驟的預(yù)測,將之前的預(yù)測作為當(dāng)前輸入。

  • 計(jì)算預(yù)測的n_predict_once點(diǎn)與這些時(shí)間戳的真實(shí)股票價(jià)格之間的MSE損失

  • 展開一組num_unrollings的批次

  • 用未滾動(dòng)的批次訓(xùn)練神經(jīng)網(wǎng)絡(luò)

  • 計(jì)算平均訓(xùn)練損失

  • 對于測試集的每個(gè)起點(diǎn)

...

預(yù)測可視化

你可以看到MSE損失是如何隨著訓(xùn)練量的增加而下降的。這是一個(gè)好兆頭,表明模型正在學(xué)習(xí)一些有用的東西。你可以將網(wǎng)絡(luò)的MSE損失與你做標(biāo)準(zhǔn)平均時(shí)得到的MSE損失(0.004)進(jìn)行比較。你可以看到,LSTM比標(biāo)準(zhǔn)平均法做得更好。而且你知道,標(biāo)準(zhǔn)平均法(雖然不完美)合理地遵循了真實(shí)的股票價(jià)格變動(dòng)。

best_epoch?=?28?#?用得到最佳結(jié)果的epoch#?繪制預(yù)測值隨時(shí)間變化的情況#?繪制低α值的舊預(yù)測和高α值的新預(yù)測????????plt.plot(xval,yval)#?預(yù)測你得到的最佳測試預(yù)測值plt.plot(range(df.shap),mid_data)????plt.plot(xval,yval)

雖然不完美,但LSTM似乎能夠在大多數(shù)時(shí)候正確預(yù)測股票價(jià)格行為。請注意,你所做的預(yù)測大致在0和1.0的范圍內(nèi)(也就是說,不是真實(shí)的股票價(jià)格)。這沒關(guān)系,因?yàn)槟泐A(yù)測的是股票價(jià)格的走勢,而不是價(jià)格本身。

總結(jié)

在本教程中,首先介紹了你為什么需要為股票價(jià)格建模的動(dòng)機(jī)。接著是解釋數(shù)據(jù)。然后兩種平均技術(shù),它們允許你對未來一步進(jìn)行預(yù)測。接下來你看到,當(dāng)你需要預(yù)測超過一步的未來時(shí),這些方法是無用的。此后,討論了如何使用LSTM來進(jìn)行未來多步的預(yù)測。最后,將結(jié)果可視化,看到模型(雖然不完美)在正確預(yù)測股票價(jià)格走勢方面相當(dāng)出色。

在這里,我陳述一下本教程的幾個(gè)收獲。

  • 股票價(jià)格/走勢預(yù)測是一項(xiàng)極其困難的任務(wù)。我個(gè)人認(rèn)為,不應(yīng)該把任何一個(gè)股票預(yù)測模型視為理所當(dāng)然,盲目地依賴它們。然而模型可能在大多數(shù)時(shí)候能夠正確預(yù)測股票價(jià)格走勢,但不總是如此。

  • 不要被外面那些顯示預(yù)測曲線與真實(shí)股票價(jià)格完全重合的文章所迷惑。這可以用一個(gè)簡單的平均技術(shù)來復(fù)制,在實(shí)踐中它是沒有用的。更明智的做法是預(yù)測股票價(jià)格的變動(dòng)。

  • 該模型的超參數(shù)對你獲得的結(jié)果非常敏感。因此,要做的一件非常好的事情是對超參數(shù)運(yùn)行一些超參數(shù)優(yōu)化技術(shù)(例如,網(wǎng)格搜索/隨機(jī)搜索)。下面我列出了一些最關(guān)鍵的超參數(shù)

  • 優(yōu)化器的學(xué)習(xí)率

  • 層數(shù)和每層的隱藏單元的數(shù)量

  • 優(yōu)化器。我發(fā)現(xiàn)Adam的表現(xiàn)最好

  • 模型的類型。你可以嘗試GRU/標(biāo)準(zhǔn)LSTM和評估性能差異。

本文摘選?《?Python中TensorFlow的長短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM)、指數(shù)移動(dòng)平均法預(yù)測股票市場和可視化?》?,點(diǎn)擊“閱讀原文”獲取全文完整資料。

點(diǎn)擊標(biāo)題查閱往期內(nèi)容

RNN循環(huán)神經(jīng)網(wǎng)絡(luò) 、LSTM長短期記憶網(wǎng)絡(luò)實(shí)現(xiàn)時(shí)間序列長期利率預(yù)測
結(jié)合新冠疫情COVID-19股票價(jià)格預(yù)測:ARIMA,KNN和神經(jīng)網(wǎng)絡(luò)時(shí)間序列分析
深度學(xué)習(xí):Keras使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡單文本分類分析新聞組數(shù)據(jù)
用PyTorch機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)分類預(yù)測銀行客戶流失模型
PYTHON用LSTM長短期記憶神經(jīng)網(wǎng)絡(luò)的參數(shù)優(yōu)化方法預(yù)測時(shí)間序列洗發(fā)水銷售數(shù)據(jù)
Python用Keras神經(jīng)網(wǎng)絡(luò)序列模型回歸擬合預(yù)測、準(zhǔn)確度檢查和結(jié)果可視化
R語言深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò) (CNN)對 CIFAR 圖像進(jìn)行分類:訓(xùn)練與結(jié)果評估可視化
深度學(xué)習(xí):Keras使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡單文本分類分析新聞組數(shù)據(jù)
Python用LSTM長短期記憶神經(jīng)網(wǎng)絡(luò)對不穩(wěn)定降雨量時(shí)間序列進(jìn)行預(yù)測分析
R語言深度學(xué)習(xí)Keras循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)模型預(yù)測多輸出變量時(shí)間序列
R語言KERAS用RNN、雙向RNNS遞歸神經(jīng)網(wǎng)絡(luò)、LSTM分析預(yù)測溫度時(shí)間序列、 IMDB電影評分情感
Python用Keras神經(jīng)網(wǎng)絡(luò)序列模型回歸擬合預(yù)測、準(zhǔn)確度檢查和結(jié)果可視化
Python用LSTM長短期記憶神經(jīng)網(wǎng)絡(luò)對不穩(wěn)定降雨量時(shí)間序列進(jìn)行預(yù)測分析
R語言中的神經(jīng)網(wǎng)絡(luò)預(yù)測時(shí)間序列:多層感知器(MLP)和極限學(xué)習(xí)機(jī)(ELM)數(shù)據(jù)分析報(bào)告
R語言深度學(xué)習(xí):用keras神經(jīng)網(wǎng)絡(luò)回歸模型預(yù)測時(shí)間序列數(shù)據(jù)
Matlab用深度學(xué)習(xí)長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對文本數(shù)據(jù)進(jìn)行分類
R語言KERAS深度學(xué)習(xí)CNN卷積神經(jīng)網(wǎng)絡(luò)分類識別手寫數(shù)字圖像數(shù)據(jù)(MNIST)
MATLAB中用BP神經(jīng)網(wǎng)絡(luò)預(yù)測人體脂肪百分比數(shù)據(jù)
Python中用PyTorch機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)分類預(yù)測銀行客戶流失模型
R語言實(shí)現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸數(shù)據(jù)分析
SAS使用鳶尾花(iris)數(shù)據(jù)集訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)(ANN)模型
【視頻】R語言實(shí)現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸數(shù)據(jù)分析
Python使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡單文本分類
R語言用神經(jīng)網(wǎng)絡(luò)改進(jìn)Nelson-Siegel模型擬合收益率曲線分析
R語言基于遞歸神經(jīng)網(wǎng)絡(luò)RNN的溫度時(shí)間序列預(yù)測
R語言神經(jīng)網(wǎng)絡(luò)模型預(yù)測車輛數(shù)量時(shí)間序列
R語言中的BP神經(jīng)網(wǎng)絡(luò)模型分析學(xué)生成績
matlab使用長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對序列數(shù)據(jù)進(jìn)行分類
R語言實(shí)現(xiàn)擬合神經(jīng)網(wǎng)絡(luò)預(yù)測和結(jié)果可視化
用R語言實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測股票實(shí)例
使用PYTHON中KERAS的LSTM遞歸神經(jīng)網(wǎng)絡(luò)進(jìn)行時(shí)間序列預(yù)測
python用于NLP的seq2seq模型實(shí)例:用Keras實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)機(jī)器翻譯
用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類


Python中TensorFlow的長短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM)、指數(shù)移動(dòng)平均法預(yù)測股票市場和可視化的評論 (共 條)

分享到微博請遵守國家法律
临西县| 兴隆县| 岑巩县| 教育| 留坝县| 遂平县| 宣城市| 九寨沟县| 六盘水市| 西藏| 田林县| 北京市| 绥德县| 宜章县| 上思县| 澎湖县| 金溪县| 鲁山县| 若尔盖县| 邛崃市| 涿州市| 千阳县| 武威市| 承德县| 庆阳市| 万山特区| 星座| 宣恩县| 桐柏县| 丹棱县| 乌拉特前旗| 天镇县| 孟津县| 和硕县| 嘉祥县| 青海省| 辽宁省| 宝应县| 买车| 碌曲县| 蓬安县|