协同过滤-itembase

概念介绍

  通常我们在网购

一、什么是协同过滤

举个简单的例子,我们网购的时候当我们购买了一件物品A,网站基本上都会做这样一个提示,购买该物品的人还购买了。。然后是一个推荐清单,这就是典型的协同过滤,这具体是怎样实现的呢?下面是我自己实现一个协同过滤的案例。协同过滤有基于人和基于物的这节我们讨论基于物的。

二、算法原理

基于item的协同过滤,通过用户对不同item的评分来评测item之间的相似性,基于item之间的相似性做出推荐。简单来讲就是:给用户推荐和他之前喜欢的物品相似的物品。

对购买了物品A的用户C做推荐时:对于物品A和物品B在用户B同现共1次,对于物品A和物品C在用户A、B同现共2次,所以物品A和C的相似度2大于物品A和B的相似度1,所以将物品C推荐给用户C。


总流程:https://my.oschina.net/maijinxinyi/blog/632175

看一个简单的例子,例如根据用户的观看电影的表,给用户推荐电影,例如

用户1看了A、B;
用户2看了A、C;
用户3看了A、B、C;
那么对于电影来说,被人看过的统计就是
电影A:1、2、3
电影B:1、3
电影C:2、3
要计算电影A和B的距离就是利用jaccard公示:
A和B的jaccard = (A交B)/(A并B) = [1,3] / [1,2,3] = 2/3
后面依次类推

这样我们就可以

那么,问题来了如果用户C表现出对物品B的喜好程度程度大于对物品C的喜好程度,那么我们再用户C做推荐时是推荐物品B还是推荐物品C呢?

这里有一个问题就是,如果用户给自己看过的电影打了一个分,这分代表自己喜欢这个电影的程度。那么这个应该着呢?

为了解决上述问题,引入了用户评分矩矩阵。(上图)左侧是物品的同现矩阵,中间是用户对物品的评分矩阵,这样一来物品之间的相似度和用户对物品的喜好程度两个维度就都有了,两个矩阵相乘得到物品的推荐矩阵。物品之间的相似度越高左侧对应的值就越大;用户对物品的的喜好度越大则用户评分矩阵中对应的值也就越大;最终二者乘积就越大,这样在推荐矩阵中分值越高的推荐度也就越大。

1、建立物品的同现矩阵

https://blog.csdn.net/y460130107/article/details/38709075

https://blog.csdn.net/andrewgb/article/details/50760575

这里矩阵生成后是一个对称的,其实就是写a物品和b物品同时出现的次数的累加,如果是a和a 就是代表a出现在用户那次的次数

2、建立用户对物品的评分矩阵

即一个人对所有物品的打分情况

3、计算得出推荐结果矩阵

https://blog.csdn.net/andrewgb/article/details/50760575

4、推荐结果矩阵=物品的同现矩阵* 用户对物品的评分矩阵

https://blog.csdn.net/andrewgb/article/details/50760575

5、过滤与排序

https://my.oschina.net/maijinxinyi/blog/632175

去掉自己有的就行

PAI上的是用 豆瓣电影评分去给用户推荐。

根据jaccard也可以计算出来item之间的相似性

 

猜你喜欢

转载自www.cnblogs.com/by-dream/p/9016289.html