9

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

有没有什么好的函数可以在 R 中找到精度、召回率和 f 度量?有什么不同的方法吗?

4

4 回答 4

23

首先我创建一个数据集

> 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)
于 2012-09-24T22:40:21.267 回答
10

只是将帕特里克的好答案整齐地包装成一个函数......

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')
}
于 2016-02-14T15:14:47.730 回答
6

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"]
于 2018-10-18T21:12:33.870 回答
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')
}
于 2018-08-23T03:57:57.193 回答