log-likelihood ratio

LLR(log-likelihood ratio)是最新版mahout的itemcf的相似度度量方法。该算法简单有效,mahout舍弃了其他所有物品相似度度量方法,如cosine、pearson等,可见该算法确有独到之处。

事件A与事件B间的关系

—— 事件A 除事件A外的事件
事件B A and B ($k_{11}$) !A and B($k_{12}$)
除事件B外的事件 A and !B($k_{21}$) !A and !B($k_{22}$)

计算公式

其中

mahout中的计算方式

mahout中用相对简洁的方式进行了实现,如下所示,注意这里的entropy并不是真正意义上的entropy。

1
2
3
4
5
6
7
def entropy(a: Long, b: Long): Double = {
xLogX(a + b) - xLogX(a) - xLogX(b)
}
def entropy(a: Long, b: Long, c: Long, d: Long): Double = {
xLogX(a + b + c + d) - xLogX(a) - xLogX(b) - xLogX(c) - xLogX(d)
}

注意到这其实是并集、交集的操作

对于itemcf的场景下物品$a$和物品$b$的LLR计算,$A$就表示接触过物品$a$的用户数,$B$表示接触过物品$b$的用户数, $A\cap B$表示同时接触过物品$a$和物品$b$的用户数,$all_event_num$表示所有用户数。

参考