如何计算R中的Mean Average Precision分数?有简单的方法吗?
我计算如下。我不知道这是不是真的…
pr = prediction(preds, labs)
pf = performance(pr, "prec", "rec")
# plot(pf)
pf@x.name
[1] "Recall"
pf@y.name
[1] "Precision"
rec = pf@x.values[[1]]
prec = pf@y.values[[1]]
idxall = NULL
for(i in 1:10){
i = i/10
# find closest values in recall to the values 0, 0.1, 0.2, ... ,1.0
idx = which(abs(rec-i)==min(abs(rec-i)))
# there are more than one value return, choose the value in the middle
idx = idx[ceiling(length(idx)/2)]
idxall = c(idxall, idx)
}
prec.mean = mean(prec[idxall])
我添加了一个示例。这个例子假设你有实际的Y值作为二进制值的向量,预测的Y值作为连续值的向量。
# vbYreal: real Y values
# vdYhat: predicted Y values
# ex) uNumToExamineK <- length(vbYreal)
# vbYreal <- c(1,0,1,0,0,1,0,0,1,1,0,0,0,0,0)
# vdYhat <- c(.91, .89, .88, .85, .71, .70, .6, .53, .5, .4, .3, .3, .3, .3, .1)
# description:
# vbYreal_sort_d is the descending order of vbYreal(e.g., c(1,0,1,0,0,1,0,0,1,1,0,0,0,0,0) )
FuAPk <- function (uNumToExamineK, vbYreal, vdYhat){
# The real Y values is sorted by predicted Y values in decending order(decreasing=TRUE)
vbYreal_sort_d <- vbYreal[order(vdYhat, decreasing=TRUE)]
vbYreal_sort_d <- vbYreal_sort_d[1:uNumToExamineK]
uAveragePrecision <- sum(cumsum(vbYreal_sort_d) * vbYreal_sort_d / seq_along(vbYreal_sort_d)) /
sum(vbYreal_sort_d)
uAveragePrecision
}
vbYreal <- c(1,0,1,0,0,1,0,0,1,1,0,0,0,0,0)
vdYhat <- c(.91, .89, .88, .85, .71, .70, .6, .53, .5, .4, .3, .3, .3, .3, .1)
FuAPk(length(vbYreal), vbYreal, vdYhat)
# [1] 0.6222222
以下是Metrics
包中的一个示例