У меня проблемы с воспроизведением параметров чувствительности и специфичности из значений матрицы путаницы 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
.)