◆版權聲明:本文出自胖喵~的博客,轉載必須註明出處。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%