我如何塑造多元数据以输入到 LSTM

我正在努力实现的目标。

我试图根据下表的多个输入参数预测天然气的开盘价(“NG Open”)。我遵循了一些教程,但它们没有解释特定格式背后的原因。经过多次试验和错误,代码正在工作,但需要对重新塑造数据有一些了解。


数据集 - 只有几行。

Contract    NGLast   NGOpen NGHigh NGLow NGVolumes COOpen COHigh COLow

2018-12-01  4.487    4.50   4.60   4.03  100,000   56.00  58.00  50.00

2019-01-01  4.450    4.52   4.61   4.11  93000     51.00  53.00  45.00

代码

  import pandas as pd

  import numpy as np

  import matplotlib.pyplot as plt


  from keras.layers import Dense

  from keras.models import Sequential

  from keras.layers import LSTM

  import date time


  from keras import metrics

  from sklearn.preprocessing import MinMaxScaler


  data = pd.read_excel("C:\Futures\Futures.xls")


  data['Contract'] = pd.to_datetime(data['Contract'],unit='s').dt.date

  data['NG Last'] = data['NG Last'].str.rstrip('s')

  data['CO Last'] = data['CO Last'].str.rstrip('s')


  COHigh =  np.array([data.iloc[:,8]])

  COLow  =  np.array([data.iloc[:,9]])

  NGLast =  np.array([data.iloc[:,1]])

  NGOpen =  np.array([data.iloc[:,2]])

  NGHigh =  np.array([data.iloc[:,3]])


  X = np.concatenate([COHigh,COLow, NGLast,NGOpen], axis =0)

  X = np.transpose(X)

  Y = NGHigh

  Y = np.transpose(Y)

  scaler = MinMaxScaler()

  scaler.fit(X)

  X = scaler.transform(X)

  scaler.fit(Y)

  Y = scaler.transform(Y)


  **X = np.reshape(X,(X.shape[0],1,X.shape[1]))**

  print(X.shape)


  model = Sequential()

  **model.add(LSTM(100,activation='tanh',input_shape=(1,4),** recurrent_activation='hard_sigmoid'))

  model.add(Dense(1))


 model.compile(loss='mean_squared_error', optimizer='rmsprop', metrics = [metrics.mae])

 model.fit(X,Y,epochs = 10,batch_size=1,verbose=2)


 Predict = model.predict(X,verbose=1)

上面用星号标记的代码背后的原因是什么?


1> 我有四列作为输入所以不应该是X = np.reshape(X,(X.shape[0],1,X.shape[1], X.Shape[2],X.shape[ 3])) ? 等等所有被视为输入的列?


2> 我需要解释下面这一行中的参数。model.add(LSTM(100,activation='tanh',input_shape=(1,4), recurrent_activation='hard_sigmoid'))


四季花海
浏览 205回答 1
1回答

大话西游666

您的数据当前是一个形状为 (x,4) 的数组,其中 x 是行数。所以在你提供的玩具数据中,X.shape应该返回 (2,4)。如果稍后查看 LSTM 线,您会注意到它正在寻找形状为 (1,4) 的张量——这就是input_shape参数。这np.reshape条线是让你到达那里的原因。它正在将您的 2-d 数组转换为 3-d 数组。同样,对于您的示例,X.shape在您对其进行整形后将返回 (2,1,4)。基本上,您现在有一个长度为 2 的 (1,4) 数组列表,它与 LSTM 层想要的相匹配。我建议您查看LSTM上的 Keras文档,但这基本上是正在发生的事情。100 是该层将拥有的单元(或神经元)的数量。输入形状如上所述。激活是用于计算每个神经元输出的函数。tanh 函数在这个基本设置中是非常标准的,但其他函数也是可能的。看看Keras 提供的开箱即用的激活列表。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python