Keras,模型的输出predict_proba

时间:2017-01-18 10:02:25

标签: python machine-learning neural-network deep-learning keras

docs中,predict_proba(self, x, batch_size=32, verbose=1)

  

逐批生成输入样本的类概率预测。

并返回

  

Numpy概率预测数组。

假设我的模型是二元分类模型,输出是[a, b]a的概率是class_0bclass_1的概率}?

2 个答案:

答案 0 :(得分:10)

这里的情况有所不同,并且有些误导,特别是当您将predict_proba方法与sklearn方法进行比较时,同名。在Keras(不是sklearn包装器)中,方法predict_proba predict方法完全相同。您甚至可以查看here

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]其中{{}} {1}}和a = P(class(x) = 0)

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

答案 1 :(得分:0)

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