Я использую Keras вместе с Hyperas и с машиной LSTM для прогнозирования оценок цен. У меня проблемы с форматированием данных из Pandas DataFrame для использования при обучении и тестировании данных в модели LSTM.
Вот как я сейчас читаю и разделяю данные:
def data():
maxlen = 100
max_features = 20000
#read the data
df = DataFrame(pd.read_json('eth_usd_polo.json'))
#normalize data
scaler = MinMaxScaler(feature_range=(-1,1))
df[['weightedAverage']] = scaler.fit_transform(df[['weightedAverage']])
X = df[df.columns[-1:]]
Y = df['weightedAverage']
X_train, X_test, y_train, y_test = train_test_split(X, Y , test_size=0.33)
return X_train, X_test, y_train, y_test, max_features, maxlen
Из фрейма данных меня действительно интересует только столбец «weightedAverage» и соответствующие цены. Так как я делаю одномерное прогнозирование временных рядов.
И вот где я строю модель:
def create_model(X_train, X_test, y_train, y_test, max_features, maxlen):
#Build the model
model = Sequential()
model.add(LSTM(input_shape=(10, 1), return_sequences=True, units=20))
model.add(Dropout(1))
model.add(LSTM(20, return_sequences=False))
#model.add(Flatten())
model.add(Dropout(0.2))
model.add(Dense(units=1))
#model.add(Activation("linear"))
#compile
model.compile(loss='categorical_crossentropy', metrics=['accuracy'],
optimizer={{choice(['rmsprop', 'adam', 'sgd'])}})
#the monitor and earlystopping for the model training
#monitor = EarlyStopping(monitor ='val_loss', patience=5,verbose=1, mode='auto')
#fit everything together
#model.fit(x_train ,y_train, validation_data=(x_test, y_test), callbacks =[monitor], verbose=2, epochs=1000)
model.fit(X_train, y_train,
batch_size={{choice([64, 128])}},
epochs=1,
verbose=2,
validation_data=(X_test, y_test))
score, acc = model.evaluate(X_test, y_test, verbose=0)
print('Test accuracy:', acc)
return {'loss': -acc, 'status': STATUS_OK, 'model': model}
Проблемы, похоже, возникают в том, как я извлекаю и обрабатываю данные из Pandas DF. Возвращаемые данные (X_train, X_test и т. Д.) Должны иметь вид:
(25000, 10)
[[ data data data .... data data]
[ data data data .... data data]
.
.
.
[ data data data .... data data]]
Вместо этого он отформатирован в:
(7580, 1)
weightedAverage
12420 255.151685
20094 871.386896
12099 300.802114
Я думал, что функция train_test_split
поможет мне разбить и отформатировать мои данные до правильного размера, но, похоже, он не делает то, что я от него хочу.
Любая помощь очень ценится с этим!