Scikit-учить неправильно вычисляя отзыв - PullRequest
1 голос
/ 21 января 2020

Использование scikit-learn версии 0.22.1 в jupyterlab. Однако я не могу привести минимальный воспроизводимый пример, надеясь, что это нормально, потому что это скорее концептуальный вопрос.

Я строю модель классификации. У меня есть свои функции в X и моя целевая переменная в y. Я подхожу к регрессионной модели логистики c и вычисляю прогнозы:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

from sklearn.linear_model import LogisticRegression
logmodel = LogisticRegression(solver='liblinear')
logmodel.fit(X_train, y_train)

predictions = logmodel.predict(X_test)

Теперь я хочу просмотреть матрицу путаницы, оценку точности, оценку точности и оценку отзыва. Поэтому я запускаю следующее:

from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score
print(f"Confusion matrix: \n {confusion_matrix(y_test, predictions)}")
print(f"Accuracy: \t {accuracy_score(y_test, predictions):.2%}")
print(f"Precision: \t {precision_score(y_test, predictions):.3f}")
print(f"Recall: \t {recall_score(y_test, predictions):.3f}")

>> Confusion matrix:
>> [[128838     54]
>>  [  8968    279]]
>> Accuracy:    93.47%
>> Precision:   0.838
>> Recall:      0.030

Оценка отзыва должна быть TP / (TP + FN) = 128838 / (128838 + 8968) = 0,934923008 . Почему sklearn дает мне 0,03 для отзыва? Я неправильно просчитал или recall_score работает не так, как я ожидал?

Редактировать: случайно набрал TP / (TP + FP) вместо вышеуказанного. Исправлено.

1 Ответ

1 голос
/ 21 января 2020

Вы вычисляете отзыв для класса 0.

Здесь отзыв (который, кстати, вы путаете с Точностью) равен R = 279 / (279 + 8968) = 0,03

и точность P = 279 / (279 + 54) = 0,83

матрица здесь

---------------------------
|      x    |true 0  |true 1|
---------------------------
|predicted 0| 128838 |  8968|
|predicted 1|   54   |  279 |

, что означает:

  • TP = 279

  • FP = 54

  • FN = 8968

  • TN = 128838

, а не наоборот.

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