作者:LogM
本文原载于 https://segmentfault.com/u/logm/articles ,不允许转载~
1. P@K
P@K
,代表前 K 个预测值中有多少的准确率 (Precision)。
比如,一个模型输出了一组排序,其输出的好坏依次为:好、坏、好、坏、好。
那么,
Prec@3 = 2/3
Prec@4 = 2/4
Prec@5 = 3/5
def precision(gt, pred, K):
""" Computes the average precision.
gt: list, ground truth, all relevant docs' index
pred: list, prediction
"""
hit_num = len(gt & set(pred[:K]))
return float(1.0 * hit_num / K)
2. MAP
AP
是 average precision 的缩写,计算方式是把所有相关文档的 P@K
求平均。
借用上面的例子,一个模型输出了一组排序,依次为:好的结果、坏的结果、好的结果、坏的结果、好的结果。
那么,
AP = (1/1 + 2/3 + 3/5) / 3 = 0.76