Precision_recall_curve sklearn неверно на небольшом примере - PullRequest
0 голосов
/ 06 апреля 2020

Вот очень маленький пример использования precision_recall_curve ():

from sklearn.metrics import precision_recall_curve, precision_score, recall_score
y_true = [0, 1]
y_predict_proba = [0.25,0.75]
precision, recall, thresholds = precision_recall_curve(y_true, y_predict_proba)
precision, recall

, что приводит к:

(array([1., 1.]), array([1., 0.]))

Вышеприведенное не соответствует "ручному" вычислению, которое следует.

Существует три возможных вектора класса в зависимости от порога: [0,0] (когда порог> 0,75), [0,1] (когда порог находится между 0,25 и 0,75) и [1,1 ] (когда порог составляет <0,25). Мы должны отбросить [0,0], потому что это дает неопределенную точность (делим на ноль). Таким образом, применяя Precision_score () и return_score () к двум другим: </p>

y_predict_class=[0,1]
precision_score(y_true, y_predict_class), recall_score(y_true, y_predict_class)

, что дает:

(1.0, 1.0)

и

y_predict_class=[1,1]
precision_score(y_true, y_predict_class), recall_score(y_true, y_predict_class)

, что дает

(0.5, 1.0)

Похоже, это не соответствует выводу precision_recall_curve () (который, например, не дал значения точности 0,5).

Я что-то упустил?

...