Здесь ситуация другая и как-то вводит в заблуждение, особенно когда вы сравниваете метод 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
Так что - в бинарной классификации случае - выход, который вы получите, зависит от конструкции сети:
- если конечный результат вашей сети получается по одному сигмовидному выходу - тогда выход
predict_proba
является просто вероятностью, назначенной классу 1.
- , если конечный выход вашей сети получается двумерным выходом, к которому вы применяете функцию
softmax
, - тогда выход predict_proba
представляет собой пару, где [a, b]
, где a = P(class(x) = 0)
и b = P(class(x) = 1)
.
Этот второй метод редко используется, и есть некоторые теоретические преимущества использования первого метода - но я хотел сообщить вам - на всякий случай.
Ответ устарел –