理解精确度@K、平均精确度@K、均值平均精确度@K

我目前正在评估基于隐式反馈的推荐系统。在评估排名任务的指标方面,我有些困惑。具体来说,我希望通过精确度和召回率来进行评估。

精确度@k的优势在于不需要估计相关文档集的大小,但缺点是它在常用评估指标中稳定性最差,且平均效果不佳,因为查询的相关文档总数对k处的精确度有很大影响

我自己也注意到它往往波动较大,因此我想平均多个评估日志的结果。

我在想,如果我运行一个评估函数,返回以下数组:

包含每个用户精确度@k得分的Numpy数组。

现在我有了一组数据集中所有精确度@3的得分。

如果我取这个数组的平均值,并在比如说20个不同的得分上进行平均:这是否相当于均值平均精确度@KMAP@K,还是我对这个理解得有点太字面了?

我在写一篇包含评估部分的论文,所以定义的准确性对我来说非常重要。


回答:

涉及到两个平均值,这使得这些概念有些模糊,但它们在推荐系统的上下文中还是相当直白的,让我来澄清一下:

P@K

系统的top-k推荐中包含了多少相关项目

例如,要计算P@3:对于给定用户,取前3个推荐,并检查其中有多少是好的。将这个数字除以3,就得到了P@3

AP@K

P@i的平均值,其中i=1, …, K

例如,要计算AP@3:将P@1、P@2和P@3相加,然后将这个值除以3

AP@K通常是为单个用户计算的。

MAP@K

所有用户的AP@K的平均值。

例如,要计算MAP@3:将所有用户的AP@3相加,然后将这个值除以用户数量

如果你是程序员,你可以查看这个代码,这是Kaggle的CTO维护的ml_metrics库中apkmapk函数的实现。

希望这对你有帮助!

Related Posts

关于k折交叉验证的直观问题

我在使用交叉验证检查预测能力时遇到了一些直观问题,我认…

调整numpy数组大小以使用sklearn的train_test_split函数?

我正在尝试使用sklearn中的test_train_…

如何转换二维张量和索引张量以便用于torch.nn.utils.rnn.pack_sequence

我有一组序列,格式如下: sequences = to…

模型预测值的含义是什么?

我在网上找到一个数字识别器的CNN模型并进行了训练,当…

锯齿张量作为LSTM的输入

了解锯齿张量以及如何在TensorFlow中使用它们。…

如何告诉SciKit的LinearRegression模型预测值不能小于零?

我有以下代码,尝试根据非价格基础特征来估值股票。 pr…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注