IR常用评价指标计算方式(AUC,MAP,NDCG,MRR,Precision、Recall、F-score)

本文详细介绍了评估机器学习模型性能的六个关键指标:AUC、MAP、NDCG、MRR、Precision和Recall及F-score。这些指标分别从不同角度衡量模型的分类和排序能力,对于理解和优化模型至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AUC,MAP,NDCG,MRR,Precision、Recall、F-score

1.AUC(Area Under Curve)

ROC曲线下方的面积大小,由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。

首先AUC值是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值。当然,AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。

 2.MAP(Mean Average Precision)

MAP:单个主题的平均准确率是每篇相关文档检索出后的准确率的平均值。

 

MAP是为解决Precision、Recall、F-score的单点值局限性的,同时考虑检索效果的排名情况。计算如下:假设有两个主题,主题1有4个相关网页,主题2有5个相关网页。某系统对于主题1检索出4个相关网页,其rank分别为1,2,4,7;对于主题2检索出3个相关网页,其rank分别为1,3,5。对于主题1,平均准确率为(1/1+2/2+3/4+4/7) / 4 = 0.83。对于主题2,平均准确率为(1/1+2/3+3/5+0+0) / 5 = 2.45。则MAP=(0.83+0.45) / 2 = 0.64。

3.NDCG(Normalized Discounted Cumulative Gain)

è¿éåå¾çæè¿°

NDCG(Normalized Discounted Cumulative Gain):计算相对复杂。对于排在结位置n处的NDCG的计算公式如下图所示:

在MAP中,四个文档和query要么相关,要么不相关,也就是相关度非0即1。NDCG中改进了下,相关度分成从0到r的r+1的等级(r可设定)。当取r=5时,等级设定如下图所示:

(应该还有r=1那一级,原文档有误,不过这里不影响理解)

例如现在有一个query={abc},返回下图左列的Ranked List(URL),当假设用户的选择与排序结果无关(即每一级都等概率被选中),则生成的累计增益值如下图最右列所示:

考虑到一般情况下用户会优先点选排在前面的搜索结果,所以应该引入一个折算因子(discounting factor): log(2)/log(1+rank)。这时将获得DCG值(Discounted Cumulative Gain)如下如所示:

最后,为了使不同等级上的搜索结果的得分值容易比较,需要将DCG值归一化的到NDCG值。操作如下图所示,首先计算理想返回结果List的DCG值:

然后用DCG/MaxDCG就得到NDCG值,如下图所示:

4.MRR(Mean Reciprocal Rank)

其中|Q|是查询个数,ranki是第i个查询,第一个相关的结果所在的排列位置。

即把标准答案在被评价系统给出结果中的排序取倒数作为它的准确度,再对所有的问题取平均。

5.Precision、Recall、F-score

信息检索、分类、识别、翻译等领域两个最基本指标是召回率(Recall Rate)和准确率(Precision Rate——注意统计学习方法中precision称为精确率,而准确率accuracy是分类正确的样本除以总样本的个数),召回率也叫查全率,准确率也叫查准率。

公式如下:

召回率(Recall) = 系统检索到的相关文件 / 系统所有相关的文件总数。亦即,预测为真实正例 / 所有真实正例样本的个数。

准确率(Precision) = 系统检索到的相关文件 / 系统所有检索到的文件总数。亦即,预测为真实正例 / 所有被预测为正例样本的个数。

注意:准确率和召回率是相互影响的,理想情况下肯定是做到两者都高,但是一般情况下,准确率高、召回率就低;召回率低、准确率高。当然如果两者都低,那是什么地方出问题了。一般情况,用不同的阈值,统计出一组不同阈值下的精确率和召回率,如下图:

如果是做搜索,那就是保证召回率的情况下提升准确率;如果做疾病检测、反垃圾,则是保证准确率的条件下,提升召回率。所以,在两者都要求高的情况下,可以用F1(或者称为F-score)来衡量。计算公式如下:F1 = (2 × P × R) / (P + R)。

转载自:

https://blog.youkuaiyun.com/weixin_38405636/article/details/80675312

https://blog.youkuaiyun.com/lightty/article/details/47079017

https://blog.youkuaiyun.com/universe_ant/article/details/70090026

https://blog.youkuaiyun.com/Allenalex/article/details/78161915

https://www.cnblogs.com/eyeszjwang/articles/2368087.html

<think>好的,我现在需要回答用户关于NDCG公式及其实现代码的问题。首先,我得回忆一下NDCG的相关知识,并确保自己正确理解公式和实现步骤。 用户明确要求NDCG的公式和代码示例,并且需要详细解释。根据用户提供的引用,特别是引用[1]和[4]中的代码和例子,我需要整合这些信息。首先,NDCG(Normalized Discounted Cumulative Gain)是用于评估排序质量的指标,尤其适用于信息检索和推荐系统。它考虑到了每个项目的相关性以及位置的影响,通过归一化处理使得结果在0到1之间,1表示完美排序。 接下来,我需要分步骤解释NDCG计算过程。首先是计算DCG(Discounted Cumulative Gain),然后计算IDCG(Ideal DCG),最后NDCG就是两者的比值。DCG的公式有不同的版本,常见的有两种,用户提供的代码中使用的是哪一种呢?根据引用[1]中的代码,DCG的计算是将每个项目的增益除以该位置的log2对数(位置从2开始),这可能对应公式中的折损因子。例如,对于排名i的项目,其贡献为 (2^rel_i - 1) / log2(i + 1),其中rel_i是相关性分数。 在代码示例中,用户提供的Python函数get_dcg接收一个推荐列表rec_list,假设这个列表中的元素是相关性分数。代码里计算了log_2为从2开始的log2值,即位置i+1,因为np.arange(2, len(rec_list)+2)生成的是2到len+1的数组,对应的位置是1到len,所以i从1开始,log2(i+1)也就是log2(2)到log2(len+1)。然后计算mi为2^rec_list - 1,这对应了增益部分。然后将mi除以log_2并求和得到DCG。 接着,IDCG是理想情况下最大的DCG,也就是将推荐列表按照相关性降序排列后计算的DCG。代码中将sort_rec_list作为排序后的列表传入,计算IDCG,然后NDCG为DCG/IDCG。 需要验证这个计算是否符合标准公式。根据引用[4],在例子中,list_best=[B,D,A,C,E],对应的相关性分数应该是按降序排列,计算每个位置的贡献,然后累加得到IDCG。用户提供的代码中的方法是否与此一致呢?是的,因为sort_rec_list是按相关性从高到低排列的,所以计算IDCG时得到的是最大值。 接下来,我需要将公式用LaTeX表示出来,注意用户要求行内公式用$...$,独立公式用$$...$$。例如,DCG的公式可以写成: $$DCG@k = \sum_{i=1}^k \frac{2^{rel_i} - 1}{\log_2(i + 1)}$$ 而IDCG是同一公式在最优排序下的结果,NDCG则是DCG除以IDCG。 然后,代码部分需要展示用户提供的代码,并解释每一步的作用。例如,在get_dcg函数中,rec_list是推荐列表中的相关性分数,log_2计算的是每个位置的log值,mi计算的是增益部分,然后求和得到DCG。在示例中,rec_list是[3,2,4,5,1],而排序后的sort_rec_list是[5,4,3,3,2],也就是按相关性降序排列后的结果。计算得到的NDCG是DCG除以IDCG,结果应该在0到1之间。 此外,需要注意用户提供的引用中有其他内容,比如引用[2]和[3]可能涉及搜索引擎和协同过滤,但与当前问题关系不大,可以忽略。主要参考引用[1]和[4]中的代码和例子。 最后,生成相关问题,可能需要考虑NDCG的应用场景、与其他指标的比较、优化方法等。例如,如何分析NDCG的优缺点,或者在不同k值下的表现差异。 总结,我需要将NDCG的公式、代码实现步骤、示例计算过程详细解释,并确保LaTeX格式正确,同时生成相关问题。</think>### NDCG公式及实现代码详解 #### 一、NDCG定义 NDCG(Normalized Discounted Cumulative Gain)是衡量排序质量的评估指标,通过考虑相关性权重和位置衰减因子,量化排序结果与理想排序的接近程度。其核心公式分为三部分: 1. **DCG(折损累计增益)**: $$DCG@k = \sum_{i=1}^k \frac{2^{rel_i} - 1}{\log_2(i + 1)}$$ 其中,$rel_i$ 表示第$i$个位置的相关性得分,$\log_2(i+1)$ 为位置衰减因子[^4]。 2. **IDCG(理想DCG)**: 将相关性得分按降序排列后计算得到的最大DCG值。 3. **NDCG**: $$NDCG@k = \frac{DCG@k}{IDCG@k}$$ 取值范围为$[0,1]$,值越大表示排序越接近理想状态。 --- #### 二、Python实现代码 以下代码实现了NDCG计算,并包含详细注释: ```python import numpy as np def get_dcg(rec_list): # 计算增益部分:2^rel_i - 1 mi = np.power(2, rec_list) - 1 # 计算位置衰减因子:log2(i+1),i从1开始 log_2 = np.log2(np.arange(2, len(rec_list) + 2)) # 计算DCG:各位置增益与衰减因子的比值之和 dcg = np.sum(mi / log_2) return dcg if __name__ == "__main__": # 示例输入:原始推荐列表的相关性得分 rec_list = [3, 2, 4, 5, 1] # 理想排序后的列表(相关性降序) sort_rec_list = [5, 4, 3, 3, 2] dcg = get_dcg(rec_list) # 计算实际DCG idcg = get_dcg(sort_rec_list) # 计算理想DCG ndcg = dcg / idcg # 计算NDCG print(f"DCG: {dcg:.3f}, IDCG: {idcg:.3f}, NDCG: {ndcg:.3f}") ``` **输出示例**: ``` DCG: 18.016, IDCG: 23.245, NDCG: 0.775 ``` --- #### 三、关键步骤解释 1. **增益计算**: `mi = np.power(2, rec_list) - 1` 将相关性得分转换为指数增益,体现高相关性的重要性差异。例如,相关性为5时,增益为$2^5-1=31$。 2. **位置衰减**: `log_2 = np.log2(np.arange(2, len(rec_list) + 2))` 对排名靠后的结果施加更强的衰减。例如,第1位衰减因子为$\log_2(2)=1$,第5位为$\log_2(6)\approx2.58$。 3. **归一化处理**: 通过除以理想排序的IDCG,消除不同查询间相关性量纲的影响,使结果可比[^1]。 --- #### 四、应用场景 NDCG广泛用于以下场景: - 搜索引擎结果排序评估 - 推荐系统的个性化列表质量评价 - 广告排序效果分析 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值