Результат вычисления точности и отзыва и связанных с ними кажется странным - PullRequest
0 голосов
/ 01 мая 2018

Я моделирую поисковую систему, которая извлекает 10 документов, но только 5 из них релевантны.

from sklearn import svm, datasets
from sklearn.model_selection import train_test_split
import numpy as np
from sklearn.metrics import precision_recall_curve
import matplotlib.pyplot as plt
from sklearn.metrics import average_precision_score
from sklearn.metrics import roc_curve
from sklearn.metrics.ranking import _binary_clf_curve

y_true = np.array([True, True, False, True, False, True, False, False, False, True])

Уменьшение порога для получения большего количества документов:

y_scores = np.array([1, .9, .8, .7, .6, .5, .4, .3, .2, .1])

Теперь получаем точность, отзывы и пороги:

precisions, recalls, thresholds1 = precision_recall_curve(y_true, y_scores)

print("\nPresicions:")
for pr in precisions:
    print('{0:0.2f}'.format(pr), end='; ')

print("\nRecalls:")
for rec in recalls:
    print('{0:0.2f}'.format(rec), end='; ')

print("\nThresholds:")
for thr in thresholds1:
    print('{0:0.2f}'.format(thr), end='; ')

Выход 1

Presicions:
0.50; 0.44; 0.50; 0.57; 0.67; 0.60; 0.75; 0.67; 1.00; 1.00; 1.00;
Recalls:
1.00; 0.80; 0.80; 0.80; 0.80; 0.60; 0.60; 0.40; 0.40; 0.20; 0.00;
Thresholds:
0.10; 0.20; 0.30; 0.40; 0.50; 0.60; 0.70; 0.80; 0.90; 1.00;

Выходной код для случая 2:

falsePositiveRates, truePositiveRates, thresholds2 = roc_curve(y_true, y_scores, pos_label = True)

print("\nFPRs:")
for fpr in falsePositiveRates:
    print('{0:0.2f}'.format(fpr), end='; ')

print("\nTPRs:")
for tpr in truePositiveRates:
    print('{0:0.2f}'.format(tpr), end='; ')

print("\nThresholds:")
for thr in thresholds2:
    print('{0:0.2f}'.format(thr), end='; ')

Выход 2

FPRs:
0.00; 0.00; 0.20; 0.20; 0.40; 0.40; 1.00; 1.00;
TPRs:
0.20; 0.40; 0.40; 0.60; 0.60; 0.80; 0.80; 1.00;
Thresholds:
1.00; 0.90; 0.80; 0.70; 0.60; 0.50; 0.20; 0.10;

Вопросы В выводе 1 почему последняя точность (которая будет 1-й на графике) вычисляется как 1 вместо 0?

На выходе 2, почему длины FPR, TPR и Threshold 8 вместо 10?

1 Ответ

0 голосов
/ 01 мая 2018

На выходе1, почему последняя точность (которая будет 1-й на графике) установлена ​​в 1 вместо 0?

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

На выходе2 почему значения FPR, TPR, Threshold равны 8 вместо 10

Вы позволили drop_intermediate установить значение по умолчанию True. 0,3 и 0,4 являются неоптимальными пороговыми значениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...