我想如果我可以预测用户是否会喜欢某件物品,因为物品和用户对物品的评价相似。如何使用项目相似性预测用户的偏好?
我知道协作过滤基于项目的推荐中的等式,预测评分由项目之间的总体评分和相似性决定。
的公式为:
我的问题是,
- 如果我使用其他方法的相似性(如基于内容的方法),我仍然可以使用这个方程吗?
- 此外,对于每个用户,我只有一个用户喜欢的项目列表,而不是评级的实际值。
- 在这种情况下,用户评级ü项Ĵ和平均级别项Ĵ的缺失。有没有更好的方法或方程来解决这个问题?
的另一个问题是,我写了一个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
的第一矩阵是所述输入端与所述第二个是预测值,他们看起来不近,这里有什么不对?