Keras,模型predict_proba的输出

4
文档中,predict_proba(self, x, batch_size=32, verbose=1)方法会批量生成输入样本的分类概率预测结果。该方法的输出为一个Numpy数组,表示每个样本属于不同类别的概率。
假设我的模型是二元分类模型,那么输出是[a, b],其中 aclass_0的概率,bclass_1的概率,对吗?
2个回答

13

这里的情况与其他情况有所不同, 且有些具有误导性,尤其是当您将 predict_proba 方法与名字相同的 sklearn 方法进行比较时。在Keras中(而不是sklearn包装器),predict_proba方法与predict方法完全相同。 您甚至可以在此处进行验证:

def predict_proba(self, x, batch_size=32, verbose=1):
        """Generates class probability predictions for the input samples
        batch by batch.
        # Arguments
            x: input data, as a Numpy array or list of Numpy arrays
                (if the model has multiple inputs).
            batch_size: integer.
            verbose: verbosity mode, 0 or 1.
        # Returns
            A Numpy array of probability predictions.
        """
        preds = self.predict(x, batch_size, verbose)
        if preds.min() < 0. or preds.max() > 1.:
            warnings.warn('Network returning invalid probability values. '
                          'The last layer might not normalize predictions '
                          'into probabilities '
                          '(like softmax or sigmoid would).')
        return preds

因此,在二元分类的情况下,您获得的输出取决于网络的设计:

  • 如果您的网络的最终输出是通过单个sigmoid输出获得的,则predict_proba的输出仅是分配给类1的概率。
  • 如果您的网络的最终输出是通过二维输出获得的,并且您正在应用softmax函数,则predict_proba的输出是一对[a,b],其中a = P(class(x) = 0)b = P(class(x) = 1)

这第二种方法很少使用,并且使用第一种方法有一些理论上的优势,但我想通知您-以防万一。


答案已经过时。 - Martin Thoma

0

这取决于您如何指定模型输出和目标。它可以是两者。通常,在进行二元分类时,输出是一个单一值,即正预测的概率。1减去输出是负预测的概率。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接