itembase协同过滤的详细介绍

  ◆版权声明:本文出自胖喵~的博客,转载必须注明出处。
  转载请注明出处:http://www.javashuo.com/article/p-hhsemsyg-gm.htmlhtml

 

前言


一般咱们在网购的时候会遇到这样的状况,当咱们买了一个物品A后,网站上可能会给你推荐一些和A类似的物品。这样的推荐就是典型的协同过滤算法,今天就来给你们说说协同过滤算法。算法

 

 

算法概念网站


协调过滤算法通常有两种,一种是基于物品的,一种是基于用户的,基于物品的是itembase,基于用户的是userbase,简单来讲,基于物品的是当用户购买了物品A,若是发现A和C的类似度比较高,就给用户推荐物品C,基于用户的推荐是若是用户1和用户2类似度高,用户2买了物品A而用户1没有买,那么就给用户1推荐物品A。是否是很好理解。今天我主要说说itembase。spa

 

 

简单的推荐3d


刚才讲到itembase是根据物品的类似度来进行推荐,那么怎么计算物品的类似度呢?咱们看一个简单的例子。htm

下面是一个用户的观看电影的行为的数据:blog

上面的表格反应的是:get

用户1看了电影 A、B;
用户2看了电影 A、C;
用户3看了电影  A、B、C;博客

后面的打分咱们能够先忽略,由于得分都是同样的。
那么对于电影来讲,被人看过的统计就是
电影A:一、二、3
电影B:一、3
电影C:二、3it

这里咱们利用jaccard公式(下方)来计算电影A和B的距离:

那么A和B的 jaccard = (A交B)/(A并B) = [1,3] / [1,2,3] = 2/3

后面依次类咱们能够算出A、B、C分别和另外两个jaccard系数。

这个时候,当一个用户看了电影B ,而咱们要决定给他推荐电影A或者C的时候,咱们就能很明显的看出来B和A之间的jaccard系数更大,固推荐电影A。

 

 

带用户打分权重的推荐


上面的流程中,不知道你们有没有注意到,咱们忽略了一步,那就是用户对这个电影的打分,咱们并无用上。而现实生活中颇有可能会出现这样的问题:我看了一个电影A和电影F,我对电影A打分特别低,可是电影A和电影B的类似度很是高,而我看电影F以后,我对电影F的打分至关的高,可是电影F和电影E之间的类似度是通常高(低于电影A和B的类似度),而若是咱们仍是用上面的算法的话,那么推荐给个人就是电影B了,而事实上我可能更想看的是电影E。那么如何解决这个问题呢,咱们继续看。

这里我得用一个复杂的例子来说解一下,假如咱们有以下数据源:

首先第一步,咱们须要构造一个item的同现矩阵

这里讲一下同现矩阵的构造方法:

[A, A] 这个地方的值表明的是 A这部电影一共出现了多少次,咱们数数能够看到一共是5次,固这里值为5;

[A, B] 和 [B, A] 的值是相同的,表明的是,A和B同时被一我的观看的次数,咱们能够看到用户一、二、5同时看过A和B电影,固这个值就是3;

[C, G] 类型这样的就是说,没有人同时看过C和G这两部电影。

构造完同现矩阵后,这时候,咱们能够获得每个人的打分,再构造一个评分矩阵,这里为了演示过程,我以用户4为例。

首先构造评分矩阵,这里须要注意,没有看过的电影直接记为0便可,即矩阵为:[5, 0, 3, 4.5, 0, 4, 0]

这里咱们将 同现矩阵 * 评分矩阵 获得最终的得分矩阵 :

咱们看下我标黑的这一列,最终的数值是 3*5+3*0+3*3+2*5+1*0+1*4+0*0 = 38,这一行表明的是B这个电影推荐给用户4的得分是38,因为咱们知道用户4没有看过B、E、G,而B的得分是最高的,所以最后咱们给B推荐的时候,就会优先推荐B电影。

因为同现矩阵中的数据表明是电影之间的相互权重,固在最终相乘的时候,权重高而且得分高的最终就能获得高分,这也符合推荐类似的且是用户爱看的电影。

相关文章
相关标签/搜索