У меня есть небольшие сомнения, предположим, что мои данные имеют непрерывный временной ряд (не стационарный) и другие категориальные переменные (которые уже закодированы).При таких обстоятельствах, как лучше всего различать данные?Поскольку категориальные данные не различаются, но они должны использоваться при обучении модели.
Я пытаюсь построить модель LSTM, поэтому любая помощь очень ценится.
Данные, которыми я в настоящее время занимаюсьиспользование на дневном уровне и ради иллюстрации я рассмотрел только одномерный сценарий (игнорируя переменную Var1 и применяя разность только к переменной "TS"
TS Var1
15000 1
14000 1
16000 0
raw_values = daily_data_dummies_V2.values
interval=1
diff = list()
for i in range(interval, len(raw_values)):
value = raw_values[i] - raw_values[i - interval]
diff.append(value)
# rescale values to -1, 1
scaler = MinMaxScaler(feature_range=(-1, 1))
scaled_values = scaler.fit_transform(diff)
X = entireData[:,:-1,:]
y = entireData[:,1:,:]
from keras.layers import merge, Input, Dense, TimeDistributed, Lambda
from keras.callbacks import LambdaCallback
from keras.layers import Dropout
# design network
model = Sequential()
model.add(LSTM(150, stateful=True, batch_input_shape=(1, None, 1),
return_sequences=True))
model.add(Dropout(0.5))
model.add(TimeDistributed(Dense(1)))
model.compile(loss='mean_squared_error', optimizer='adam')
# fit network
model.fit(X, y, epochs=5000, batch_size=1, verbose=2)
previous_inputs=X
model.reset_states()
predictions = model.predict(previous_inputs)
Затем я предсказал все данные &Я хотел бы использовать последнее предсказание для прогнозирования вперед. При этом мне придется отменить масштабирование и отменить разность. Не уверен, как я отрегулирую цикл, чтобы сделать то же самое:
сначала, позвольте установитьсостояния модели (важно, чтобы она знала предыдущие тенденции)
предсказания = model.predict (previous_inputs) # это создает состояния
#future predictions
future = []
currentStep = predictions[:,-1:,:] #last step from the previous
prediction
for i in range(31):
currentStep = model.predict(currentStep)
one=currentStep[0]
two=scaler.inverse_transform(one)
three=raw_values[-1]+two
future.append(three)