什么是基于内容的基于项目的和协同过滤的区别?(What's difference betwe

2019-09-01 23:00发布

我疑惑基于项目的建议是什么,在书中“描述亨利马乌在行动 ”。 有书中的算法:

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

如何计算项目之间的相似性? 如果使用的内容,是不是基于内容的推荐?

Answer 1:

基于项目的协同过滤

最初的基于项目的建议是完全基于用户-项目排名(例如,用户评为电影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相似计算项目相似。

                                 |user1|
similarity(movie, cooking) = --------------- = 1/3
                               |user1,2,3|

在分子中,user1的唯一元素的电影和烹饪都具有。 在分母电影和烹饪的结合有3个不同的用户(user1,2,3)。 |.| 这里表示集的大小。 因此,我们知道的电影和烹饪之间的相似性是在我们的例子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) 

基于内容的推荐

基于内容的一点是,我们必须知道用户和项目的内容。 通常,您使用的共享属性空间的内容构建用户配置文件和项目的轮廓。 例如,对于一个电影,你在它的电影明星和类型(例如使用二进制编码)代表它。 对于用户配置文件,你可以根据用户的同样的事情,喜欢一些影视明星/流派等。然后用户和项目的相似性可以使用例如,余弦相似度来计算。

这里是一个具体的例子:

假设这是我们的用户配置文件(使用二进制编码,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

为了计算一部电影有多好用户,我们使用余弦相似性 :

                                 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)

希望这可以帮助。



Answer 2:

“基于项目”的真正含义“项目相似性为基础的”。 你可以把你喜欢的任何相似性度量在这里。 是的,如果它是基于内容,比如余弦相似度超过词向量,你也可以称之为“内容为主”。



文章来源: What's difference between item-based and content-based collaborative filtering?