Путаница с вычислением SKlearn Precision-Recall Curve

avatar
zeal
8 апреля 2018 в 09:15
1071
1
1

Ниже приведен фрагмент из расчета pr-curve научного набора.

>>> import numpy as np
>>> from sklearn.metrics import precision_recall_curve
>>> y_true = np.array([0, 0, 1, 1])
>>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])
>>> precision, recall, thresholds = precision_recall_curve(
...     y_true, y_scores)
>>> precision  
array([ 0.66...   0.5       ,  1.        ,  1.        ])
>>> recall
array([ 1. ,  0.5,  0.5,  0. ])
>>> thresholds
array([ 0.35,  0.4 ,  0.8 ])

Сомнения:

Почему пороги равны 3, а точность и полнота равны 4. Как видно, порог 0,1 не учитывается. И расчет начинается с порога 0,35 и выше.

Источник

Ответы (1)

avatar
Bert Kellerman
8 апреля 2018 в 10:53
2

Пороги достаточно низкие, чтобы достичь 100% отзыва. Идея состоит в том, что вы обычно не устанавливаете более низкий порог, поскольку это приведет к ненужным ложным срабатываниям.

https://github.com/scikit-learn/scikit-learn/blob/a24c8b46/sklearn/metrics/ranking.py

  

   # stop when full recall attained
   # and reverse the outputs so recall is decreasing
    last_ind = tps.searchsorted(tps[-1])            
    sl = slice(last_ind, None, -1)
    return np.r_[precision[sl], 1], np.r_[recall[sl], 0], thresholds[sl]
zeal
8 апреля 2018 в 11:59
0

Спасибо. Это имеет смысл. Кроме того, я думаю, вы можете добавить, почему нет порога для последнего набора точности и отзыва: «Последние значения точности и отзыва равны 1 и 0 соответственно и не имеют соответствующего порога. Это гарантирует, что график начинается на оси X. Более того, если точность равна 1, вспомнить 0 невозможно, и наоборот.