使用 TensorFlow RNN 模型预处理数据集
为了使其为学习模型做好准备,通过应用 MinMax 缩放来正则化数据集,该缩放使数据集值介于 0 和 1 之间。您可以尝试根据数据的性质对数据应用不同的缩放方法。
# normalize the dataset
scaler = skpp.MinMaxScaler(feature_range=(0, 1))
normalized_dataset = scaler.fit_transform(dataset)
我们使用自己开发的实用函数将数据集拆分为训练和测试数据集。必须拆分数据而不对数据集进行混洗,因为改组数据集会破坏序列。维护数据序列对于训练时间序列模型非常重要。
train,test=tsu.train_test_split(normalized_dataset,train_size=0.67)
然后我们将训练和测试数据集转换为有监督的机器学习集。让我们试着理解监督学习集的含义。假设我们有一系列数据:1,2,3,4,5。我们想要了解生成数据集的概率分布。为了做到这一点,我们可以假设时间步长t
的值是从时间步长t-1
到tk
的值的结果,其中k
是窗口大小。为简化起见,假设窗口大小为 1.因此,时间步长t
的值(称为输入特征)是时间步长值t-1
的结果,被称为目标。让我们重复一遍所有时间步骤,我们得到下表:
输入值或特征 | 输出值或目标 |
---|---|
1 | 2 |
2 | 3 |
3 | 4 |
4 | 5 |
我们展示的示例只有一个变量值,它将转换为特征和目标。当目标值取决于一个变量时,它被称为单变量时间序列。同样的逻辑可以应用于多变量时间序列,其中目标取决于多个变量。我们使用x
来表示输入特征,使用y
来表示输出目标。
考虑到这一背景,为了将airpass
数据转换为监督机器学习数据,我们设置了以下超参数:
- 设置用于学习或预测下一个时间步的过去时间步数:
n_x=1
- 设置学习或预测的未来时间步长的数量:
n_y=1
- 设置用于学习的
x
变量的数量;由于当前示例是单变量的,因此设置为 1:
n_x_vars = 1
- 设置要预测的
y
变量的数量;由于当前示例是单变量的,因此设置为 1:
n_y_vars = 1
- 最后,我们通过应用本节开头所述的逻辑将训练和测试数据集转换为
X
和Y
集:
X_train, Y_train, X_test, Y_test = tsu.mvts_to_xy(train,
test,n_x=n_x,n_y=n_y)
现在数据已经过预处理并可以输入到我们的模型中,让我们使用 TensorFlow 准备一个 SimpleRNN 模型。