Воспроизведение путаницы путаницыMatrix чувствительность и специфичность (они, кажется, поменялись местами) и PPV (кажется, помечены NPV) - PullRequest
0 голосов
/ 05 февраля 2020

У меня проблемы с воспроизведением параметров чувствительности и специфичности из значений матрицы путаницы caret. (Заранее извиняюсь, что это не воспроизводимо, но я надеюсь, что я покажу достаточно кода, чтобы его можно было очистить; кроме ссылки pROC, он должен быть в состоянии воспроизвести любым (0,1) вектором истины и предсказания).

От https://en.wikipedia.org/wiki/Sensitivity_and_specificity:

  • чувствительность (также известная как TPR) = TP / (TP + FN)
  • специфичность (она же избирательность, то есть TNR) = TN / (TN + FP)
  • точность (также положительное прогностическое значение или PPV) = TP / (TP + FP)

Моя матрица путаницы :

> cm = confusionMatrix(factor(y_pred),factor(y_test))
> cm$table
          Reference
Prediction    0    1
         0 8883  374
         1 1440 1640

, из которого я беру

> TP=1640; FP=1440; FN=374; TN=8883
> cm$byClass
         Sensitivity          Specificity       Pos Pred Value       Neg Pred Value 
           0.8605057            0.8142999            0.9595981            0.5324675 
           Precision               Recall                   F1           Prevalence 
           0.9595981            0.8605057            0.9073544            0.8367512 
      Detection Rate Detection Prevalence    Balanced Accuracy 
           0.7200292            0.7503445            0.8374028 
> TP / (TP + FN)  #sensitivity aka Recall aka TPR
[1] 0.8142999
> TN / (TN + FP)  #Specificity 
[1] 0.8605057
> TP / (TP + FP)  #precision aka PPV
[1] 0.5324675
> TN / (TN + FN)  # NPV
[1] 0.9595981

Выглядит так, как будто возвращаемые данные имеют неправильную метку - специфичность и чувствительность поменялись местами, а также Pos Pred Value и Neg Предыдущее значение.

Перекрестная проверка с pROC:

> best_thr = coords(pROC_obj,x='best',input='threshold',transpose=TRUE)
> best_thr
  threshold specificity sensitivity 
  0.2204595   0.8605057   0.8142999

, кажется, подтверждает, что значения confustionMatrix Чувствительность и Специфичность были поменяны местами.

Что больше всего касается Примерно то, что значение F1, которое я собирался получить, далеко не всегда, когда я пытаюсь его проверить:

 > cm$byClass[7]
       F1 
0.9073544 
 > TP / (TP + (FP+FN)/2)   # F1
[1] 0.6438948

Я использую версию 3.5.3 R с (только что установлен) pROC и caret пакетов. Я делаю что-то не так с моими вычислениями, или возможно caret confusionMatrix на самом деле возвращает неправильные значения (особенно F1)? (Я бы предположил, что скорее ошибаюсь, но pROC coords согласился со мной и не согласен с confusionMatrix.)

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