Как я могу найти вероятность того, что модель классифицирует вход как [0,1] - PullRequest
0 голосов
/ 23 марта 2019

Я работаю над проблемой классификации, в которой я хочу найти «вероятность того, что вход классифицируется как [1,0]» и «не [1,0]»

Я пытался использовать predict_proba метод SVC, который дает вероятность класса, который я не ищу

from sklearn.svm import SVC

model = SVC(probability=True)
model.fit(final_data,foreclosure_y)
results = model.predict_proba(final_data_test)[0]

Я ожидаю, что мой вывод будет таким

index,y
---------    
0,0.45
1,0.62
2,0.43
3,0.12
4,0.55

Примечание: приведенный выше вывод находится в форме .csv, где y - это test_y

Здесь столбец y - ​​это вероятности каждого экземпляра с индексами от 0 до 4, которые можно классифицировать как 0 или 1

Например: - индекс 0 имеет вероятность 0,45 классифицироваться как 0 или 1

1 Ответ

1 голос
/ 23 марта 2019

Обратите внимание, что

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...