我正在尝试在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。

10-08 04:59