Я обучил модель с использованием кера на основе цен на криптовалюту.Он хорошо тренируется и имеет точность около 60%.Тем не менее, мне трудно понять, как использовать результаты model.predict (), чтобы сравнить / построить их с фактическими значениями.
Моя модель выглядит следующим образом:
model = Sequential()
model.add(LSTM(128, input_shape=(train_x.shape[1:]), return_sequences=True))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(LSTM(128, input_shape=(train_x.shape[1:]), return_sequences=True))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(LSTM(128, input_shape=(train_x.shape[1:])))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(Dense(32, activation="tanh")) #could use relu
model.add(Dropout(0.2))
model.add(Dense(2, activation="softmax"))
opt = tf.keras.optimizers.Adam(lr=0.001, decay=1e-6)
model.compile(loss='sparse_categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
history = model.fit(
train_x, train_y,
batch_size=BATCH_SIZE,
epochs=EPOCHS,
validation_data=(validation_x, validation_y))
# ## Plot predictions
targets = validation_data['close'] #get all the actual prices from the validation data
preds = model.predict(validation_x)
train_x - это первые 90% данных, а validation_x - последние 10% или около того.
цели возвращаются в виде серии панд, которая выглядит следующим образом:
time
1552021200 0.312
1552024800 0.312
1552028400 0.310
1552032000 0.311
1552035600 0.311
1552039200 0.311
1552042800 0.310
1552046400 0.309
1552050000 0.310
1552053600 0.312
, но preds возвращает ndarray, который выглядит следующим образом:
[[0.41261673 0.5873832 ]
[0.34726056 0.65273947]
[0.33154735 0.6684527 ]
...
[0.4990835 0.50091654]
[0.27250433 0.7274957 ]
[0.3717066 0.6282934 ]]
Я обнаружил, чтоэтот ndarray - просто вероятности каждого класса, однако я уверен, что есть какой-то способ использовать эти вероятности для прогнозирования значений в тех же индексных точках, что и цели.Хотя я не уверен, как это сделать, и не могу понять, как это сделать.