排序指标CG,DCG,NDCG

CG(Cumulative Gain)表示累积增益,rel_i 表示查询结果列表中第 i 个位置的相关性值(相关程度可以理解为权重),即该结果和查询有多大联系,可以看出CG不会考虑查询结果的顺序,即如果随机打乱查询结果, CG 的值也不会变。比如有一个查询:『abc』
排序指标CG,DCG,NDCG_第1张图片
C G p = ∑ i = 1 p r e l i \mathrm { CG } _ { \mathrm { p } } = \sum _ { i = 1 } ^ { p } r e l _ { i } CGp=i=1preli

上图输出5条结果,每条结果的相关程度即增益为“Gain”所在的列,累积增益为“Cumulative Gain”所在的列,可以看到第二条查询结果和查询的相关程度最低,为3,如果将第2条结果和第5条结果交换位置,那么计算所得的 CG_5完全不变,也就是说 CG 在整体上考虑了查询结果的好坏,并不在意结果的顺序。

DCG_P中的 p 代表第 p 个位置的折扣累积增益,rel_i 表示第 i 个位置相关程度,其分子代表第 i 个位置结果的相关程度,分母是位置 i 的对数表示。如果将相关程度高的结果排序在列表的后面,会导致 DCG 的值变低,即惩罚了这种情况,所以以 DCG 作为目标的排序会使最相关的结果排列在最靠前的位置。

D C G p = ∑ i = 1 p 2 r e l i − 1 log ⁡ 2 ( i + 1 ) \mathrm { DCG } _ { \mathrm { p } } = \sum _ { i = 1 } ^ { p } \frac { 2 ^ { r e l _ { i } } - 1 } { \log _ { 2 } ( i + 1 ) } DCGp=i=1plog2(i+1)2reli1

nDCG_p=DCG_P / IDCG ,其值在0-1之间,为什么要这么做呢?举个例子:可以比较两个不同长度的查询结果列表,哪个结果更好一些;也可以比较不同的系统给出结果的好坏。但是,其有一个缺点: IDCG 通常难以全部获得,因为相关程度需要用户的反馈信息,而一个列表完整的反馈信息通常难以获得。

n D C G p = D C G p I D C G p \mathrm { nDCG } _ { \mathrm { p } } = \frac { D C G _ { p } } { I D C G _ { p } } nDCGp=IDCGpDCGp

可以看到 其中 IDCG为理想化的 DCG ,其值计算方式如下,|REL| 代表按相关程度排序后的查询结果列表,也就是这个列表最大的 DCG 值。

你可能感兴趣的:(音乐推荐,排序,rank)