Вот очень маленький пример использования 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).
Я что-то упустил?