机器学习笔记 // 探索整体的预测
在前一节中,你看到了如何根据窗口大小获取前一组值集,并将它们传递给模型,从而获得给定时间点的预测。为了查看模型的整体结果,你必须对每个时间步都执行同样的操作。你可以通过以下简单的循环来实现:
forecast = []
for time in range(len(series) - window_size):
forecast.append(
model.predict(series[time:time + window_size][np.newaxis]))
回忆一下,你还在时间步1000把数据集分割成了训练集和验证集。因此,在下一步你应该也只从那个时间开始进行预测。由于你的预测数据已经偏移了20(或者无论你的窗口大小是多少),你可以将它分割并转换为一个Numpy数组:
forecast = forecast[split_time-window_size:]
results = np.array(foreast)[:, 0, 0]
它现在和预测数据有同样的形状,因此你可以绘制它们来对照彼此:
plt.figure(figsize=(10, 6))
plot_series(time_valid, x_valid)
plot_series(time_valid, results)
通过一个快速的视觉检查,你可以看到这个预测并不差。它基本上追随了原始数据的曲线。当数据中有快速的变化时,预测花费了一点时间来追赶,但是整体上它并不差。然而,肉眼观察曲线很难做到准确。最好能有一个好的指标,MAE很合适。你可以通过以下代码来度量MAE:
tf.keras.metrics.mean_absolute_error(x_valid, results).numpy()
有一些随机量被引入了数据,因此你的结果可能会变化,我的MAE值是4.51。
你可能会说,获得准确的预测的过程是最小化MAE的过程。你可以使用几项技术来实现它,包括显而易见地改变窗口大小。我会留给你进行实验,但是下一节你会在优化器上做一些基本的超参数调整,来提升神经网络的学习方式,并看看这会对MAE产生什么样的影响。