考虑到项目与用户对项目的评分之间的相似性,我想是否可以预测用户是否会喜欢某个项目。
我知道协同过滤项目推荐中的等式,预测评级由项目之间的整体评级和相似性决定。
等式是:
我的问题是,
另一个问题是,我写了一个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 :(得分:0)
是的,您可以使用不同的相似度函数。例如,与评级相比的余弦相似性是常见的,但不是唯一的选择。特别是,使用基于内容的过滤的相似性可以帮助使用稀疏评级数据集(如果项目具有相对密集的内容元数据),因为您将用户的偏好映射到较小的内容空间而不是较大的单个项目空间。
如果您只有用户已消费的项目列表(但不是每个项目的偏好幅度),则另一种算法可能更好。尝试市场购物篮分析,例如association rule mining。
答案 1 :(得分:0)
您所指的是隐含评级的典型情况(即用户不会对项目给出明确的评级,假设您只是喜欢和不喜欢)。 对于approches,您可以使用邻域模型或潜在因子模型。 我建议你阅读这个paper,它提出了一个众所周知的基于机器学习的解决方案。