Все примеры, которые у меня есть на регрессии Keras LSTM, используют один столбец данных для будущего прогноза.Однако, если я хочу включить больше столбцов, как я могу изменить данные для включения в регрессионную модель.В приведенном ниже примере функция используется столбец df.Close для прогнозирования будущих цен.Допустим, я хочу использовать все четыре столбца кадра данных в качестве полей ввода для модели для будущего прогнозирования. Любая помощь будет широко цениться.Я искал этот ответ, но не нашел этот очевидный ответ.
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
df = pd.read_csv("https://raw.githubusercontent.com/mwitiderrick/stockprice/master/NSE-TATAGLOBAL.csv")
##Custom function to reshape the data
def datashape(batch_size, scaled_df):
X_train_def = []
y_train_def = []
for i in range(batch_size, len(scaled_df)):
X_train_def.append(scaled_df[i-batch_size:i, 0])
y_train_def.append(scaled_df[i, 0])
X_train_def, y_train_def = np.array(X_train_def), np.array(y_train_def)
X_train_def = np.reshape(X_train_def, (X_train_def.shape[0], X_train_def.shape[1], 1))
return X_train_def, y_train_def
close = df['Close']
close = close.values.reshape(len(close), 1)
#normalize data
scaler = MinMaxScaler(feature_range=(0,1))
close = scaler.fit_transform(close)
#split data into train and test
train_size = int(len(close)* 0.7)
test_size = len(close) - train_size
close_train, close_test= close[0:train_size, :], close[train_size:len(close), :]
### This is the chunk of data goes in machine
batch_size = 60
trainX, trainY = datashape(batch_size,close_train)
testX, testY = datashape(batch_size,close_test)
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras import optimizers
model = Sequential()
model.add(LSTM(units = 64, return_sequences = True, input_shape=(batch_size, 1)))
model.add(LSTM(units = 64, return_sequences = True))
model.add(LSTM(units = 64))
model.add(Dense(units = 1))
optimizer = optimizers.RMSprop(0.001)
model.compile(optimizer = optimizer,
loss = 'mean_squared_error',
metrics=['mean_absolute_error', 'mean_squared_error'])
model.fit(trainX, trainY, epochs = 5, batch_size = 32)