Keras,模型输出 predict_proba

Keras, output of model predict_proba

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

Generates class probability predictions for the input samples batch by batch.

和returns

A Numpy array of probability predictions.

假设我的模型是二分类模型,输出是[a, b],因为aclass_0的概率,b是[=的概率16=]?

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

这里的情况有所不同,并且在某种程度上具有误导性,尤其是当您将 predict_proba 方法与具有相同名称的 sklearn 方法进行比较时。在 Keras(不是 sklearn 包装器)中,方法 predict_probapredict 方法 完全相同。你甚至可以检查它 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

所以 - 在二进制 classification 情况下 - 你得到的输出取决于你的网络设计:

  • 如果你的网络的最终输出是通过单个 sigmoid 输出获得的 - 那么 predict_proba 的输出只是分配给 class 1.
  • 的概率
  • 如果网络的最终输出是通过应用 softmax 函数的二维输出获得的 - 那么 predict_proba 的输出是一对 [a, b]其中 a = P(class(x) = 0)b = P(class(x) = 1).

第二种方法很少使用,使用第一种方法在理论上有一些优势 - 但我想告诉你 - 以防万一。