1.基本思想
SlopOne算法也属于协同过滤算法的范畴,它是一种Rating-based算法,即基于评分的协同过滤算法,利用物品间的流行度差异来预测用户对新物品的评分,一共有三种形式,下面将一一介绍。
在这里我们规定了下面将用得到的符号,以及他的含义。
符号 | 含义 |
---|---|
u u u | 对于一个给定用户的不完整的评分数组,称为 e v a l u a t i o n evaluation evaluation,即用户对所有物品的评分数组,包括用户未评价的物品 |
u i u_i ui | 用户对物品 i i i的评分 |
S ( u ) S_{(u)} S(u) | 表示 u u u中有评分的物品的合集 |
c a r d ( S ) card(S) card(S) | 表示集合 S S S中元素的个数 |
χ \chi χ | 表示训练集中所有用户评分数组 u u u的集合 |
S i ( χ ) S_i(\chi) Si(χ) | 表示训练集 χ \chi χ中所有包含物品 i i i的评分数组 |
2.基本SlopeOne算法
我们举个例子来说明该算法的基本步骤
用户\物品 | a | b | c | d |
---|---|---|---|---|
A | 5 | 3.5 | ||
B | 2 | 5 | 4 | 2 |
C | 4.5 | 3.5 | 1 | 4 |
-
Step1:计算Item之间的评分差的均值,记为评分偏差(两个item都评分过的用户)。 d e v i , j = ∑ u ∈ S i , j ( χ ) u i − u j c a r d ( S i , j ( χ ) ) dev_{i,j}=\sum_{u\in S_{i,j}(\chi)}\frac{u_i-u_j}{card(S_{i,j}(\chi))} devi,j=u∈Si,j(χ)∑card(Si,j(χ))ui−uj
b与a:((3.5-5)+(5-2)+(3.5-4.5))/3=1/6
c与a:((4-2)+(1-4.5))/2=0.75
d与a:((2-2)+(4-4.5))/2=-0.25
c与b:((4-5)+(1-3.5))/2=-1.75
d与b:((2-5)+(4-3.5))/2=1.25
d与c:((2-4)+(4-1))/2=0.5 -
Step2:根据Item间的评分偏差和用户的历史评分,预测用户对未评分的item的评分,我们假设 u s e r A userA userA为 u A u_A uA。 p ( u j ) = ∑ i ∈ S (