Тест LSTM и ошибка обучающего набора имеют 8 функций, но отображаются как 9
Мне нужно преобразовать приведенные ниже данные в набор данных train / test в keras для сети LSTM.
Я использую код ниже
def standard_scaler(X_train, X_test):
train_samples, train_nx, train_ny = X_train.shape
test_samples, test_nx, test_ny = X_test.shape
X_train = X_train.reshape((train_samples, train_nx * train_ny))
X_test = X_test.reshape((test_samples, test_nx * test_ny))
preprocessor = prep.StandardScaler().fit(X_train)
X_train = preprocessor.transform(X_train)
X_test = preprocessor.transform(X_test)
X_train = X_train.reshape((train_samples, train_nx, train_ny))
X_test = X_test.reshape((test_samples, test_nx, test_ny))
return X_train, X_test
def preprocess_data(stock, seq_len):
amount_of_features = len(stock.columns)
data = stock.as_matrix()
sequence_length = seq_len + 1
result = []
for index in range(len(data) - sequence_length):
result.append(data[index : index + sequence_length])
result = np.array(result)
row = round(0.9 * result.shape[0])
train = result[: int(row), :]
train, result = standard_scaler(train, result)
X_train = train[:, : -1]
y_train = train[:, -1][: ,-1]
X_test = result[int(row) :, : -1]
y_test = result[int(row) :, -1][ : ,-1]
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], amount_of_features))
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], amount_of_features))
return [X_train, y_train, X_test, y_test]
def build_model(layers):
model = Sequential()
# By setting return_sequences to True we are able to stack another LSTM layer
model.add(LSTM(
input_dim=layers[0],
output_dim=layers[1],
return_sequences=True))
model.add(Dropout(0.4))
model.add(LSTM(
layers[2],
return_sequences=False))
model.add(Dropout(0.3))
model.add(Dense(
output_dim=layers[3]))
model.add(Activation("sigmoid"))
start = time.time()
model.compile(loss="mse", optimizer="rmsprop", metrics=['accuracy'])
print("Compilation Time : ", time.time() - start)
return model
window = 20
X_train, y_train, X_test, y_test = preprocess_data(df[:: -1], window)
print("X_train", X_train.shape)
print("y_train", y_train.shape)
print("X_test", X_test.shape)
print("y_test", y_test.shape)
результат - X_train (124, 20, 9) y_train (124,) X_test (14, 20, 9) y_test (14,)
Я хочу, чтобы эта функция была 8, а не 9, потому что я использую X1, X2,....., X8 в качестве ввода и y в качестве вывода.
model = build_model([X_train.shape[2], window, 100, 1])
model.fit(
X_train,
y_train,
batch_size=2,
nb_epoch=300,
validation_split=0.1,
verbose=0)
diff = []
ratio = []
pred = model.predict(X_test)
for u in range(len(y_test)):
pr = pred[u][0]
ratio.append((y_test[u] / pr) - 1)
diff.append(abs(y_test[u] - pr))
Pred = prep.StandardScaler().fit_transform(pred)
Кто-нибудь может подсказать, как это сделать? любая помощь будет высоко оценена.
ДАННЫЕ
X1 X2 X3 X4 X5 X6 X7 X8 y 1/2/2000 0,081 117.809997 0,081 0,012 1,158 1,258 0,037 27,3 09999 15,123226 1/3/2000 0,139 130,279997 0,139 0,027 1,36 1,306 1,5924 0,0424 19. 59 21.13333333 1/4/2000 0,242 138,259997 0,242 0,034 1,44 1,468 1,6484 32. 659999 23,70967742 1/5/2000 0,255 140,859997 0,255 0,042 1,89 2,181 0,0358 35. 699999 24,83333333 1/6/2000 0,164 142,689997 0,164 0,058 2,229 2,62 0,0358 32,80 26999