Обратите внимание, что
sum([0.58502114, 0.41497886])
# 1.0
predict_proba
дает вероятности для обоих ваших классов (следовательно, элементы массива суммируют до 1) в порядке их появления в model.classes_
;цитата из документов (которые всегда ваш лучший друг в таких ситуациях):
Возвращает вероятность выборки для каждого класса в модели.Столбцы соответствуют классам в отсортированном порядке, поскольку они появляются в классах атрибутов _.
Вот пример с игрушечными данными, чтобы проиллюстрировать идею:
from sklearn.svm import SVC
model = SVC(probability=True)
X = [[1,2,3], [2,3,4]] # feature vectors
Y = [0, 1] # classes
model.fit(X, Y)
Давайте теперьполучить прогнозируемые вероятности для первого экземпляра в обучающем наборе [1,2,3]
:
model.predict_proba(X)[0]
# array([0.39097541, 0.60902459])
ОК, каков порядок - то есть, какая вероятность принадлежит какому классу?
model.classes_
# array([0, 1])
Таким образом, это означает, что вероятность для экземпляра, принадлежащего классу 0
, является первым элементом массива 0.39097541
, тогда как вероятность принадлежности к классу 1
является вторым элементом 0.60902459
;и снова, они составляют в сумме до 1, как и ожидалось:
sum([0.39097541, 0.60902459])
# 1.0
ОБНОВЛЕНИЕ
Теперь в выводах, таких как тот, который вам требуется, мы не помещаемобе вероятности;по договоренности и для двоичной классификации мы включаем только вероятность для каждого экземпляра, принадлежащего class 1 ;вот как мы можем сделать это для набора данных игрушек X
, показанного выше только для 2 экземпляров:
pred = model.predict_proba(X)
pred
# array([[ 0.39097541, 0.60902459],
# [ 0.60705475, 0.39294525]])
import pandas as pd
out = pd.DataFrame(pred[:,1],columns=['y']) # keep only the second element of the arrays in pred, i.e. the probability for class 1
print(out)
Результат:
y
0 0.609025
1 0.392945