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

时间:2019-06-07 11:31:01

标签: python statistics time-series data-science scaling

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

2 个答案:

答案 0 :(得分:2)

通常,我发现MinMaxScaler和StandardScaler之间的性能差异很小。当然,由于(它出现了)您还将缩放目标变量,因此,应确保使用与输出激活功能一致的缩放器。例如,如果您输出的激活函数是ReLU,则您将无法预测任何负值。在那种情况下,我会倾向于MinMaxScaler,因为您的所有目标都将以[0,1]间隔结束。

关于将时间序列一起缩放还是独立缩放,可能取决于特定设置。如果这些标度倾向于具有不同的时间依赖性行为,那么将它们缩放在一起可能很好,这样可以保留差异。如果它们都以相似的模式运行,则独立缩放它们可能会最好地工作。

还需要考虑其他网络架构以进行时间序列预测,例如RNN。

答案 1 :(得分:1)

您需要注意MinMax比例尺,因为在实际情况下,您的预测数据可能会具有不同的比例尺,也就是说,其可能大于火车集中的最大值。

在这种情况下,我认为标准量表是最好的,因为我们将mean = 0(或定义的数字)和std = 0或1放置。

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