我试图通过下表的多个输入参数来预测天然气的开盘价(“ NG开盘价”)。我遵循了一些教程,但是没有解释特定格式背后的原因。代码在经过多次试验和错误后仍然有效,但是需要对重新格式化数据有一定的了解。
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)
上面astrix标记的代码背后的原因是什么?
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'))
答案 0 :(得分:0)
您的数据当前是形状为(x,4)的数组,其中x是行数。因此,在您提供的玩具数据中,X.shape
应该返回(2,4)。如果稍后再看LSTM行,您会注意到它正在寻找形状(1,4)的张量-这是input_shape
参数。 np.reshape
行是什么使您到达那里。它将2维数组转换为3维数组。同样,以您的示例为例,X.shape
在重塑形状后将返回(2,1,4)。基本上,您现在有了一个长度为2的(1,4)数组的列表,该列表与LSTM层所需的匹配。
我建议您看一下Keras documentation on the LSTM,但是基本上这就是正在发生的事情。 100是此层将具有的单位(或神经元)数。输入形状已在上面注明。激活是将用于计算每个神经元输出的函数。 tanh功能在此基本设置中是非常标准的,但其他功能也是可能的。看看Keras开箱即用提供的activations列表。