◆版权声明:本文出自胖喵~的博客,转载必须注明出处。html
转载请注明出处:http://www.javashuo.com/article/p-qkdcodhu-gd.html 算法
概念翻译
NDCG,Normalized Discounted cumulative gain 直接翻译为归一化折损累计增益,可能有些晦涩,不要紧下面重点来解释一下这个评价指标。这个指标一般是用来衡量和评价搜索结果算法(注意这里维基百科中提到了还有推荐算法,可是我我的以为不太适合推荐算法,后面我会给我出个人解释)。DCG的两个思想:orm
一、高关联度的结果比通常关联度的结果更影响最终的指标得分;htm
二、有高关联度的结果出如今更靠前的位置的时候,指标会越高;blog
累计增益(CG)排序
CG,cumulative gain,是DCG的前身,只考虑到了相关性的关联程度,没有考虑到位置的因素。它是一个搜素结果相关性分数的总和。指定位置p上的CG为:get
reli 表明i这个位置上的相关度。博客
举例:假设搜索“篮球”结果,最理想的结果是:B一、B二、 B3。而出现的结果是 B三、B一、B2的话,CG的值是没有变化的,所以须要下面的DCG。it
折损累计增益(DCG)
DCG, Discounted 的CG,就是在每个CG的结果上处以一个折损值,为何要这么作呢?目的就是为了让排名越靠前的结果越能影响最后的结果。假设排序越日后,价值越低。到第i个位置的时候,它的价值是 1/log2(i+1),那么第i个结果产生的效益就是 reli * 1/log2(i+1),因此:
固然还有一种比较经常使用的公式,用来增长相关度影响比重的DCG计算方式是:
百科中写到后一种更多用于工业。固然相关性值为二进制时,即 reli在{0,1},两者结果是同样的。固然CG相关性不止是两个,能够是实数的形式。
归一化折损累计增益(NDCG)
NDCG, Normalized 的DCG,因为搜索结果随着检索词的不一样,返回的数量是不一致的,而DCG是一个累加的值,无法针对两个不一样的搜索结果进行比较,所以须要归一化处理,这里是处以IDCG。
IDCG为理想状况下最大的DCG值。
其中 |REL| 表示,结果按照相关性从大到小的顺序排序,取前p个结果组成的集合。也就是按照最优的方式对结果进行排序。
实际的例子
假设搜索回来的5个结果,其相关性分数分别是 三、二、三、0、一、2
那么 CG = 3+2+3+0+1+2
能够看到只是对相关的分数进行了一个关联的打分,并无召回的所在位置对排序结果评分对影响。而咱们看DCG:
i | reli | log2(i+1) | reli /log2(i+1) |
1 | 3 | 1 | 3 |
2 | 2 | 1.58 | 1.26 |
3 | 3 | 2 | 1.5 |
4 | 0 | 2.32 | 0 |
5 | 1 | 2.58 | 0.38 |
6 | 2 | 2.8 | 0.71 |
因此 DCG = 3+1.26+1.5+0+0.38+0.71 = 6.86
接下来咱们归一化,归一化须要先结算 IDCG,假如咱们实际召回了8个物品,除了上面的6个,还有两个结果,假设第7个相关性为3,第8个相关性为0。那么在理想状况下的相关性分数排序应该是:三、三、三、二、二、一、0、0。计算IDCG@6:
i | reli | log2(i+1) | reli /log2(i+1) |
1 | 3 | 1 | 3 |
2 | 3 | 1.58 | 1.89 |
3 | 3 | 2 | 1.5 |
4 | 2 | 2.32 | 0.86 |
5 | 2 | 2.58 | 0.77 |
6 | 1 | 2.8 | 0.35 |
因此IDCG = 3+1.89+1.5+0.86+0.77+0.35 = 8.37
so 最终 NDCG@6 = 6.86/8.37 = 81.96%