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

问题描述 投票:0回答:3

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

我的第二个问题是我应该选择哪种缩放方法? 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
 ...
python statistics time-series data-science scaling
3个回答
2
投票

总的来说,我发现 MinMaxScaler 和 StandardScaler 之间的性能差异很小。当然,由于(看起来)您还将缩放目标变量,因此您应该确保使用与输出激活函数一致的缩放器。例如,如果您的输出激活函数是 ReLU,您将无法预测任何负值。在这种情况下,我会倾向于 MinMaxScaler,因为所有目标都将位于区间 [0,1] 内。

至于时间序列是一起缩放还是单独缩放,可能取决于具体设置。如果尺度往往具有不同的时间相关行为,则最好将它们一起缩放以保留差异。如果它们都具有相似的行为模式,那么单独缩放它们可能会效果最好。

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


1
投票

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

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

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


0
投票

根据我的经验,我相信这取决于你的功能如何分布。尝试绘制所有特征的统计分布,并尝试了解其中大多数特征是否呈正态分布。如果是,那么使用标准缩放器将使模型受益,但是,如果您注意到您的特征不倾向于遵循正态分布(或接近正态分布),那么也许最好使用 MinMax 缩放器。这是因为,如果您的特征不是正态分布并且您使用标准缩放器,那么您将强制将正态分布放入非正态分布的数据集中,因此可能会导致严重的过度拟合和对未见数据的性能不佳。

© www.soinside.com 2019 - 2024. All rights reserved.