给定一个具有 n 个特征的多类分类模型,我如何测量该特定分类的模型的不确定性?
假设对于某些类别,模型准确性令人惊叹,但对于另一些类别则不然。我想找到一个指标,让我决定对于特定样本,我是否愿意“倾听”模型。
我考虑过使用预测间隔,但不知道如何计算它们。
给定一个具有 n 个特征的多类分类模型,我如何测量该特定分类的模型的不确定性?
假设对于某些类别,模型准确性令人惊叹,但对于另一些类别则不然。我想找到一个指标,让我决定对于特定样本,我是否愿意“倾听”模型。
我考虑过使用预测间隔,但不知道如何计算它们。
除了已接受的答案之外,另一种估计特定预测不确定性的方法是使用特定函数组合模型为每个类别返回的概率。这是“主动学习”中的常见做法,在给定训练模型的情况下,您可以根据某种不确定性估计选择未标记实例的子集进行标记(以增加初始训练数据集)。最常用的三个函数(在文献中称为采样策略 [1])是:
香农熵:您只需将香农熵应用于模型为每个类返回的概率。熵越高,不确定性越高。
最不自信:您只需查看模型在所有类别中返回的最高概率。直观地说,与“高”最高概率(例如 [.9, .05, .05] --> .9)。
边际抽样:从最高概率中减去第二高概率(例如 [.6, .35, .05] --> .6-.35=.25)。它在概念上类似于最不自信的策略,但更可靠一些,因为您正在查看两个概率之间的距离,而不是单个原始值。此外,在这种情况下,小的差异意味着高不确定性水平。
另一种更有趣的方法来估计测试实例的不确定性水平,适用于具有 dropout 层的深度模型,而不是深度主动学习 [2]。基本上,通过在进行预测时保持 dropout 处于活动状态,您可以引导一组不同的结果(根据每个类的概率),您可以从中估计均值和方差。在这种情况下,方差告诉您模型对该实例的不确定程度。
无论如何,考虑到这些只是粗略的近似,使用一个专门估计特定预测的不确定性的模型,如已接受的答案中所建议的那样,肯定是最好的选择。尽管如此,这些估计还是很有用的,因为它们可能适用于每个返回概率的模型(并且也有适用于 SVM 等模型的调整)。
[1] http://www.robotics.stanford.edu/~stong/papers/tong_thesis.pdf
在模型中,您将决定如何最好地获得不确定性。例如,如果您使用贝叶斯优化(这是 Python 中的一个很好的包),您将获得一个协方差矩阵以及您的预期值,因此固有地获得了一个不确定性度量。在这种情况下,您可以对数据的基本函数进行预测,并且(协)方差将提供不确定性级别,如下线周围绿色带的宽度所示:
所以红点显示了我们有一些样本数据的地方......请注意,我们没有,例如X = 4
和X = -1
,这就是为什么我们有很高的不确定性;95% 的置信区间非常大。
例如,如果您使用标准的深度神经网络 TPO 执行分类,则没有内在的不确定性度量。你真正拥有的只是你的测试准确性,让你知道模型在保留数据上的表现如何。我不记得它是在哪里解释的,但我认为用不确定性来解释类预测值实际上是不可行的。
例如,如果您正在预测cat
或dog
针对图像,并且两个类分别接收(标准化)logit 值[0.51, 0.49]
,您不能假设这意味着非常低的确定性。
虽然它不能准确衡量分类模型的不确定性,但您可以查看信任分数。
我想你在寻找
model.predict_prob()
在 python 中,很多模型都有它。并且使用此功能,您可以计算模型确定其答案的强度。