У меня проблема, и в этот момент я полностью потерял, как ее решить. Я использую Keras со слоем LSTM для создания временного ряда. Я пытаюсь использовать предыдущие 10 точек данных, чтобы предсказать 11-й.
Здесь код:
from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout
from keras.layers.recurrent import LSTM
def _load_data(data):
"""
data should be pd.DataFrame()
"""
n_prev = 10
docX, docY = [], []
for i in range(len(data)-n_prev):
docX.append(data.iloc[i:i+n_prev].as_matrix())
docY.append(data.iloc[i+n_prev].as_matrix())
if not docX:
pass
else:
alsX = np.array(docX)
alsY = np.array(docY)
return alsX, alsY
X, y = _load_data(df_test)
X_train = X[:25]
X_test = X[25:]
y_train = y[:25]
y_test = y[25:]
in_out_neurons = 2
hidden_neurons = 300
model = Sequential()
model.add(LSTM(in_out_neurons, hidden_neurons, return_sequences=False))
model.add(Dense(hidden_neurons, in_out_neurons))
model.add(Activation("linear"))
model.compile(loss="mean_squared_error", optimizer="rmsprop")
model.fit(X_train, y_train, nb_epoch=10, validation_split=0.05)
predicted = model.predict(X_test)
Итак, я беру входные данные (двухкадровый dataframe), создавая X, который представляет собой массив n на 10 по 2, и y, который представляет собой массив n на 2, который на один шаг впереди последней строки в каждом массив X (маркировка данных с помощью точки непосредственно перед ней.
Ожидается[[ 7.56940445, 5.61719704],
[ 7.57328357, 5.62709032],
[ 7.56728049, 5.61216415],
[ 7.55060187, 5.60573629],
[ 7.56717342, 5.61548522],
[ 7.55866942, 5.59696181],
[ 7.57325984, 5.63150951]]
но я должен получать
[[ 73, 48],
[ 74, 42],
[ 91, 51],
[102, 64],
[109, 63],
[ 93, 65],
[ 92, 58]]
В исходном наборе данных есть только 42 строки, поэтому мне интересно, есть ли там недостаточно для работы? Или, может быть, я пропустил ключевой шаг в процессе моделирования? Я видел несколько примеров с использованием слоев Embedding и т.д., Это то, над чем я должен смотреть?
Заранее благодарим за помощь!