我正在尝试在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(希望)考虑每个时间序列之间的得分差异不是更好吗?
P.S。我应该提到,“完成”缩放之后,我将创建时间步并获得如下最终结果:
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
...
答案 0 :(得分:2)
通常,我发现MinMaxScaler和StandardScaler之间的性能差异很小。当然,由于(它出现了)您还将缩放目标变量,因此,应确保使用与输出激活功能一致的缩放器。例如,如果您输出的激活函数是ReLU,则您将无法预测任何负值。在那种情况下,我会倾向于MinMaxScaler,因为您的所有目标都将以[0,1]间隔结束。
关于将时间序列一起缩放还是独立缩放,可能取决于特定设置。如果这些标度倾向于具有不同的时间依赖性行为,那么将它们缩放在一起可能很好,这样可以保留差异。如果它们都以相似的模式运行,则独立缩放它们可能会最好地工作。
还需要考虑其他网络架构以进行时间序列预测,例如RNN。
答案 1 :(得分:1)
您需要注意MinMax比例尺,因为在实际情况下,您的预测数据可能会具有不同的比例尺,也就是说,其可能大于火车集中的最大值。
在这种情况下,我认为标准量表是最好的,因为我们将mean = 0(或定义的数字)和std = 0或1放置。
您也可以尝试的另一件事是使网络的第一层不激活,最后一层也不激活。如果不是负值,则为relu。