决定如何缩放数据以及使用哪个缩放器?

Deciding on how to scale data and which scaler to use?

我正在尝试在 keras 中训练具有两个密集层的 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 个缩放器吗?还是我应该更好地将它们一起缩放(最后一个 acaler),这样我就不会失去它们之间的相关性?或者既然所有这些时间序列都被认为是相同的特征,那么相关性就没有意义了吗?!

我的第二个问题是我应该选择哪种缩放方法? min-max 还是 StandardScaler(来自 sklearn)?一些时间序列的行为与其他时间序列截然不同,它们的值也有很大差异。如果我使用最小-最大缩放器,它会忽略这些差异,对吗?那么使用 StandardScaler(希望)考虑每个时间序列之间的分数差异不是更好吗?

P.S。我应该提到 'after' 缩放已经完成,我将创建时间步并且最终结果如下:

        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] 内结束。

关于时间序列是一起缩放还是单独缩放,可能取决于具体设置。如果量表往往具有不同的 time-dependent 行为,则将它们一起缩放可能会很好,这样可以保留差异。如果它们都以相似的模式运行,则独立扩展它们可能效果最好。

还值得考虑 time-series 预测的其他网络架构,例如RNNs.

你需要注意 MinMax Scale,因为在真实情况下你的预测数据可以有不同的尺度,换句话说,它可以大于训练集中的最大值。

我认为在这种情况下标准比例是最好的,因为我们将均值 = 0(或定义的数字)和标准 = 0 或 1。

您也可以尝试的另一件事是使网络的第一层没有激活,最后一层也没有激活。或者 relu 如果不使用负值。