Дополнительные показатели в карете - PPV, чувствительность, специфичность - PullRequest
0 голосов
/ 07 октября 2018

Я использовал каретку для логистической регрессии в R:

  ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 10, 
                       savePredictions = TRUE)

  mod_fit <- train(Y ~ .,  data=df, method="glm", family="binomial",
                   trControl = ctrl)

  print(mod_fit)

По умолчанию указана метрика точности и Коэна Каппа.Я хочу извлечь соответствующие метрики, такие как чувствительность, специфичность, положительная прогностическая ценность и т. Д., Но я не могу найти простой способ сделать это.Окончательная модель предоставлена, но она обучена на всех данных (насколько я могу судить из документации), поэтому я не могу использовать ее для прогнозирования заново.

Матрица путаницы вычисляет все необходимые параметры, но передача ее в качестве сводной функции не работает:

  ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 10, 
                       savePredictions = TRUE, summaryFunction = confusionMatrix)

  mod_fit <- train(Y ~ .,  data=df, method="glm", family="binomial",
                   trControl = ctrl)

Error: `data` and `reference` should be factors with the same levels. 
13.
stop("`data` and `reference` should be factors with the same levels.", 
    call. = FALSE) 
12.
confusionMatrix.default(testOutput, lev, method) 
11.
ctrl$summaryFunction(testOutput, lev, method) 

Есть ли способ извлечь эту информацию в дополнение к точности и каппе, иликак-нибудь найти его в train_object, возвращаемом поездом?

Заранее спасибо!

1 Ответ

0 голосов
/ 08 октября 2018

У 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 - это площадь под кривой точного возврата через все срезы.

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