#python #lstm #prediction
Вопрос:
У меня есть набор данных с датами и одной переменной продаж. Данные выглядят следующим образом: Набор данных
Я использую простую модель LSTM, чтобы сделать следующий прогноз из этого набора данных. Код такой:
def create_dataset(dataset, look_back=6):
dataX, dataY = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i look_back), 0]
dataX.append(a)
dataY.append(dataset[i look_back, 0])
return numpy.array(dataX), numpy.array(dataY)
-------------------------------------------------------------------------
numpy.random.seed(7)
dataset = new_df.values
dataset = dataset.astype('float32')
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)
train_size = int(len(dataset) * 0.67)
test_size = len(dataset) - train_size
train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]
-------------------------------------------------------------------------
look_back = 6
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)
trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))
testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))
-------------------------------------------------------------------------
model = Sequential()
model.add(LSTM(2, input_shape=(1, look_back)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=60, batch_size=1, verbose=2)
-------------------------------------------------------------------------
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)
trainPredict = scaler.inverse_transform(trainPredict)
trainY = scaler.inverse_transform([trainY])
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform([testY])
Модель работает хорошо, я использую RMSE в качестве показателя, и он находится в диапазоне от 0,1 до 0,9, что для моего проекта приемлемо (на случай, если у кого-то есть какие-либо сомнения в том, насколько хорошо работает модель).
Что нужно для того, чтобы иметь возможность предсказать 2, 3, 4 или даже 5 шагов в будущее?
Комментарии:
1. Я думаю, вы могли бы изменить свои данные (удалить первое значение, добавить предсказанное значение в конце) и предсказать снова n раз. Один вопрос: не должны ли данные содержать набор данных[i обратная связь, 0] вместо набора данных[i, 0] ? может быть, я что-то неправильно понял.
2. Я попробую это сделать, удалю первое значение, увеличу все на единицу и добавлю предсказанное значение и снова спрогнозирую, верно? Спасибо, я не думал об этом в таком ключе.
3. хорошо, отлично. Проблема с вашими данными заключается в том, что та же информация содержится в DataX (первое значение). Итак, вы пытаетесь предсказать данный… не очень сложный/интересный.
4. Да, я совершенно упустил это из виду. Извините за многочисленные вопросы, но после изменения и увеличения RMSE, знаете ли вы, как я могу его уменьшить? Чтобы сделать прогнозы модели более точными?
5. Нетривиальный ответ. Некоторые идеи: добавьте больше данных, если у вас их больше, и попробуйте улучшить модель (например, с дополнительным слоем LSTM, как в towardsdatascience.com/… ), или используйте более совершенную модель, такую как трансформатор, как есть towardsdatascience.com/…