2012-09-24 38 views
6

我有一段时间没有使用过R,所以也许我还不习惯它,但是..我有一张桌子在R有两个圆柱,第一个已预测值(一个值可以是0或1),第二个具有实际值(也是0或1)。我需要找到回忆,精确度和f-度量,但在R中找不到它的好函数(我也读过关于ROCR的内容,但我所能做的只是创建一些情节,但我确实不需要剧情,我需要数字)。精确度,召回率和f值在R

R有没有什么好的功能可以找到精确度,召回率和f-measure? 有没有什么不同的方法来做到这一点?

+0

在我开始这个任务,我也没有。 (http://en.wikipedia.org/wiki/Precision_and_recall#F-measure) – Fanny

+0

我在https://stackoverflow.com/a/36843900/6105797回答了类似的问题 –

回答

18

首先创建一个数据集作为

> 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 * precision * recall /(precision + recall)是

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

谢谢,它工作得很好! (并且比我想象的要简单多了,我想我再次想到了) – Fanny

+2

当预测全部为0(分类器预测所有样本属于0类)时,检索结果= 0,然后除以0 – Omri374

8

只是包装帕特里克伟大回答整齐成一个函数...

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') 
} 
相关问题