3

我想如果我可以预测用户是否会喜欢某件物品,因为物品和用户对物品的评价相似。如何使用项目相似性预测用户的偏好?

我知道协作过滤基于项目的推荐中的等式,预测评分由项目之间的总体评分和相似性决定。

的公式为:

enter image description here

http://latex.codecogs.com/gif.latex?r_{u%2Ci}%20%3D%20\bar{r_{i}}%20+%20\frac{\sum%20S_{i%2Cj}%28r_{u%2Cj}-\bar{r_{j}}%29}{\sum%20S_{i%2Cj}}

我的问题是,

  • 如果我使用其他方法的相似性(如基于内容的方法),我仍然可以使用这个方程吗?
  • 此外,对于每个用户,我只有一个用户喜欢的项目列表,而不是评级的实际值。
  • 在这种情况下,用户评级üĴ和平均级别项Ĵ的缺失。有没有更好的方法或方程来解决这个问题?

的另一个问题是,我写了一个Python代码来测试上面的等式中,代码

mat = numpy.array([[0, 5, 5, 5, 0], [5, 0, 5, 0, 5], [5, 0, 5, 5, 0], [5, 5, 0, 5, 0]]) 
print mat 

def prediction(u, i): 
    target = mat[u,i] 
    r = numpy.mean(mat[:,i]) 
    a = 0.0 
    b = 0.0 
    for j in range(5): 
     if j != i: 
      simi = 1 - spatial.distance.cosine(mat[:,i], mat[:,j]) 
      dert = mat[u,j] - numpy.mean(mat[:,j]) 
      a += simi * dert 
      b += simi 
    return r + a/b 

for u in range(4): 
    lst = [] 
    for i in range(5): 
     lst.append(str(round(prediction(u, i), 2))) 
    print " ".join(lst) 

结果是:

[[0 5 5 5 0] 
[5 0 5 0 5] 
[5 0 5 5 0] 
[5 5 0 5 0]] 

4.6 2.5 3.16 3.92 0.0 
3.52 1.25 3.52 3.58 2.5 
3.72 3.75 3.72 3.58 2.5 
3.16 2.5 4.6 3.92 0.0 

的第一矩阵是所述输入端与所述第二个是预测值,他们看起来不近,这里有什么不对?

回答

0

是的,你可以使用不同的相似度函数。例如,余弦相似性超过评分是常见的,但不是唯一的选择。特别是,使用基于内容的过滤的相似性可以帮助建立稀疏的评级数据集(如果您的项目的内容元数据相对密集),因为您将用户的偏好映射到较小的内容空间而不是较大的单个项目空间。

如果您只有一个用户已经消耗的项目列表(但不是每个项目的偏好大小),另一个算法可能会更好。尝试购物篮分析,例如association rule mining

0

你所指的是一种典型的隐性评分情况(即用户没有给项目明确的评分,假设你只是喜欢和不喜欢)。 至于你可以使用邻域模型或潜在因子模型。 我会建议你阅读这个paper,它提出了一个众所周知的基于机器学习的问题解决方案。

相关问题