摘要:
在機器學習中常用到各種距離或者相似度,今天在看美團推薦系統重排序的文章時看到了loglikelihood ratio 相似度,特總結起來。以后有時間再把常用的相似度或者距離梳理到一篇文章。
背景:
記錄loglikelihood ratio 相似度概念
總結:
在mahout中,loglikelihood ratio也作為一種相似度計算方法被采用。
下表表示了Event A和Event B之間的相互關系,其中:
k11 :Event A和Event B共現的次數
k12 :Event A發生,Event B未發生的次數
k21 :Event B發生,Event A未發生的次數
k22 :Event A和Event B都不發生的次數
則logLikelihoodRatio=2 * (matrixEntropy - rowEntropy - columnEntropy)
其中
rowEntropy = entropy(k11, k12) + entropy(k21, k22)
columnEntropy = entropy(k11, k21) + entropy(k12, k22)
matrixEntropy = entropy(k11, k12, k21, k22)
(entropy為幾個元素組成的系統的香農熵)
下面舉一個實際的例子:
我以一個實際的例子來介紹一下其中的計算過程:假設有商品全集I={a,b,c,d,e,f},其中A用戶偏好商品{a,b,c},B用戶偏好商品{b,d},那么有如下矩陣:
- k11表示用戶A和用戶B的共同偏好的商品數量,顯然只有商品b,因此值為1
- k12表示用戶A的特有偏好,即商品{a,c},因此值為2
- k21表示用戶B的特有偏好,即商品d,因此值為1
- k22表示用戶A、B的共同非偏好,有商品{e,f},值為2
此外我們還定義以下變量N=k11+k12+k21+k22,即總商品數量。
計算步驟如下:
-
計算行熵
-
計算列熵
-
計算矩陣熵
注意:以上熵的計算均沒有加負號,后面會講到原因 -
計算相似度
UserSimilarity=2∗(matrixEntropy−rowEntropy−columnEntropy) - 實現代碼:https://github.com/Tongzhenguo/Java-codes/blob/master/src/main/java/data/code/similarity/logLikelihoodRatio.java
參考鏈接:
http://www.csdn.net/article/2015-01-30/2823783
http://blog.csdn.net/u014374284/article/details/49823557