基于 ItemCF 实现的电影推荐
0.总结
Get to the point firstly, the article comes from lawsonabs!
- 使用itemCF算法完成推荐
- 详细讲解算法的实现细节
1.思想
同UserCF 算法,ItemCF的核心思想也是基于相似度进行推荐,但是其是基于商品的相似度。
2.实现步骤
先看一下我们的数据:
-
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 的评分向量,得到其相似度为
同理,便可得出其它向量间的相似度信息。结果如下:
… | 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查看具体实现。