Sklearn: поменялись ли значения возврата и точности, когда они вычисляются с помощью precision_score и rec_score? - PullRequest
1 голос
/ 25 февраля 2020

Я использую scikit-learn (версия 0.22.1) для приложения машинного обучения.

Я использую алгоритм Random Forest, и у меня есть некоторые проблемы с оценкой производительности алгоритма с использованием точности и вспомнить. У меня есть метки моего тестового набора (Y_test) и метки, предсказанные с использованием алгоритма Random Forest (Y_pred). Обе данные содержат две метки (1 и 0)

Подробно, у меня есть эта матрица:

print(confusion_matrix(y_true=Y_test, y_pred=Y_pred, labels=[1,0]))

[[78 20]
 [36 41]]

Следовательно:

True Positive (tp) =  78
False Negative (fn) =  36
False Positive (fp) =  20

Итак:

PRECISION =  tp/(tp+fn) = 78/(78+36) = 0.7959183673469388
RECALL =  = tp/(tp+fp) = 78/(78+20) 0.6842105263157895

Однако, используя этот код:

precision = precision_score(Y_test, Y_pred, pos_label=1)
recall = recall_score(y_true=Y_test, y_pred=Y_pred, pos_label=1)

print("precision: ",precision)
print("recall: ",recall)

Я получаю следующий вывод:

recall:  0.7959183673469388
precision:  0.6842105263157895

Кажется, что значения меняются местами, когда они вычисляются с использованием стандартного sklearn функции. Я сделал что-то неправильно? Пожалуйста, вы можете дать мне совет?

Спасибо,

Даниэле

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Вы в настоящее время рассчитываете эти значения неправильно. Правильные расчеты:

Точный расчет:

precision = tp/(tp+fp)

Расчет отзыва:

recall = tp/(tp+fn)

Ссылка: https://developers.google.com/machine-learning/crash-course/classification/precision-and-recall

0 голосов
/ 25 февраля 2020

Формула неверна:

Precision: tp / tp+fp
Recall : tp/tp+fn
...