Python 如何解释深度学习模型的概率预测,该模型是最后一层的S形激活的输出?

Python 如何解释深度学习模型的概率预测,该模型是最后一层的S形激活的输出?,python,keras,classification,predict,sigmoid,Python,Keras,Classification,Predict,Sigmoid,我已经训练了一个二进制分类任务(pos.vs.neg.)并拥有一个.h5模型。我有外部数据(从未在培训或验证中使用)。总共有20个样本属于这两个类别 preds = model.predict(img) y_classes = np.argmax(preds , axis=1) 如果使用softmax作为最后一个输出层进行训练,则上述代码应计算概率(preds)和类标签(0或1)。但是,preds只是[0;1]之间的一个数字,y_类始终为0 稍微回顾一下,模型的平均AUC评估面积约为0.75。

我已经训练了一个二进制分类任务(pos.vs.neg.)并拥有一个
.h5
模型。我有外部数据(从未在培训或验证中使用)。总共有20个样本属于这两个类别

preds = model.predict(img)
y_classes = np.argmax(preds , axis=1)
如果使用softmax作为最后一个输出层进行训练,则上述代码应计算概率(preds)和类标签(0或1)。但是,preds只是[0;1]之间的一个数字,y_类始终为0

稍微回顾一下,模型的平均AUC评估面积约为0.75。 我可以看到这20个样本的概率大部分(17)在0-0.15之间,其余的是0.74、0.51和0.79

我如何从中得出结论

编辑: 在20个用于测试模型的样本中,10个属于阳性类别,另外10个属于阴性类别。属于pos.类别的所有10个都具有非常低的实用性(0-0.15)。10个负面类别中有7个具有相同的低概率,只有3个(0.74、0.51和0.79)


问题:为什么模型预测的样本概率如此之低,即使其AUC相当高?

在二元分类问题中,sigmoid激活函数用于生成概率。在这种情况下,模型输出一组形状等于要预测的图像长度的概率。我们可以检索预测类,只需检查概率分数。。。如果大于0.5(这是一种常见做法,但您也可以根据需要更改),则图像属于类1,否则它属于类0

preds = model.predict(img) # (n_images, 1)
y_classes = ((pred > 0.5)+0).ravel() # (n_images,)
如果是sigmoid,您的最后一个输出层必须
密集(1,activation='sigmoid')

在softmax的情况下(正如您刚才所做的),使用argmax检索预测的类

preds = model.predict(img) # (n_images, n_class)
y_classes = np.argmax(preds , axis=1)  # (n_images,)
对于softmax,您的最后一个输出层必须是密集的(n_类,activation='softmax')

为什么AUC不是一个好的指标

AUC的值可能会产生误导,并可能导致我们有时高估,有时低估模型的实际性能。平均精度的行为在了解模型的运行方式时更具表现力,因为它在区分好模型和非常好的模型时更为明智。此外,它与精度直接相关:这是一个人类可以理解的指标,这里是一个关于主题的伟大参考,它解释了您所需要的一切:

使用a作为激活函数,您基本上是在“压缩”先前层的输出,使其概率值从0到1

Softmax函数只是取一系列sigmoid函数,对它们进行聚合,并显示所有类的特定类概率和所有聚合概率之间的比率

例如:如果我使用一个模型来预测图像是香蕉、苹果还是葡萄的图像,并且我的模型识别出某个图像是0.75香蕉、0.20苹果和0.15葡萄(每个概率由一个S形函数生成),我的softmax层将进行以下计算:

香蕉:0.75/(0.75+0.20+0.15)=0.6818&苹果:0.20/1.1=0.1818&葡萄:0.15/1.1=0.1364

正如我们所看到的,由于我们的softmax图层,该模型将该特定图片分类为香蕉图片。然而,为了进行这种分类,它首先使用了一系列的S形函数

因此,如果我们最终达到了这一点,我会说,对sigmoid函数输出的解释应该类似于使用softmax层所做的解释,但尽管softmax层提供了一个类与另一个类之间的比较,sigmoid函数只是告诉您这条信息属于正数类的可能性有多大

为了进行最后的调用并决定某个项目是否属于正数类,您需要选择一个阈值(不一定是0.5)。选择阈值是输出解释的最后一步。如果你想最大限度地提高模型的精度,你会选择一个较高的阈值,但如果你想最大限度地提高模型的召回率,你肯定可以选择一个较低的阈值


我希望它能回答您的问题,如果您想让我详细说明什么,请告诉我,因为这个答案非常笼统。

非常具体的答案,但重要的是,选择阈值应该与您的模型目标相应。如果您正在过滤垃圾邮件,您将需要尽可能高的精确度,因为您不希望错过任何重要邮件,因为它们被归类为垃圾邮件。在这种情况下,您将选择高于0.5的阈值,如您所述。请参阅编辑。我的问题不是关于sigmoid和softmax之间的区别。我需要理解为什么模型错误地预测了样本。好吧,对不起,标题“如何解释概率”有点误导。然而,如果模型预测错误,则意味着它不是一个好的模型,或者问题太难解决(你从不报告你是如何构建模型的)。我还编辑了一个技巧来管理(替代)模型的AUC评估。别忘了投票并接受答案;-)谢谢你的反馈。1.你的概率分布是错误的。2.我已经知道这两个功能的含义。3.20个样本中有17个显示概率甚至没有达到0.2,这意味着它失败了。只有3个超过0.5(假设阈值为0.5),这在模糊准确度方面是15%。当平均AUC在0.75左右时怎么可能?让我知道一些事情