時間序列分析與LSTM網(wǎng)絡(luò)原理與實踐_第1頁
時間序列分析與LSTM網(wǎng)絡(luò)原理與實踐_第2頁
時間序列分析與LSTM網(wǎng)絡(luò)原理與實踐_第3頁
時間序列分析與LSTM網(wǎng)絡(luò)原理與實踐_第4頁
時間序列分析與LSTM網(wǎng)絡(luò)原理與實踐_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

時間序列分析與LSTM網(wǎng)絡(luò)

原理與實踐提綱時間序列分析與LSTM原理LSTM進(jìn)行時間序列預(yù)測實現(xiàn)

時間序列算法簡介LSTM是長短期記憶網(wǎng)絡(luò),是一種時間遞歸神經(jīng)網(wǎng)絡(luò),適合于處理和預(yù)測時間序列中間隔和延遲相對較長的重要事件。LSTM在算法中加入了一個判斷信息有用與否的“處理器”,這個處理器作用的結(jié)構(gòu)被稱為cell。一個cell當(dāng)中被放置了三扇門,分別叫做輸入門、遺忘門和輸出門。一個信息進(jìn)入LSTM的網(wǎng)絡(luò)當(dāng)中,可以根據(jù)規(guī)則來判斷是否有用。只有符合算法認(rèn)證的信息才會留下,不符的信息則通過遺忘門被遺忘。說起來無非就是一進(jìn)二出的工作原理,卻可以在反復(fù)運算下解決神經(jīng)網(wǎng)絡(luò)中長期存在的大問題。目前已經(jīng)證明,LSTM是解決長序依賴問題的有效技術(shù),并且這種技術(shù)的普適性非常高,導(dǎo)致帶來的可能性變化非常多。各研究者根據(jù)LSTM紛紛提出了自己的變量版本,這就讓LSTM可以處理千變?nèi)f化的垂直問題相對于傳統(tǒng)ARMA模型,

LSTM適合于處理和預(yù)測時間序列中間隔和延遲非常長的重要事件。在非線性預(yù)測能力、抽象能力或者集成學(xué)習(xí)能力上,LSTM具有明顯優(yōu)勢,且ARMA模型確定階數(shù)過程復(fù)雜繁瑣,而LSTM可自行學(xué)習(xí)相關(guān)參數(shù)。但LSTM的效果必須在龐大數(shù)據(jù)量基礎(chǔ)上才能發(fā)揮出色,在小樣本情況下ARMA往往比LSTM效果要好。LSTM算法簡介(神經(jīng)網(wǎng)絡(luò)基礎(chǔ)原理請看BP神經(jīng)網(wǎng)絡(luò))關(guān)鍵字提取流程數(shù)據(jù)清洗,序列切分,序列平穩(wěn)化劃分?jǐn)?shù)據(jù)集,測試集建立序列模型為模型添加適當(dāng)?shù)木W(wǎng)絡(luò)層,設(shè)計權(quán)重表達(dá)方式,正則化規(guī)則(或隨機(jī)失效),激活函數(shù)定義損失函數(shù),訓(xùn)練模式,提前停止機(jī)制模型訓(xùn)練模型檢驗應(yīng)用關(guān)于LSTM輸入序列,一般整理為3D張量,即[樣本量,序列,數(shù)據(jù)]關(guān)于數(shù)據(jù)切分,為獲得足夠詳盡的序列,一般采用滑動窗口切分,例如序列ABCD,窗口為2,預(yù)測一期,則序列劃分為[[ABC][BCD]]其余參數(shù)設(shè)置可見BP神經(jīng)網(wǎng)絡(luò)教程提綱時間序列分析與LSTM原理LSTM進(jìn)行時間序列預(yù)測實現(xiàn)LSTM實驗前提準(zhǔn)備系統(tǒng)準(zhǔn)備:centos6.8、Spark2.3.1、Pyrhon3.X,導(dǎo)入pandas,keras,numpy數(shù)據(jù)準(zhǔn)備:標(biāo)注普洱500指數(shù)。建模目的:訓(xùn)練時間序列模型對股票后期走勢進(jìn)行預(yù)測。實例:啟動python,讀取數(shù)據(jù)importnumpyasnpimportpandasaspdfromkeras.modelsimportSequentialfromkeras.layersimportDensefromkeras.layersimportLSTMfromkeras.layersimportDropoutimportkeras#讀取數(shù)據(jù)df=pd.read_csv('sp500.txt',

header=None)

#type:pd.DataFrame

data=np.array(df[0])

#數(shù)據(jù)整理,假設(shè)通過50個歷史數(shù)據(jù)預(yù)測未來一期,則先整理出訓(xùn)練數(shù)據(jù)集time_step=50

sequence_length=time_step+1

實例:序列拆分,平穩(wěn)化result=[]#獲取全部可能序列#序列平穩(wěn)化,本例選用相對變化率,即F(t)/F(0)-1forxin

range(len(df)-sequence_length):

data_cut=data[x:x+sequence_length]

#平穩(wěn)化

data_norm=[((x*1.0/(data_cut[0]+1))-1)forxindata_cut]

data_norm.append(data_cut[0])

result.append(data_norm)

result=np.array(result)實例:數(shù)據(jù)集劃分#隨機(jī)打亂并劃分訓(xùn)練集80%和測試集20%row=int(round(0.8*result.shape[0]))train=result[:row,:]

#數(shù)據(jù)形如[[1,2,3],[1,2,3]]np.random.shuffle(train)x_train=train[:,:-2]y_train=train[:,-2]x_test=result[row:,:-2]y_test=result[row:,-2]

mark_test=result[row:,-1]

x_train=np.reshape(x_train,(x_train.shape[0],x_train.shape[1],

1))

#數(shù)據(jù)形如[[1],[2],[3]],[[1],[2],[3]]]x_test=np.reshape(x_test,(x_test.shape[0],x_test.shape[1],

1))#構(gòu)建神經(jīng)網(wǎng)絡(luò)#模型為1->50->100->1網(wǎng)絡(luò)model=Sequential()

#序列型神經(jīng)網(wǎng)絡(luò),即網(wǎng)絡(luò)傳播路徑只有一條

#建立全連接層-首層需要指定輸入層維度model.add(LSTM(output_dim=50,

#輸出維度,配合下面return_sequences,返回[samples,timesteps,output_dim],即每個樣本進(jìn)入該層,返回[50,50]維數(shù)據(jù)

input_shape=(50,

1),

#輸入維度,上面整理的輸入張量每條序列有50個數(shù)組,每個值有一個元素

activation="tanh",

#激活函數(shù)

use_bias=True,

#使用偏置

return_sequences=True

#返回整個序列,由于需要連接下一層LSTM,所以需要輸出整個序列

))model.add(Dropout(0.2))

#連接20%概率隨機(jī)失效

model.add(LSTM(output_dim=100,

#輸出維度無指定return_sequences情況下,輸出[100]維數(shù)據(jù)

activation="tanh",

use_bias=True

))

#本層下接全連接層,無需返回序列,return_sequences默認(rèn)Falsemodel.add(Dropout(0.2))

model.add(Dense(units=1,

activation="linear",

use_bias=True,

))實例:構(gòu)建神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)實例:構(gòu)建訓(xùn)練模式并訓(xùn)練#建立評估函數(shù)#設(shè)計目標(biāo)誤差函數(shù),以及訓(xùn)練方法pile(loss='mean_squared_error',

optimizer="rmsprop")

#提前結(jié)束訓(xùn)練的閾值,下面參數(shù),觀察誤差,連續(xù)5次無改善.則結(jié)束訓(xùn)練early_stopping=keras.callbacks.EarlyStopping(monitor='loss',

patience=5,

verbose=0,

mode='auto')

#模型訓(xùn)練,寫入數(shù)據(jù),目標(biāo),迭代次數(shù),批數(shù),訓(xùn)練詳情(0不顯示),訓(xùn)練提早結(jié)束條件,分割5%作為驗證model.fit(x_train,y_train,

epochs=50,

batch_size=512,

verbose=1,

validation_split=0.05,

callbacks=[early_stopping])實例:模型預(yù)測評價#模型預(yù)測與評價pred=model.predict(x_test).reshape(len(x_test))#構(gòu)建評價數(shù)據(jù)F=pd.DataFrame({"y":y_test,

"pred":pred,

"mark_test":mark_test})F["pred"]=F["pred"].map(lambdax:x+1)*F["mark_test"].map(lambdax:x-1)F["y"]=F["y"].map(lambdax:x+1)*F["mark_test"].map(lambdax:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論