NDCG:normalized discounted cumulative gain
NDCG把相关度分为r个等级
如果r=5,则等级设定分别为2^ 5-1, 2^ 4-1, 2^ 3-1, 2^2-1,1.
通常将得分分为3分等级或5个等级,rel用2^n来表示。
NDCG = DCG/ideal DCG
NDCG@n
ndcg@n 只关心前n个排序是否正确,后面的排序正不正确不予考虑。
ndcg@n 的计算方式比较特别,要进行两次排序,一次是对预测的结果排序,另一次是对实际的分布排序。
例如list [3,2,0,1,1,3,0,0]
计算ndcg@5时只考虑前5个元素[3,2,0,1,1]
理想情况下的排序为[3,3,2,1,1]
此时的dcg为
ndcg@5 即为
def DCG(label_list):
dcgsum = 0
for i in range(len(label_list)):
dcg = (2**label_list[i] - 1)/np.log2(i+2)
dcgsum += dcg
return dcgsum
#ndcg 计算
def NDCG(label_list,top_n):
#没有设定topn
if top_n==None:
dcg = DCG(label_list)
ideal_list = sorted(label_list, reverse=True)
ideal_dcg = DCG(ideal_list)
if ideal_dcg == 0:
return 0
return dcg/ideal_dcg
#设定top n
else:
dcg = DCG(label_list[0:top_n])
ideal_list = sorted(label_list, reverse=True)
ideal_dcg = DCG(ideal_list[0:top_n])
if ideal_dcg == 0:
return 0
return dcg/ideal_dcg
网友评论