如何确定神经网络预测的置信度?

机器算法验证 回归 机器学习 神经网络 置信区间 预测区间
2022-02-02 03:04:57

为了说明我的问题,假设我有一个训练集,其中输入有一定程度的噪声,但输出没有,例如;

# Training data
[1.02, 1.95, 2.01, 3.06] : [1.0]
[2.03, 4.11, 5.92, 8.00] : [2.0]
[10.01, 11.02, 11.96, 12.04] : [1.0]
[2.99, 6.06, 9.01, 12.10] : [3.0]

这里的输出是输入数组的梯度,如果它是无噪声的(不是实际的梯度)。

在训练网络之后,对于给定的输入,输出应该看起来像这样。

# Expected Output
[1.01, 1.96, 2.00, 3.06] : 95% confidence interval of [0.97, 1.03]
[2.03, 4.11, 3.89, 3.51] : 95% confidence interval of [2.30, 4.12]

我的问题是如何创建神经网络,使其返回预测值和置信度,例如方差或置信区间?

4个回答

听起来你正在寻找一个,即包含预先指定百分比的未来实现的区间。(查看标签维基差异。)

您最好的选择可能是直接使用不输出单点预测,而是输出整个预测分布的 NN 架构。然后,您可以从这些分布中直接提取所需的预测区间(或均值或中点预测)。我和其他人一直在争论预测分布比点预测更有用,但老实说,我还没有看到很多关于神经网络预测分布的工作,尽管我一直睁大眼睛。这篇论文听起来可能有用。您可能想搜索一下,也许还使用其他关键字,如“预测分布”或“预测密度”等。

也就是说,您可能需要研究Michael Feindt 的NeuroBayes 算法,该算法使用贝叶斯方法来预测预测密度。

我不确定您是否可以计算单个预测的置信区间,但您确实可以计算整个数据集的错误率的置信区间(您可以概括准确性和您正在评估的任何其他度量)。

如果e是您对某些数据进行分类时的错误率S大小的n,错误率的 95% 置信区间由下式给出:

e±1.96e(1e)n
.

(参见 Tom Mitchell 的“机器学习”一书,第 5 章。)

编辑

我想我应该陈述一个更一般的情况,即:

e±zNe(1e)n,
常见的选择zN列于下表:

confidence level    80%    90%    95%    98%    99%
values of zN       1.28   1.64   1.96   2.33   2.58

在直接输出预测区间方面,有一篇 2011 年的论文 ' Comprehensive Review of Neural Network-Based Prediction Intervals '

他们比较了四种方法:

1:Delta 方法 2:贝叶斯方法 3:均值方差估计 4:Bootstrap

相同的作者继续开发用于构建基于神经网络的预测区间的下上限估计方法,该方法直接从 NN 输出下限和上限。不幸的是,它不适用于反向传播,但最近的工作使这成为可能,用于深度学习的高质量预测间隔

作为直接输出预测区间的替代方案,贝叶斯神经网络 (BNN) 对 NN 参数中的不确定性进行建模,从而在输出中捕获不确定性。这很难做到,但流行的方法包括在预测时运行MC dropout 或ensembling

我不知道有什么方法可以准确地做到这一点。

一种解决方法可能是假设您有高斯噪声并使神经网络预测平均值μ和方差σ. 对于成本函数,您可以使用 NLPD(负对数概率密度)。对于数据点(xi,yi)那将是logN(yiμ(xi),σ(xi)). 这将使您的μ(xi)尝试预测你的yi和你的σ(xi)当你有更多的信心时,你会变得更小,当你没有信心的时候,你会变得更大。

要检查您可能想要查看的验证数据的假设有多好yiμ(xi)σ(xi)看看他们是否大致遵循N(0,1). 在测试数据上,您再次希望最大化测试数据的概率,以便您可以再次使用 NLPD 指标。