R中的精确度,召回率和f度量

时间:2012-09-24 20:23:57

标签: r precision-recall

我有一段时间没有使用R,所以也许我还没有习惯它,但是......我在R中有一个带有两个列的表,第一个有预测值(一个值可以是0或1),第二个具有实际值(也是0或1)。我需要找到回忆,精确度和f度量,但在R中找不到它的好功能。(我也读过ROCR,但我所能做的就是创建一些情节,但我真的不需要情节,我需要数字。)

在R中找到精度,召回和f测量​​有什么好的功能吗? 有没有不同的方法呢?

4 个答案:

答案 0 :(得分:20)

首先,我将数据集创建为

> 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-measure是2 *精度*召回/(精确+召回)是

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

答案 1 :(得分:8)

将Patrick的优秀答案巧妙地整合到一个功能中......

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')
}

答案 2 :(得分:2)

您可以从confusionMatrix()包中使用功能caret获取所有这些指标。

# Create a sample
predicted <- as.factor(sample(c(0, 1), 100, replace=T))
realized  <- as.factor(sample(c(0, 1), 100, replace=T))

# Compute the confusion matrix and all the statistics
result <- confusionMatrix(predicted, realized, mode="prec_recall")

result
result$byClass["Precision"]
result$byClass["Recall"]
result$byClass["F1"]

答案 3 :(得分:0)

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')
}