machine-learning - 如何利用元素相似度来预测用户的偏好?

标签 machine-learning similarity recommendation-engine collaborative-filtering

我在想,鉴于项目之间的相似性以及用户对项目的评分,我是否可以预测用户是否会喜欢某个项目。

我知道协同过滤基于项目的推荐中的方程式,预测评分由整体评分和项目之间的相似度决定。

等式为:

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}}

我的问题是,

  • 如果我使用其他方法(例如基于内容的方法)获得了相似之处,我仍然可以使用这个方程吗?
  • 此外,对于每个用户,我只有一个用户最喜欢的项目列表,而不是评分的实际值。
  • 在本例中,用户 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

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

最佳答案

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

如果您只有用户消费过的商品列表(但没有他们对每个商品的偏好程度),则另一种算法可能更好。尝试购物篮分析,例如 association rule mining .

关于machine-learning - 如何利用元素相似度来预测用户的偏好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32474778/

相关文章:

python - 为什么pytorch模型无法识别我定义的张量?

r - 二进制数据的 MDS 图 : counterintuitive clustering

algorithm - 如何实现推荐引擎?

apache-spark - Spark MLlib : Difference between implicitTrain and explicitTrain

python - TensorFlow:tf.train.batch 中 dequeue_up_to 比 dequeue_many 慢吗?

python - tf.Session() 是否应该在 tf.Graph() 的上下文中?

nlp - 使用潜在语义分析来测量段落相似度

mysql - Rails : A way to check for duplicate item in DB? 联盟数据源

scala - 无法更改 RDD 的存储级别

machine-learning - 一类支持向量机