Keras,模型的输出predict_proba

Goi*_*Way 4 python machine-learning neural-network deep-learning keras

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

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

并返回

Numpy概率预测数组.

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

Mar*_*jko 11

这里的情况是不同的,在某种程度上误导性的,尤其是当你比较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
Run Code Online (Sandbox Code Playgroud)

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

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

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