基于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。

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

基于itemBase的协同过滤_第1张图片

三.矩阵模型

基于itemBase的协同过滤_第2张图片

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

四.实现步骤

  1. 建立物品的同现矩阵

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

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

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

  4. 过滤与排序

五.mapreduce的job流程及进出数据格式

基于itemBase的协同过滤_第3张图片


基于itemBase的协同过滤_第4张图片

六.每个job的具体工作

第一个job:集中每一个用户的所有的item,item之间做笛卡尔积同现,值记为1

基于itemBase的协同过滤_第5张图片



基于itemBase的协同过滤_第6张图片


第二个job:计算物品同现次数,得到物品的同现矩阵

基于itemBase的协同过滤_第7张图片

基于itemBase的协同过滤_第8张图片


第三个job:用户的评分矩阵(根据用户点击、收藏、购买等行为得到用户对物品的打分情况,具体分值根据具体情况自定义)


基于itemBase的协同过滤_第9张图片


基于itemBase的协同过滤_第10张图片

第四个job:矩阵相乘得到推荐矩阵

基于itemBase的协同过滤_第11张图片

基于itemBase的协同过滤_第12张图片

第五个job:过滤(过滤掉已经购买过的item)与排序(降序)

基于itemBase的协同过滤_第13张图片

基于itemBase的协同过滤_第14张图片

你可能感兴趣的:(mapreduce,itembase,基于物品的协同过滤)