У Caret уже есть функции сводки для вывода всех упомянутых вами метрик:
defaultSummary
выводит точность и Kappa
twoClassSummary
выводит AUC (область под кривой ROC - см. Последнюю строку ответа), чувствительность и специфичность
prSummary
выводит точность и вызывает
, чтобы получить комбинированные метрики, вы можете написать свою собственную сводную функцию, которая объединяет выходные данные этих трех:
library(caret)
MySummary <- function(data, lev = NULL, model = NULL){
a1 <- defaultSummary(data, lev, model)
b1 <- twoClassSummary(data, lev, model)
c1 <- prSummary(data, lev, model)
out <- c(a1, b1, c1)
out}
попробуем использовать набор данных сонара:
library(mlbench)
data("Sonar")
при определении управления поездом важно установить classProbs = TRUE
, поскольку некоторые из этих метрик (ROC и prAUC) не могут быть рассчитаны на основе прогнозируемого класса, но на основепо прогнозируемым вероятностям.
ctrl <- trainControl(method = "repeatedcv",
number = 10,
savePredictions = TRUE,
summaryFunction = MySummary,
classProbs = TRUE)
Теперь поместите модель по вашему выбору:
mod_fit <- train(Class ~.,
data = Sonar,
method = "rf",
trControl = ctrl)
mod_fit$results
#output
mtry Accuracy Kappa ROC Sens Spec AUC Precision Recall F AccuracySD KappaSD
1 2 0.8364069 0.6666364 0.9454798 0.9280303 0.7333333 0.8683726 0.8121087 0.9280303 0.8621526 0.10570484 0.2162077
2 31 0.8179870 0.6307880 0.9208081 0.8840909 0.7411111 0.8450612 0.8074942 0.8840909 0.8374326 0.06076222 0.1221844
3 60 0.8034632 0.6017979 0.9049242 0.8659091 0.7311111 0.8332068 0.7966889 0.8659091 0.8229330 0.06795824 0.1369086
ROCSD SensSD SpecSD AUCSD PrecisionSD RecallSD FSD
1 0.04393947 0.05727927 0.1948585 0.03410854 0.12717667 0.05727927 0.08482963
2 0.04995650 0.11053858 0.1398657 0.04694993 0.09075782 0.11053858 0.05772388
3 0.04965178 0.12047598 0.1387580 0.04820979 0.08951728 0.12047598 0.06715206
в этот выходной ROC - фактически область под кривой ROC - обычно называемая AUC
а AUC - это площадь под кривой точного возврата через все срезы.