learning to rank评价指标

1 准确率Mean average precision

1.1 定义

Precision at position k (P@k)是一个衡量排名前k位的方法,使用两个级别(相关的和不相关)的相关性判断。公式:
P @ k = 1 k ∑ j = 1 k r j P@k=\dfrac{1}{k}\sum^{k}_{j=1}r^j P@k=k1j=1krj
k是一个截断位置
r j = 1 r_j=1 rj=1,如果第j个位置的文档是相关的。
r j = 0 r_j=0 rj=0,否则。

平均准确率 average precision

A P = 1 ∣ D + ∣ ∑ j = 1 N r j P @ j AP = \dfrac{1}{|D_+|}\sum^{N}_{j=1}r_j P@j AP=D+1j=1NrjP@j

∣ D + ∣ |D_+| D+是关于查询的相关文档的数量,也可以认为相当于相当查询的标准答案的相关文档数量。
j是排序后的文档结果。
一般来说会有很多个query参与到训练集中。所以要取平均值: Mean average precision。
这个评价指标是基于二维的:相关、不相关。

1.2 计算

举个例子,现有一个query,与之相关的文档有4——D1,D2,D3,D4,用rank方法检索后,D2,D3,D4的排序分别是1,3,5,D1没有搜索到。也就是说rank后的结果:D2,D5,D3,D6,D4。D5,D6是不相关文档。
那么AP = 1 4 \dfrac{1}{4} 41(P@1+P@3+P@5)
P @ 1 = 1 1 = 1 P@1=\dfrac{1}{1}=1 P@1=11=1

P @ 3 = 2 3 P@3=\dfrac{2}{3} P@3=32,k=3,从1到3,相关文档有2个。

P @ 5 = 3 5 P@5=\dfrac{3}{5} P@5=53,k=5,从1到5,相关文档有3个。

那么AP = (1/1 + 2/3 + 3/5)/ 4=0.57

2 NDCG(Normalized Discounted Cumulative Gain)

2.1定义

NDCG(Normalized Discounted Cumulative Gain) 归一化折损累计增益。

N D C G @ k = D C G @ k I D C G @ k NDCG@k=\dfrac{DCG@k}{IDCG@k} NDCG@k=IDCG@kDCG@k

D C G @ K = ∑ j = 1 k g ( r j ) d ( j ) DCG@K=\sum^k_{j=1}g(r_j)d(j) DCG@K=j=1kg(rj)d(j), g ( r j ) = 2 r j − 1 g(r_j)=2^{r_j}-1 g(rj)=2rj1,
d ( j ) = 1 , 2 d(j)=1,2 d(j)=1,2,j=1,2
d ( j ) = 1 l o g 2 ( j ) d(j)=\dfrac{1}{log_2(j)} d(j)=log2(j)1,其他情况
也有一种写法是: D C G @ K = ∑ j = 1 k 2 r j − 1 l o g 2 ( j + 1 ) DCG@K=\sum^k_{j=1}\dfrac{2^{r_j}-1}{log_2(j+1)} DCG@K=j=1klog2(j+1)2rj1

这个计算公式可以针对多种分类级别。例如 r j = 3 , 2 , 1 , 0 r_j=3,2,1,0 rj=3,2,1,0。而且是包含了位置影响因素。相关性高的,排在前面会使得整体NDCG分值变大。

IDCG@k为理想情况下最大的DCG值:
I D C G @ k = ∑ j = 1 k 2 i d e a l i − 1 l o g 2 ( j + 1 ) IDCG@k=\sum^{k}_{j=1}\dfrac{2^{ideal_i}-1}{log_2(j+1)} IDCG@k=j=1klog2(j+1)2ideali1

2.2 例子

假设对于某一个query,本次搜索召回5个文档,其关联分数分别为 3、2、3、0、1、2。

j 2 r j − 1 2^{r_j}-1 2rj1 l o g 2 ( j + 1 ) log_2(j+1) log2(j+1)res
1313
221.581.26
3321.5
402.320
512.580.38
622.80.71

所以 DCG = 3+1.26+1.5+0+0.38+0.71 = 6.86

接下来计算IDCG。假设这个query的相关文档有6个,相关性分数为:3、3、3、2、2、1。

j g ( r j ) g(r_j) g(rj)d(j)res
1313
231.581.89
3321.5
422.320.86
522.580.77
612.80.35

所以IDCG = 3+1.89+1.5+0.86+0.77+0.35 = 8.37
最终 NDCG@6 = 6.86/8.37 = 81.96%

参考链接:https://www.cnblogs.com/by-dream/p/9403984.html https://blog.csdn.net/zimohuakai/article/details/6847453
《LETOR: A benchmark collection for research on learning to rank for information retrieval》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Learning to Quantify" 是一个非常广泛的研究方向,这里提供一个比较通用的 Python 代码模板,可以用于各种不同的 Learning to Quantify 任务。 首先,需要导入一些必要的库: ```python import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_absolute_error ``` 接下来,我们需要读入数据集。这里以一个简单的例子说明,数据集包含两个特征和一个目标变量: ```python data = pd.read_csv("data.csv") X = data.drop("target", axis=1) y = data["target"] ``` 接下来,将数据集分成训练集和测试集: ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 接下来,定义一个函数来训练模型: ```python def train_model(X_train, y_train): model = LinearRegression() model.fit(X_train, y_train) return model ``` 然后,定义一个函数来计算模型在测试集上的 MAE(平均绝对误差): ```python def evaluate_model(model, X_test, y_test): y_pred = model.predict(X_test) mae = mean_absolute_error(y_test, y_pred) return mae ``` 最后,将这些函数组合起来,训练模型并评估它的性能: ```python model = train_model(X_train, y_train) mae = evaluate_model(model, X_test, y_test) print("MAE: ", mae) ``` 这是一个非常基础的 Learning to Quantify 的 Python 代码模板,可以根据具体的任务和数据集进行相应的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值