决定如何缩放数据以及使用哪个缩放器?
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 如果不使用负值。
我正在尝试在 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 如果不使用负值。