gpt4 book ai didi

mahout - 基于项目和基于内容的协同过滤有什么区别?

转载 作者:行者123 更新时间:2023-12-03 11:30:14 27 4
gpt4 key购买 nike

我对什么是基于项目的推荐感到困惑,如“Mahout in Action”一书中所述。书中有算法:

for every item i that u has no preference for yet
for every item j that u has a preference for
compute a similarity s between i and j
add u's preference for j, weighted by s, to a running average
return the top items, ranked by weighted average

如何计算元素之间的相似度?如果使用内容,那不是基于内容的推荐吗?

最佳答案

基于项目的协同过滤
原来的基于Item的推荐是基于用户项目排名(例如,用户对电影评分为 3 星,或者用户“喜欢”视频)。当您计算项目之间的相似性时,除了所有用户的评分历史之外,您不应该知道任何其他内容。因此,项目之间的相似度是基于评分而不是项目内容的元数据来计算的。
让我给你举个例子。假设您只能访问一些评级数据,如下所示:

user 1 likes: movie, cooking
user 2 likes: movie, biking, hiking
user 3 likes: biking, cooking
user 4 likes: hiking
假设现在您要为用户 4 提出建议。
首先为项目创建倒排索引,您将获得:
movie:     user 1, user 2
cooking: user 1, user 3
biking: user 2, user 3
hiking: user 2, user 4
由于这是一个二元评级(喜欢与否),我们可以使用类似 Jaccard Similarity 这样的相似性度量。计算项目相似度。
                                 |user1|
similarity(movie, cooking) = --------------- = 1/3
|user1,2,3|
在分子中,user1 是电影和 cooking 都具有的唯一元素。在分母中,电影和 cooking 的联合有 3 个不同的用户(user1,2,3)。 |.|这里表示集合的大小。所以我们知道在我们的例子中电影和 cooking 之间的相似性是 1/3。您只需对所有可能的项目对执行相同的操作 (i,j) .
完成所有对的相似度计算后,例如,您需要为用户 4 做出推荐。
  • 查看similarity(hiking, x)的相似度得分其中 x 是您可能拥有的任何其他标签。

  • 如果您需要为用户 3 进行推荐,您可以汇总其列表中每个项目的相似度分数。例如,
    score(movie)  = Similarity(biking, movie) + Similarity(cooking, movie)
    score(hiking) = Similarity(biking, hiking) + Similarity(cooking, hiking)
    基于内容的推荐
    基于内容的要点是我们必须知道用户和项目的内容。通常,您使用共享属性空间的内容来构建 user-profile 和 item-profile。例如,对于一部电影,您可以使用其中的电影明星和流派(例如使用二进制编码)来表示它。对于用户配置文件,您可以根据用户喜欢某些电影明星/流派等来做同样的事情。然后可以使用例如余弦相似度来计算用户和项目的相似度。
    下面是一个具体的例子:
    假设这是我们的用户配置文件(使用二进制编码,0 表示不喜欢,1 表示喜欢),其中包含用户对 5 位电影明星和 5 种电影类型的偏好:
             Movie stars 0 - 4    Movie Genres
    user 1: 0 0 0 1 1 1 1 1 0 0
    user 2: 1 1 0 0 0 0 0 0 1 1
    user 3: 0 0 0 1 1 1 1 1 1 0
    假设这是我们的电影简介:
             Movie stars 0 - 4    Movie Genres
    movie1: 0 0 0 0 1 1 1 0 0 0
    movie2: 1 1 1 0 0 0 0 1 0 1
    movie3: 0 0 1 0 1 1 0 1 0 1
    为了计算电影对用户的好程度,我们使用 cosine similarity :
                                     dot-product(user1, movie1)
    similarity(user 1, movie1) = ---------------------------------
    ||user1|| x ||movie1||

    0x0+0x0+0x0+1x0+1x1+1x1+1x1+1x0+0x0+0x0
    = -----------------------------------------
    sqrt(5) x sqrt(3)

    = 3 / (sqrt(5) x sqrt(3)) = 0.77460
    相似地:
    similarity(user 2, movie2) = 3 / (sqrt(4) x sqrt(5)) = 0.67082 
    similarity(user 3, movie3) = 3 / (sqrt(6) x sqrt(5)) = 0.54772
    如果你想给用户一个推荐 i ,随便挑电影 j最高的 similarity(i, j) .
    希望这可以帮助。

    关于mahout - 基于项目和基于内容的协同过滤有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16372191/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com