slope one本质上就是一个线性模型 [latex]f(x)=x+b[/latex],核心思想就是利用其他用户对其他物品的评分和目标物品的评分间的差值作为依据,来推测出目标用户对目标物品的评分。
两个物品i和j之间的平均评分偏差可以表示为:
devj,i=∑(uj,ui∈Sj,i(R)uj−ui∣Sj,i(R)∣dev_{j,i}=\sum_{(u_{j},u_{i}\in S_{j,i}(R)}\frac{u_{j}-u_{i}}{|S_{j,i}(R)|}devj,i=(uj,ui∈Sj,i(R)∑∣Sj,i(R)∣uj−ui
其中[latex]S_{j,i}®[/latex]表示同时包含item i , j 的评分集合。 [latex]u_{i}[/latex]则表示用户对item i 的评分值。因此对目标物品j的评分可以表示为[latex]dev_{j,i} + u_{i}[/latex]。每一对i,j都可以这么计算,那么一个简单的把所有i,j对组合起来的方式可以表述如下:
pred(u,j)=∑i∈Relevant(u,j)(devj,i+ui)∣Relevant(u,j)∣pred(u,j)=\frac{\sum_{i\in Relevant(u,j)}(dev_{j,i}+u_{i})}{|Relevant(u,j)|}pred(u,j)=∣Relevant(u,j)∣∑i∈Relevant(u,j)(devj,i+ui)
其中Relevant(u,j)指的目标用户对除了目标物品以外的其他评过分的物品的集合,并且集合中的物品同时满足被其他用户评过分。这种方法的一个问题是没有考虑到共同评分的物品数。理论上讲共同评分数越多,预测效果应该更好,故应当考虑借助共同评分物品数对原始结果加权处理。即:
pred(u,j)=∑i∈Relevant(u,k)(devj,i+ui)∗∣Sj,i(R)∣∑i∈Relevant(u,j)∗∣Sj,i(R)∣pred(u,j)=\frac{\sum_{i\in Relevant(u,k)}(dev_{j,i}+u_{i})*|S_{j,i}(R)|}{\sum_{i\in Relevant(u,j)}*|S_{j,i}(R)|}pred(u,j)=∑i∈Relevant(u,j)∗∣Sj,i(R)∣∑i∈Relevant(u,k)(devj,i+ui)∗∣Sj,i(R)∣