我有一个小小的疑问,假设我的数据具有连续的时间序列(非平稳)和其他分类变量(已编码)。在这种情况下,区别数据的最佳方法是什么?因为分类数据没有区别,但是在训练模型时必须使用它们。
我正在尝试构建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)
然后我已经预测了整个数据,并希望使用最后的预测来提前进行预测。这样做时,我将不得不恢复缩放比例并恢复差分。不确定如何调整循环以完成相同操作:
predictions = 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)