我正在尝试在keras中训练具有两个Dense层的MLP模型,以对约100个单变量时间序列的小型数据集进行预测。该模型应获取6天的值并预测第7天的值。作为模型的输入,我首先在一个数据帧中依次将这些时间序列连接起来,如下所示:
ts1 val1
ts1 val2
...
ts1 varN
ts2 val1
ts2 val2
...
ts3 varN
ts3 val1
ts3 val2
...
ts3 varN
...
ts100 val1
ts100 val2
...
ts100 varN
我想知道扩展此数据的最佳方法是什么?首先,我是否应该分别缩放每个时间序列(ts_n),所以最后会有100个缩放器?还是应该更好地将它们全部缩放(最后一个缩放器),这样我才不会失去它们之间的相关性?还是因为所有这些时间序列都被视为相同的特征,所以没有相关性了吗?
我的第二个问题是我应该选择哪种缩放方法? min-max或StandardScaler(来自sklearn)?一些时间序列的行为与其他时间序列完全不同,并且它们的值存在很大差异。如果我使用最小-最大缩放器,它将忽略这些差异,对吗?那么使用StandardScaler更好地(希望)考虑每个时间序列之间的得分差异不是更好吗?
附言我应该提及的是,在“缩放”完成之后,我将创建时间步并获得如下最终结果:
timestep1 | timestep2 | timestep3 | timestep4 | timestep5 | timestep6 | timestep7
ts1 var1 | var2 | var3 | var4 | var5 | var6 | var7
ts1 var2 | var3 | var4 | var5 | var6 | var7 | var8
ts1 var3 | var4 | var5 | var6 | var7 | var8 | var9
...
ts2 var1 | var2 | var3 | var4 | var5 | var6 | var7
ts2 var2 | var3 | var4 | var5 | var6 | var7 | var8
ts2 var3 | var4 | var5 | var6 | var7 | var8 | var9
...
ts100 var1 | var2 | var3 | var4 | var5 | var6 | var7
ts100 var2 | var3 | var4 | var5 | var6 | var7 | var8
ts100 var3 | var4 | var5 | var6 | var7 | var8 | var9
...
最佳答案
通常,我发现MinMaxScaler和StandardScaler之间的性能差异很小。当然,由于(它出现了)您还将缩放目标变量,因此,应确保使用与输出激活功能一致的缩放器。例如,如果您输出的激活函数是ReLU,则您将无法预测任何负值。在那种情况下,我会倾向于MinMaxScaler,因为您的所有目标都将以[0,1]间隔结束。
至于是一起缩放还是独立缩放时间序列,可能取决于特定设置。如果这些标度倾向于具有不同的时间依赖性行为,那么将它们缩放在一起可能很好,这样可以保留差异。如果它们都以相似的模式运行,则独立缩放它们可能会最好地工作。
同样值得考虑使用其他网络架构进行时间序列预测,例如RNN。