我正在使用Keras的顺序模型和LSTM层来预测时间序列数据的未来值。为此,我在某个时间点将数据分成了训练数据和验证数据。时间序列数据呈现正向趋势,因此我的训练数据的平均值低于验证数据,因为我使用了较新的数据作为验证数据。
初始模型每次都预测0.5,这是一个糟糕的模型。在下一轮训练中,模型将通过训练数据学习,并平均预测低于0.5的值,这会降低训练损失但增加验证损失。只有经过很多轮训练,我才会看到验证损失开始下降的趋势,而在更多的轮次之后,验证损失第一次会低于最初那个总是预测0.5的糟糕模型。
我使用Keras调参器和Hyperband调参器进行超参数验证。这对于这种时间序列数据不起作用,因为在最初几轮中,所有模型的验证损失都会高于初始的0.5模型。
在使用Keras并将训练和验证数据分开的情况下,有没有处理时间序列中趋势的方法?我无法打乱时间序列然后再分割数据,因为我真的希望使用较新的数据进行验证。
回答:
你可以尝试对函数进行差分处理,这样模型将预测每个时间步相对于前一个时间步的值变化:
import pandas as pdimport numpy as npdef difference_column(df, target_col): yesterday = df.loc[:,target_col].shift() return yesterday.diff()df = pd.DataFrame(range(1,100), columns = ['target_var']) * 2df_diff = difference_column(df, 'target_var')print(df, df_diff)
输出结果:
target_var0 21 42 63 84 10.. ...94 19095 19296 19497 19698 198[99 rows x 1 columns] 0 NaN1 NaN2 2.03 2.04 2.0 ... 94 2.095 2.096 2.097 2.098 2.0Name: target_var, Length: 99, dtype: float64
完成这一初步实验后,请访问这里