Python TensorFlow循環(huán)神經(jīng)網(wǎng)絡(luò)RNN-LSTM神經(jīng)網(wǎng)絡(luò)預(yù)測股票市場價格時間序列和MSE評估準(zhǔn)
原文鏈接:http://tecdat.cn/?p=26562
原文出處:拓端數(shù)據(jù)部落公眾號
該項目包括:
自 2000 年 1 月以來的股票價格數(shù)據(jù)。我們使用的是 Microsoft 股票。
將時間序列數(shù)據(jù)轉(zhuǎn)換為分類問題。
使用 TensorFlow 的 LSTM 模型
由 MSE 衡量的預(yù)測準(zhǔn)確性
GPU?設(shè)置(如果可用)
?
gpus = tf.config.experimental.li
讀取數(shù)據(jù)集
有幾種方法可以獲取股市數(shù)據(jù)。以下數(shù)據(jù)集是使用 R BatchGetSymbols 生成的。
#加載數(shù)據(jù)集
# ref.date是數(shù)組的第一列
datang = read_csv('stopriceo.csv', header=0)

pd.pivot_table(datong)

我們的股票時間序列
我們?yōu)檫@個項目選擇了微軟(股票代碼 MSFT)。
plt.rrms['fgre.dpi'] = 300
plt.plot(dfte['MSFT'])

時間序列顯然不是平穩(wěn)的,這是大多數(shù)預(yù)測模型所假設(shè)的屬性。我們可以對時間序列應(yīng)用變換,直到它達(dá)到平穩(wěn)狀態(tài)。Dickey-Fuller 檢驗使我們能夠確定我們的時間序列是否具有季節(jié)性。
在這里,我們將應(yīng)用對數(shù)轉(zhuǎn)換來解決股票市場的指數(shù)行為。
其他有助于預(yù)測模型的轉(zhuǎn)換:
移動平均線
差分化
df1 = datt['MSFT']
# 我們對數(shù)據(jù)集進(jìn)行了對數(shù)轉(zhuǎn)換
df1 = np.log(df1)

# 替代方案:我們可以對時間序列進(jìn)行差分,從而去除季節(jié)性和平均值的變化。
# 創(chuàng)建一個差分序列
#dfdiff = diffe(df1,1)
預(yù)處理
在這里,我們對時間序列數(shù)據(jù)應(yīng)用標(biāo)準(zhǔn)預(yù)處理。
在時間序列中,我們沒有標(biāo)簽,但我們有時間序列的未來值,因此輸出可以是 x(t),給定 x(t-1) 作為輸入。這是將數(shù)據(jù)集構(gòu)建為監(jiān)督問題的一種實用(且直觀)的方法。
scaer = ixSer(fatue_ange = (0,1))
scer.i_rrm(np.array(df1).rehape(-1,1))


LSTM?模型
我們在這里實現(xiàn)了一個堆疊的 LSTM 模型。
LSTM 網(wǎng)絡(luò)是一種遞歸神經(jīng)網(wǎng)絡(luò),能夠?qū)W習(xí)序列預(yù)測問題中的序列依賴性。LSTM 模型主要用于語音識別、自然語言處理的上下文中。最近,它們也被應(yīng)用于時間序列數(shù)據(jù)的分析。
from tensorflow.keras.models import Sequential
model.add(LSTM(50, retsueces = True
#stacked LSTM
model.add(Dropout(0.1))

history

plt.plot(history.history

表現(xiàn)
import math
from sklearn.metrics import mean_squared_error

plt.rcParams['figure.dpi'] = 300
plt.rcParams['savefig.dpi'] = 300
#移位預(yù)測
lokback = ie_step
trinPrectPot = numpy.empty_like(df1)
traireditPlot[:,:] = np.nan
in_y = scaler.nesetsfrm(df1)
plt.plot

plt.plot(iv_y)

未來 30 天的預(yù)測
我們現(xiàn)在可以遞歸地應(yīng)用該模型,通過估計第二天的 (t+1) 價格,然后再次將其作為輸入來推斷 t+2 天的價格,依此類推。這個預(yù)測當(dāng)然會有更大的誤差,因為每個預(yù)測的日子都會帶來很大的不確定性。然而,這個預(yù)測確實會告訴我們模型是否從過去的數(shù)據(jù)中學(xué)到了任何東西。
# 預(yù)測未來30天的情況
len(tesdata) # 1211
# 我認(rèn)為在test_data中,最后一天是5月22日,例如
# 對于5月23日,我需要100個前一天的數(shù)據(jù)
x_input = test_data[(len

while(i<ftue_teps):
if(len(tep_put)>ie_sep):
x_input = np.array(tepinut[1:])
x_input = x_input.reshap


plt.plot(dy_ew, scaler.inverse_transf

plt.plot(df3[1000:])


最受歡迎的見解
1.用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類
2.Python中利用長短期記憶模型LSTM進(jìn)行時間序列預(yù)測分析 – 預(yù)測電力消耗數(shù)據(jù)
3.python在Keras中使用LSTM解決序列問題
4.Python中用PyTorch機(jī)器學(xué)習(xí)分類預(yù)測銀行客戶流失模型
5.R語言多元Copula GARCH 模型時間序列預(yù)測
6.在r語言中使用GAM(廣義相加模型)進(jìn)行電力負(fù)荷時間序列分析
7.R語言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于預(yù)測時間序列數(shù)
8.R語言估計時變VAR模型時間序列的實證研究分析案例
9.用廣義加性模型GAM進(jìn)行時間序列分析