如何计算神经网络预测的置信度分数

yam*_*oel 6 machine-learning uncertainty confidence-interval keras tensorflow

我正在使用深度神经网络模型(在 中实现keras)进行预测。像这样的东西:

def make_model():
 model = Sequential()       
 model.add(Conv2D(20,(5,5), activation = "relu"))
 model.add(MaxPooling2D(pool_size=(2,2)))    
 model.add(Flatten())
 model.add(Dense(20, activation = "relu"))
 model.add(Lambda(lambda x: tf.expand_dims(x, axis=1)))
 model.add(SimpleRNN(50, activation="relu"))
 model.add(Dense(1, activation="sigmoid"))    
 model.compile(loss = "binary_crossentropy", optimizer = adagrad, metrics = ["accuracy"])

 return model

model = make_model()
model.fit(x_train, y_train, validation_data = (x_validation,y_validation), epochs = 25, batch_size = 25, verbose = 1)

##Prediciton:
prediction = model.predict_classes(x)
probabilities = model.predict_proba(x) #I assume these are the probabilities of class being predictied
Run Code Online (Sandbox Code Playgroud)

我的问题是分类(二进制)问题。我希望计算其中每一个的置信度得分,prediction即我想知道 - 我的模型是 99% 确定它是“0”还是 58% 它是“0”。

我找到了一些关于如何做的观点,但无法实施。我希望遵循的方法是:“使用分类器,当您输出时,您可以将值解释为属于每个特定类别的概率。您可以使用它们的分布来粗略衡量您对观察属于该类别的信心程度.”

我应该如何使用上述模型进行预测,以便我对每个预测都有信心?我会欣赏一些实际的例子(最好是在 Keras 中)。

the*_*etz 6

softmax 是估计模型预测置信度的一种有问题的方法。

最近有几篇关于这个主题的论文。

您可以查找神经网络的“校准”以找到相关论文。

这是您可以开始的一个示例 - https://arxiv.org/pdf/1706.04599.pdf


ali*_*ift 0

使用 softmax 作为最后一层的激活怎么样?让我们这样说:

model.add(Dense(2, activation='softmax'))    
model.compile(loss='categorical_crossentropy', optimizer = adagrad, metrics = ["accuracy"])
Run Code Online (Sandbox Code Playgroud)

这样,对于每个数据点,模型都会给出一个概率结果,该结果告诉您的数据点属于两个类中的每一个的可能性是多少。

例如,对于给定的 X,如果模型返回 (0.3,0.7),您将知道 X 属于类别 1 的可能性高于类别 0。并且您知道可能性已估计为 0.7 而不是 0.3。