точность, полнота и F-мера в R

Я не использовал R некоторое время, так что, возможно, я просто еще не привык к этому, но.. У меня есть таблица в R с двумя colums, первая имеет предсказанные значения (значение может быть 0 или 1), вторая имеет фактические значения (также 0 или 1). Мне нужно найти отзыв, точность и f-меры, но не могу найти хорошую функцию для него в R. (Я также читал о ROCR, но все, что я мог сделать, это создать некоторые графики, но мне действительно не нужны графики, мне нужны цифры).

есть ли хорошие функции для нахождения точности, отзыва и f-меры в R? Есть ли другие способы сделать это?

3 ответов


сначала я создаю набор данных как

> predict <- sample(c(0, 1), 20, replace=T)
> true <- sample(c(0, 1), 20, replace=T)

Я полагаю, что эти 1 в прогнозируемых значениях являются извлеченными. Общее количество извлеченных -

> retrieved <- sum(predict)

точность, которая является долей извлеченных экземпляров, которые имеют отношение, является

> precision <- sum(predict & true) / retrieved

Напомним, какая часть соответствующих экземпляров, которые извлекаются, является

> recall <- sum(predict & true) / sum(true)

F-мера 2 * точность * отзыв / (точность + отзыв) является

> Fmeasure <- 2 * precision * recall / (precision + recall)

просто упаковка отличный ответ Патрика аккуратно в функцию ...

measurePrecisionRecall <- function(predict, actual_labels){
  precision <- sum(predict & actual_labels) / sum(predict)
  recall <- sum(predict & actual_labels) / sum(actual_labels)
  fmeasure <- 2 * precision * recall / (precision + recall)

  cat('precision:  ')
  cat(precision * 100)
  cat('%')
  cat('\n')

  cat('recall:     ')
  cat(recall * 100)
  cat('%')
  cat('\n')

  cat('f-measure:  ')
  cat(fmeasure * 100)
  cat('%')
  cat('\n')
}

measurePrecisionRecall <- function(actual_labels, predict){
  conMatrix = table(actual_labels, predict)
  precision <- conMatrix['0','0'] / ifelse(sum(conMatrix[,'0'])== 0, 1, sum(conMatrix[,'0']))
  recall <- conMatrix['0','0'] / ifelse(sum(conMatrix['0',])== 0, 1, sum(conMatrix['0',]))
  fmeasure <- 2 * precision * recall / ifelse(precision + recall == 0, 1, precision + recall)

  cat('precision:  ')
  cat(precision * 100)
  cat('%')
  cat('\n')

  cat('recall:     ')
  cat(recall * 100)
  cat('%')
  cat('\n')

  cat('f-measure:  ')
  cat(fmeasure * 100)
  cat('%')
  cat('\n')
}