Machine learning 如何预测用户';使用项目相似性的偏好?

Machine learning 如何预测用户';使用项目相似性的偏好?,machine-learning,similarity,recommendation-engine,collaborative-filtering,Machine Learning,Similarity,Recommendation Engine,Collaborative Filtering,我在想,考虑到项目之间的相似性和用户对项目的评分,我是否可以预测用户是否会喜欢某个项目 我知道基于项目的协同过滤推荐中的等式,预测的评分取决于总体评分和项目之间的相似性 方程式为: 我的问题是, 如果我使用其他方法(例如基于内容的方法)获得了相似性,我还可以使用这个等式吗 此外,对于每个用户,我只有一个用户最喜欢的项目列表,而不是评分的实际值 在这种情况下,缺少用户u对项目j的评分和项目j的平均评分。有没有更好的方法或方程式来解决这个问题 另一个问题是,我编写了一个python代码来测试

我在想,考虑到项目之间的相似性和用户对项目的评分,我是否可以预测用户是否会喜欢某个项目

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

方程式为:

我的问题是,

  • 如果我使用其他方法(例如基于内容的方法)获得了相似性,我还可以使用这个等式吗
  • 此外,对于每个用户,我只有一个用户最喜欢的项目列表,而不是评分的实际值
  • 在这种情况下,缺少用户u对项目j的评分和项目j的平均评分。有没有更好的方法或方程式来解决这个问题
另一个问题是,我编写了一个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

第一个矩阵是输入,第二个是预测值,它们看起来不接近,这里有什么问题吗?

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


如果您只有一个用户已消费的项目列表(但没有每个项目的偏好大小),那么另一种算法可能更好。尝试市场篮子分析,例如。

您所指的是一种典型的隐性评级情况(即,用户不会对项目给出明确的评级,比如说您只喜欢和不喜欢)。 至于方法,你可以使用邻域模型或潜在因素模型。 我建议你阅读这篇文章,它提出了一个基于机器学习的解决方案