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

标签 python statistics time-series data-science scaling

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

最佳答案

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

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

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

关于python - 决定如何缩放数据以及使用哪个缩放器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56493506/

相关文章:

c# - 记录的统计汇总

python - Python 中的渐近回归?

python - 绘制每列随时间的观察结果(数据可用性)

python - 避免从计算字段更改类的状态 - Odoo v8

Python命令行交互库?

python - NLTK WordNetLemmatizer 将 "US"处理为 "u"

ruby - Ruby 中的推理统计

python - 使用无缓冲 shell 重定向时,stdout 和 stderr 不会进入文件?

r - 使用 `midasr` 包 : Inclusion of new high-frequency value 进行预测

java - 查找时间序列中值的变化