(三)电子商务个性化推荐系统--协同过滤

拖了两个月,终于要进入正题了,本章开始折腾真正的算法(ps:其实也没那么高深)。

第一个要说的是经典的协同过滤了,从算法的主体来分可以分为两种:基于用户的协同过滤(user-CF)和基于物品的协同过滤(item-CF),CF就是collaborative filtering,所谓协同就是在大家(用户行为/商品属性)都要对结果有贡献。

其基本思想是兴趣相似的用户其行为也相似,反之也成立,实现协同过滤的关键在于怎么计算行为相似,用什么样的标准去度量相似度。

     a  b  c
101  5  1  3
102  5  2  -

行是用户,列是item,交叉点是用户对item的评分。

从图中我们可以看出来101和102都对a和b评分了,且评分基本一致,说明他们俩兴趣应该相似,这个时候可以把c推荐给102。下面把这个过程数学化一下:

User-CF

1、计算101与102的相似度

可以把它们对item的评分看成两个向量(只包含两个用户共同评价的item):(5,1)、(5,2),把这两个向量看成坐标轴上的两个点:
在此输入图片描述

然后可以把这两个点之前的距离做为101和102之间的相似度,计算公式大家应该都知道,就是初中学的平面几何。

在此输入图片描述

上述公式其实就是欧几里得距离,参见wiki
在此输入图片描述

2、推荐

我们可以为每一个用户都维护一个列表,用于存储与他相似的用户,然后,从列表中用户评过分的item中挑一些推荐给他(去除他评过分的item),如这个例子中如果要给用户102做推荐,因为101与102相似,就把101评过分的c推荐给102。

当然这个过程还有很多细节问题,比如如果与用户A相似的用户有很多,他们评过分的商品也有很多,那么如何从这么多的商品中挑选出一部分推荐给A呢?挑选出的商品如何排序?此系后话,且听下回分解……

上述即是USER-CF,ITEM-CF同理,其实一般常用的是ITEM-CF,因为对于B2C网站来说,商品有限,而用户无限,计算量会小得多。

Item-CF

上述方法是根据用户对商品的评分,如果用户对于商品只有购买而没有评分,或者评分数据太少怎么办呢?

这才是我要讲的重点,对于大多数网站而言,都是购买数远大于评价数。对于用户和商品之间只有购买与未购买的关系,我们可以称之为布尔矩阵,购买是1,未购买是0,这个时候如果也使用欧几里得距离去计算的话,会发现很不合适,那如何计算相似度呢?

在此输入图片描述

N(a):买了商品a的用户

N(b):买了商品b的用户

分子是同时买了a和b的用户的数量

分母是买了a的用户数与买了b的用户数的积

这样我们就得出了商品a和b之间的相似度,如果a和b相似,就可以给买了a的用户推荐b。

这就是item-CF,还有很多可以优化的地方,主要看源数据形态了,下一篇我们会讲增强版的协同过滤

你可能感兴趣的:(个性化推荐)