基于 ItemCF 实现的电影推荐

0.总结

Get to the point firstly, the article comes from lawsonabs!

  • 使用itemCF算法完成推荐
  • 详细讲解算法的实现细节

1.思想

同UserCF 算法,ItemCF的核心思想也是基于相似度进行推荐,但是其是基于商品的相似度。

2.实现步骤

先看一下我们的数据:
基于 ItemCF 实现的电影推荐_第1张图片

  • step1
    根据用户-商品 共现矩阵,得到商品的列向量。

  • step2
    根据商品的列向量得到商品的相似矩阵

下面结合实际的数据来举例说明。假设有如下用户+电影评分信息

用户id\电影id 1 7 11 12 110 112 115 116 122 134 148 1024 1048
20 2.5 4.0
21 4.5 4.0
22 3.5
23 5.0 5.0 5.0
24 3.5
25 3.5
26 4.0 5.0 4.5 2.5
27 4.0 3.0 4.0

于是可以得到每个电影在每个用户下的评分信息,这个矩阵是由n个商品构成的,每个商品列向量是否稀疏则是由其评分多少来决定的。

1 7 11 12 110 112 115 116 122 134 148 1024 1048
2.5 4.0
4.5 4.0
3.5
5.0 5.0 5.0
3.5
3.5
4.0 5.0 4.5 2.5
4.0 3.0 4.0

根据这个评分信息可以得到一个相似度的信息,【相似度的计算方法仍可以用余弦相似度或者是其它方法来计算】:
(2.5,4.0)
(4.5,4.0)
分别是电影1 和 11 的评分向量,得到其相似度为
s i m = 4.0 ∗ 4.0 2.5 ∗ 2.5 + 4.0 ∗ 4.0 ∗ 4.5 ∗ 4.5 + 4.0 ∗ 4.0 = 16 28.40 ≈ 0.563 sim=\frac{\sqrt{4.0*4.0}}{\sqrt{2.5*2.5+4.0*4.0}*\sqrt{4.5*4.5+4.0*4.0}} = \frac{16}{28.40} \approx 0.563 sim=2.52.5+4.04.0 4.54.5+4.04.0 4.04.0 =28.40160.563
同理,便可得出其它向量间的相似度信息。结果如下:

11 12
1 0.563 0
7 0.398 0
11 1 0.528
12 0.528 1
110 0 0
112 0 0
115 0 0
116 0 0
  • step3
    根据商品的相似矩阵,和某个用户的正反馈列表,找出与其最为相似的若干个商品。
    由共现矩阵,可以得到一个用户的正反馈列表。【正反馈列表是自定义的,比如说用户评过分的电影,也可以是用户浏览过的电影,在这里我取的是用户有评分记录的电影】。例如,这里取用户id = 21,那么根据上面这个共现矩阵,得到其正反馈列表为:{11, 12}
    根据拿到的电影id集合然后找出剩余商品中与{11,12}最为相似的top-k个商品就是最后得到的结果。根据上面的这个相似矩阵,可以看到与商品11,12 最为接近的商品是商品1,那么就可以为用户21推荐商品1.

3.具体实现

基于itemCF 的推荐算法同userCF算法很相似,这里我不再给出具体的代码,如果有兴趣,可以去我的github查看具体实现。

4.实现结果

在这里插入图片描述

你可能感兴趣的:(#,推荐系统)