互联网技术 / 互联网资讯 · 2023年12月17日

预测间隔的深度学习神经网络

预测间隔为回归问题的预测提供了不确定性度量。例如,95%的预测间隔表明,在100次预测中,真实值将落在该范围的下限和上限之间。这与简单的点预测有所不同,后者可能仅表示不确定性区间的中心。当前尚无标准技术来计算深度学习神经网络在回归预测建模问题上的预测间隔。然而,可以通过一组模型来估算一个快速且简单的预测间隔,这些模型提供的点预测分布可用于计算间隔。

在本教程中,您将学习如何计算深度学习神经网络的预测间隔。完成后,您将了解到:

预测间隔为回归预测建模提供不确定性度量;如何在标准回归问题上开发和评估简单的多层感知器神经网络;如何使用神经网络模型集成来计算和报告预测间隔。

本教程分为三个部分:

1. 预测间隔
2. 回归神经网络
3. 神经网络预测间隔

通常,回归问题的预测模型(即预测数值)进行点预测。这意味着它们可以预测单个值,但无法提供关于该预测的不确定性信息。预测本质上是估计值或近似值,包含一定的不确定性,这种不确定性源于模型本身的误差和输入数据中的噪声。模型是输入变量与输出变量之间关系的近似,预测间隔则是对预测不确定性的量化,为结果变量的估计提供了概率的上限和下限。

预测间隔通常在回归模型中用于进行预估或预测,围绕模型的预测值展开,旨在覆盖真实结果的范围。有关一般预测间隔的更多信息,请参考教程:

《机器学习的预测间隔》

既然我们了解了预测间隔,就可以考虑如何计算神经网络的间隔。首先定义一个回归问题和用于解决该问题的神经网络模型。

回归神经网络

在本节中,我们将定义回归预测建模问题及相应的神经网络模型。我们将使用住房数据集作为标准回归数据集。该数据集包含506行数据,包含13个数字输入变量和一个数字目标变量。

通过采用三次重复的分层10倍交叉验证,朴素模型的平均绝对误差(MAE)约为6.6。在相同测试工具下,表现最佳的模型可实现约1.9的MAE。这为该数据集设定了预期性能的界限,数据集用于根据美国波士顿市房屋郊区的详细信息预测房价。

房屋数据集(hoUSing.csv):

房屋描述(房屋名称):

无需单独下载数据集;作为我们工作示例的一部分,我们将自动下载它。

以下示例将数据集下载并加载为Pandas DataFrame,并概述了数据集的形状及数据的前五行。

运行示例将确认数据集包含506行和13个输入变量,以及一个数字目标变量(共14个)。我们还可以看到所有输入变量均为数字。

接下来,我们将准备建模的数据集。首先,将数据集拆分为输入和输出列,然后将行拆分为训练集和测试集。在此情况下,我们将使用约67%的行用于训练模型,其余33%的行用于估计模型的性能。

有关训练和测试拆分的更多信息,请参考本教程中的内容:训练测试拆分以评估机器学习算法。随后,我们将所有输入列(变量)缩放到0-1范围,即数据归一化,这在使用神经网络模型时是一个良好的实践。

可以在本教程中了解有关使用MinMaxScaler标准化输入数据的更多信息:

以下是准备好的数据完整示例。

运行示例将加载数据集,拆分列为输入和输出元素,并展示训练和测试集的形状,显示我们有339行用于训练模型,167行用于评估模型。

接下来,我们将定义、训练和评估多层感知器(MLP)模型。我们将构建一个简单模型,包含两个隐藏层和一个用于预测数值的输出层。我们将使用ReLU激活函数及“he”权重初始化,这被认为是良好的实践。经过一些实验后,确定了每个隐藏层的节点数量。

我们将使用接近默认学习速率和动量值的高效Adam优化算法,并使用均方误差(MSE)损失函数(回归预测建模的标准)来拟合模型。

可以在本教程中了解有关Adam优化算法的更多信息:

该模型将训练300个纪元,批处理大小为16个样本。经过多次尝试后,选择了该配置。

可以在本教程中了解有关批次和纪元的更多信息:

最后,通过在测试数据集上进行预测,我们可以将预测值与测试集中的期望值进行比较,从而评估预测并计算平均绝对误差(MAE),这是一种有用的模型性能度量。

完整实例如下:

运行示例将加载并准备数据集,定义MLP模型并在训练数据集上拟合,同时在测试集上评估其性能。

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。建议多次运行该示例并比较平均结果。

在此情况下,我们可以看到模型实现的平均绝对误差约为2.3,优于朴素模型,并接近最佳模型。

毫无疑问,进一步细调模型可以达到更接近最佳的性能,但这对于我们的预测间隔研究已足够。

Epoch 296/300 22/22 – 0s – loss: 7.1741 Epoch 297/300 22/22 – 0s – loss: 6.8044 Epoch 298/300 22/22 – 0s – loss: 6.8623 Epoch 299/300 22/22 – 0s – loss: 7.7010 Epoch 300/300 22/22 – 0s – loss: 6.5374 MAE: 2.300

接下来,让我们看看如何在住房数据集上的MLP模型中计算预测间隔。

神经网络预测间隔

在本节中,我们将利用上一节中开发的回归问题和模型来创建预测间隔。

与线性回归等线性方法(预测间隔计算简单)相比,神经网络等非线性回归算法的预测间隔计算则更具挑战性。目前没有标准技术。许多方法可以有效地为神经网络模型计算预测间隔。我建议您参考“更多阅读”部分列出的一些文献以获取更多信息。

在本教程中,我们将使用一种非常简单的方法,虽然具有很大的扩展空间,但被称为“快速且简单”,因为它易于计算,尽管具有一定局限性。方法涉及拟合多个最终模型(例如10到30个)。来自集合成员的点预测分布随后用于计算点预测和预测间隔。

例如,可以将点预测视为来自集合成员的点预测平均值,而95%的预测间隔可视为与该平均值的1.96倍标准偏差。这是一个简单的高斯预测间隔,尽管也可以使用其他方法,如点预测的最小值和最大值。或者,可以使用自举方法在不同的自举样本上训练每个集合成员,并将点预测的第2.5个百分点和第97.5个百分点用作预测间隔。

有关自举方法的更多信息,请参考教程:

这些扩展留作练习;我们将坚持使用简单的高斯预测间隔。

假设在上一部分中定义的训练数据集为整个数据集,并且我们正在对该数据集训练一个或多个最终模型。然后,我们可以在测试集上使用预测间隔进行预测,并评估该间隔在未来的有效性。

我们可以通过将上一节中开发的元素划分为功能来简化代码。首先,让我们定义一个函数,用于加载和准备由URL定义的回归数据集。

然后,我们可以定义一个函数,该函数在给定训练数据集的情况下定义和训练MLP模型,并返回适合进行预测的拟合模型。

我们需要多个模型来进行点预测,这些模型将定义点预测的分布,从中可以估算间隔。

因此,我们需要在训练数据集上拟合多个模型。每个模型都必须有所不同,以便做出不同的预测。在训练MLP模型时,随机性、随机初始权重和使用随机梯度下降优化算法的情况下可以实现这一点。模型数量越多,点预测将更好地估计模型的功能。建议至少使用10个模型,而超过30个模型可能不会带来显著益处。以下函数将拟合模型并将其存储在返回的列表中。出于兴趣,测试集上也评估了每个拟合模型,并在拟合每个模型后报告该测试集的性能。我们希望每个模型在测试集上的估计性能会略有不同,报告的分数将帮助我们确认这一预期。

最后,我们可以使用训练好的模型集合进行点预测,并将其总结为一个预测区间。

以下功能实现了这一点。首先,每个模型对输入数据进行点预测,然后计算95%的预测间隔,并返回该间隔的下限值、平均值和上限值。

该函数设计为接受单行输入,但可以轻松调整以处理多行。

接下来,加载并准备数据集,定义并拟合模型集合。

然后,我们可以使用测试集中的一行数据,进行预测并报告预测间隔的结果。

同时,我们也报告了期望值,该期望值将在预测间隔内涵盖(大约95%的时间;这并不完全准确,只是个粗略近似)。

综上所述,以下是使用多层感知器神经网络进行预测间隔预测的完整示例。

运行示例依次拟合每个集合成员,并在保留测试集上报告其估计性能;最后,进行具有预测间隔的预测。

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。建议多次运行该示例并比较平均结果。

在这种情况下,我们可以看到每个模型的性能略有不同,这证实了我们对模型确实有所不同的期望。

最后,我们可以看到该合奏以95%的预测间隔[26.287, 34.822]进行了约30.5的点预测。我们还发现,真实值为28.2,并且间隔确实捕获了该值,这非常令人满意。

True value: 28.200

如上所述,这是一种快速且简单的技术,用于神经网络的预测间隔。还有一些简单的扩展,例如应用自举方法以实现更可靠的点预测,以及一些文献中介绍的更高级技术,欢迎您进一步探索。

[[[IMG_1]]]

[[[IMG_2]]]

[[[IMG_3]]]