在文档中,predict_proba(self, x, batch_size=32, verbose=1)
的描述是
逐批生成输入样本的类别概率预测。
并返回
一个包含概率预测的Numpy数组。
假设我的模型是二分类模型,输出是否为[a, b]
,其中a
是class_0
的概率,b
是class_1
的概率?
回答:
这里的情况有所不同,而且在某种程度上可能具有误导性,特别是当你将predict_proba
方法与sklearn
中同名的方法进行比较时。在Keras(不是sklearn的包装器)中,predict_proba
方法与predict
方法是完全相同的。你甚至可以在这里查看:
def predict_proba(self, x, batch_size=32, verbose=1): """逐批生成输入样本的类别概率预测。
# 参数
x: 输入数据,作为Numpy数组或Numpy数组列表(如果模型有多个输入)。
batch_size: 整数。
verbose: 详细模式,0或1。
# 返回
一个包含概率预测的Numpy数组。
""" preds = self.predict(x, batch_size, verbose) if preds.min() < 0. or preds.max() > 1.: warnings.warn('网络返回无效的概率值。 ' '最后一层可能没有将预测标准化为概率 ' '(如softmax或sigmoid所做的那样)。') return preds
因此,在二分类的情况下,你得到的输出取决于你的网络设计:
- 如果你的网络的最终输出是通过单个sigmoid输出获得的,那么
predict_proba
的输出就是简单地分配给类别1的概率。 - 如果你的网络的最终输出是通过一个二维输出并应用
softmax
函数获得的,那么predict_proba
的输出是一个对[a, b]
,其中a = P(class(x) = 0)
和b = P(class(x) = 1)
。
第二种方法很少使用,并且使用第一种方法有一些理论上的优势——但我只是想告知你,以防万一。