偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

利用 LSTM 神經(jīng)網(wǎng)絡預測股價走勢

人工智能 深度學習
長短期記憶 (LSTM) 神經(jīng)網(wǎng)絡屬于循環(huán)神經(jīng)網(wǎng)絡 (RNN) 的一種,特別適合處理和預測與時間序列相關的重要事件。

[[434750]]

Python中文社區(qū)(ID:python-china)

 LSTM 神經(jīng)網(wǎng)絡

長短期記憶 (LSTM) 神經(jīng)網(wǎng)絡屬于循環(huán)神經(jīng)網(wǎng)絡 (RNN) 的一種,特別適合處理和預測與時間序列相關的重要事件。以下面的句子作為一個上下文推測的例子:

“我從小在法國長大,我會說一口流利的??”

由于同一句話前面提到”法國“這個國家,且后面提到“說”這個動作。因此,LSTM便能從”法國“以及”說“這兩個長短期記憶中重要的訊號推測出可能性較大的”法語“這個結果。

K線圖與此類似,股價是隨著時間的流動及重要訊號的出現(xiàn)而做出反應的:

  •  在價穩(wěn)量縮的盤整區(qū)間中突然出現(xiàn)一帶量突破的大紅K,表示股價可能要上漲了
  •  在跳空缺口后出現(xiàn)島狀反轉,表示股價可能要下跌了
  •  在連漲幾天的走勢突然出現(xiàn)帶有長上下影線的十字線,表示股價有反轉的可能

LSTM 要做的事情就是找出一段時間區(qū)間的K棒當中有沒有重要訊號(如帶量紅K)并學習預測之后股價的走勢。

LSTM 股價預測實例

數(shù)據(jù)是以鴻海(2317)從2013年初到2017年底每天的開盤價、收盤價、最高價、最低價、以及成交量等數(shù)據(jù)。

首先將數(shù)據(jù)寫入并存至pandas的DataFrame,另外對可能有N/A的row進行剔除:

數(shù)據(jù)寫入: 

  1. import pandas as pd  
  2. foxconndfpd.read_csv('./foxconn_2013-2017.csv', index_col=0 )  
  3. foxconndf.dropna(how='any',inplace=True

為了避免原始數(shù)據(jù)太大或是太小沒有統(tǒng)一的范圍而導致 LSTM 在訓練時難以收斂,我們以一個最小最大零一正規(guī)化方法對數(shù)據(jù)進行修正: 

  1. from sklearn import preprocessing  
  2. def normalize(df):  
  3.     newdf= df.copy()  
  4.     min_max_scaler = preprocessing.MinMaxScaler()    
  5.     newdf['open'] = min_max_scaler.fit_transform(df.open.values.reshape(-1,1))  
  6.     newdf['low'] = min_max_scaler.fit_transform(df.low.values.reshape(-1,1))  
  7.     newdf['high'] = min_max_scaler.fit_transform(df.high.values.reshape(-1,1))  
  8.     newdf['volume'] = min_max_scaler.fit_transform(df.volume.values.reshape(-1,1))  
  9.     newdf['close'] = min_max_scaler.fit_transform(df.close.values.reshape(-1,1))    
  10.     return newdf  
  11. foxconndf_normnormalize(foxconndf) 

然后對數(shù)據(jù)進行訓練集與測試集的切割,另外也定義每一筆數(shù)據(jù)要有多長的時間框架: 

  1. import numpy as np  
  2. def data_helper(df, time_frame):   
  3.     # 數(shù)據(jù)維度: 開盤價、收盤價、最高價、最低價、成交量, 5維  
  4.     number_features = len(df.columns)  
  5.     # 將dataframe 轉換為 numpy array  
  6.     datavalue = df.as_matrix() 
  7.     result = []  
  8.     # 若想要觀察的 time_frame 為20天, 需要多加一天作為驗證答案  
  9.     for index in range( len(datavalue) - (time_frame+1) ): # 從 datavalue 的第0個跑到倒數(shù)第 time_frame+1 個  
  10.         result.append(datavalue[index: index + (time_frame+1) ]) # 逐筆取出 time_frame+1 個K棒數(shù)值做為一筆 instance     
  11.     result = np.array(result)  
  12.     number_train = round(0.9 * result.shape[0]) # 取 result 的前90% instance 作為訓練數(shù)據(jù)  
  13.     x_train = result[:int(number_train), :-1] # 訓練數(shù)據(jù)中, 只取每一個 time_frame 中除了最后一筆的所有數(shù)據(jù)作為feature  
  14.     y_train = result[:int(number_train), -1][:,-1] # 訓練數(shù)據(jù)中, 取每一個 time_frame 中最后一筆數(shù)據(jù)的最后一個數(shù)值(收盤價)作為答案    
  15.     # 測試數(shù)據(jù)  
  16.     x_test = result[int(number_train):, :-1]  
  17.     y_test = result[int(number_train):, -1][:,-1]  
  18.     # 將數(shù)據(jù)組成變好看一點  
  19.     x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], number_features))  
  20.     x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], number_features))    
  21.     return [x_train, y_train, x_test, y_test]  
  22. # 以20天為一區(qū)間進行股價預測  
  23. X_train, y_train, X_test, y_test = data_helper(foxconndf_norm, 20)  

我們以 Keras 框架作為 LSTM 的模型選擇,首先在前面加了兩層 256個神經(jīng)元的 LSTM layer,并都加上了Dropout層來防止數(shù)據(jù)過度擬合(overfitting)。最后再加上兩層有不同數(shù)目神經(jīng)元的全連結層來得到只有1維數(shù)值的輸出結果,也就是預測股價: 

  1. from keras.models import Sequential  
  2. from keras.layers.core import Dense, Dropout, Activation  
  3. from keras.layers.recurrent import LSTM  
  4. import keras  
  5. def build_model(input_length, input_dim):  
  6.     d = 0.3  
  7.     model = Sequential()  
  8.     model.add(LSTM(256, input_shape=(input_length, input_dim), return_sequences=True))  
  9.     model.add(Dropout(d))  
  10.     model.add(LSTM(256, input_shape=(input_length, input_dim), return_sequences=False)) 
  11.     model.add(Dropout(d))  
  12.     model.add(Dense(16,kernel_initializer="uniform",activation='relu'))  
  13.     model.add(Dense(1,kernel_initializer="uniform",activation='linear'))  
  14.     model.compile(loss='mse',optimizer='adam'metrics=['accuracy']) 
  15.     return model  
  16. # 20天、5維  
  17. model = build_model( 20, 5 ) 

建立好 LSTM 模型后,我們就用前面編輯好的訓練數(shù)據(jù)集開始進行模型的訓練:LSTM 模型訓練 

  1. # 一個batch有128個instance,總共跑50個迭代  
  2. model.fit( X_train, y_train, batch_size=128epochs=50validation_split=0.1, verbose=1

在經(jīng)過一段時間的訓練過程后,我們便能得到 LSTM 模型(model)。接著再用這個模型對測試數(shù)據(jù)進行預測,以及將預測出來的數(shù)值(pred)與實際股價(y_test)還原回原始股價的大小區(qū)間:

LSTM 模型預測股價及還原數(shù)值 

  1. def denormalize(df, norm_value):  
  2.     original_value = df['close'].values.reshape(-1,1)  
  3.     norm_valuenorm_value = norm_value.reshape(-1,1)      
  4.     min_max_scaler = preprocessing.MinMaxScaler()  
  5.     min_max_scaler.fit_transform(original_value)  
  6.     denorm_value = min_max_scaler.inverse_transform(norm_value)     
  7.     return denorm_value  
  8. # 用訓練好的 LSTM 模型對測試數(shù)據(jù)集進行預測  
  9. pred = model.predict(X_test)  
  10. # 將預測值與實際股價還原回原來的區(qū)間值  
  11. denorm_pred = denormalize(foxconndf, pred)  
  12. denorm_ytest = denormalize(foxconndf, y_test) 

LSTM 預測股價結果

讓我們把還原后的數(shù)值與實際股價畫出來,看看效果如何:

LSTM 預測股價結果 

  1. import matplotlib.pyplot as plt  
  2. %matplotlib inline    
  3. plt.plot(denorm_pred,color='red'label='Prediction' 
  4. plt.plot(denorm_ytest,color='blue'label='Answer' 
  5. plt.legend(loc='best' 
  6. plt.show() 

如下圖,藍線是實際股價、紅線是預測股價。雖然整體看起來預測股價與實際股價有類似的走勢,但仔細一看預測股價都比實際股價落后了幾天。

所以我們來調整一些設定:

  •  時間框架長度的調整
  •  Keras 模型里全連結層的 activation 與 optimizaer 的調整
  •  Keras 模型用不同的神經(jīng)網(wǎng)路(種類、順序、數(shù)量)來組合batch_size 的調整、epochs 的調整 …

經(jīng)過我們對上述的幾個參數(shù)稍微調整過后,我們就得到一個更貼近實際股價的預測結果啦。

 

 

責任編輯:龐桂玉 來源: Python中文社區(qū)
相關推薦

2021-08-21 14:30:58

機器學習bilibili股價

2021-08-23 11:15:20

Python機器學習bilibili

2020-05-27 11:10:54

KerasLSTM神經(jīng)網(wǎng)絡

2021-03-29 09:02:24

深度學習預測間隔

2017-10-05 16:51:28

LSTM神經(jīng)網(wǎng)絡貨幣兌換匯率

2018-07-03 16:10:04

神經(jīng)網(wǎng)絡生物神經(jīng)網(wǎng)絡人工神經(jīng)網(wǎng)絡

2021-02-07 09:40:19

Python神經(jīng)網(wǎng)絡人工智能

2017-06-19 15:12:30

Uber神經(jīng)網(wǎng)絡事件預測

2025-05-09 08:48:06

2018-04-03 14:42:46

Python神經(jīng)網(wǎng)絡深度學習

2018-02-09 09:59:12

神經(jīng)網(wǎng)絡算法識別

2017-07-10 09:37:01

循環(huán)神經(jīng)網(wǎng)絡深度學習RNN

2022-06-06 13:05:32

神經(jīng)網(wǎng)絡宇宙

2019-11-28 09:23:17

Python機器學習數(shù)據(jù)庫

2017-08-25 14:23:44

TensorFlow神經(jīng)網(wǎng)絡文本分類

2017-09-10 07:07:32

神經(jīng)網(wǎng)絡數(shù)據(jù)集可視化

2025-02-25 14:13:31

2020-08-06 10:11:13

神經(jīng)網(wǎng)絡機器學習算法

2019-05-07 19:12:28

機器學習神經(jīng)網(wǎng)絡Python

2017-05-04 18:30:34

大數(shù)據(jù)卷積神經(jīng)網(wǎng)絡
點贊
收藏

51CTO技術棧公眾號