龙空技术网

这可能是最简单的协同过滤算法,只用加减乘运算就能搞定

数据与智能 307

前言:

如今同学们对“基于协同过滤推荐算法代码”大约比较注意,姐妹们都想要知道一些“基于协同过滤推荐算法代码”的相关资讯。那么小编在网摘上网罗了一些对于“基于协同过滤推荐算法代码””的相关文章,希望看官们能喜欢,小伙伴们一起来学习一下吧!

数据与智能 出版了专著「构建企业级推荐系统:算法、工程实现与案例分析」。每周输出7篇推荐系统、数据分析、大数据、AI原创文章。「数据与智能」(同名视频号、知乎、头条、B站、快手、抖音、小红书等自媒体平台号) 社区,聚焦数据、智能领域的知识分享与传播。

作者 | gongyouliu

编辑 | auroral-L

大家好,我是强哥。一个热爱暴走、读书、写作的人!

谈到推荐算法,协同过滤算法大名鼎鼎。相信很多人即使不熟悉推荐算法,也多少听过协同过滤这个词。今天我给大家讲解一个最简单的协同过滤算法实现思路,这个算法简单到只用加减乘运算就可以搞定,小学生都能理解。

在讲解之前我先来简单说明一下什么是协同过滤。所谓协同过滤,就是利用所有用户在某个APP(比如淘宝)上的操作行为,构建一个算法模型(即某种计算规则),为每个用户推荐他可能会感兴趣的物品。最终推荐的目的是提升用户体验,为平台方(如淘宝)创造商业价值。

我要讲解的最简单的协同过滤算法的流程如下图所示(这里以购买水果为例),主要包含3个步骤:第一步是构建每个用户的行为记录;第二步是根据协同操作行为获得物品的相关度;第三步是为某个用户计算推荐结果。这个协同过滤的实现思路是非常简单的,相信大家看看图就能大致理解。在我最早做推荐系统时就是采用的这个方法,很容易编程实现。下面我们分别按照上面的3步进行详细介绍。

图1:最简单的协同过滤算法的实现步骤

第一步:构建每个用户的行为记录

这一步是最简单的。每个用户的操作行为我们是可以通过埋点记录下来的,然后通过日志收集放到数据中心。我们只需要关注用户id、物品id、操作时间、操作行为(如点击、购买、播放时长等)这4个字段就可以了。

用户的行为是可以打分的,得分代表了用户对物品的喜好度。打分可以是基于人工规则的(也就是拍脑袋),也可以基于算法公式。比如购买可以打10分,加购物车打8分,收藏打6分,浏览打4分等。如果是物品是视频,那么可以根据播放完成度来打分,比如100分钟的视频,播放完了80分钟,那么就可以打8分(这里都是10分制)。

用户的行为可能是随时间变化的,我们可以给用户的每一次行为进行时间加权。也可以选择有限次的行为,比如只选择用户最近一段时间的行为(比如最近的一个月)或者选择用户最近若干次行为(比如最近的10次)。

根据上面的描述,一个用户 U 的行为记录可以记为:

这里

是用户有过操作行为的物品,

是对应的操作时间(按照先近后远来排列),

分别是用户 U 对物品

的评分。

通过上面的过程我们就获得了某个用户的行为记录了,其他用户的行为记录都可以按照类似的方式获得。

第二步:根据协同操作行为获得物品的相关度

有了用户在过去一段时间(比如过去一年)的所有行为记录,那么就很容易算出任何两个物品之间的关联度了。具体做法如下:

先将所有的物品组合成物品对(假设一共有某个物品,那么这样的对有

对,减去

是因为物品自己和自己不能组成一对),比如

,然后统计所有对

这两个物品有操作行为的用户。假设这样的用户有

个:

。用户

对物品

的评分分别为

(这个可以根据第一步获得)。那么

对的最终得分

可以用公式

计算得到。根据这个流程,我们可以获得所有的

对物品组合的得分(注意,其实我们的计算量可以减半,因为

=

),最终的结果可以记录为下表所示的形式。

获得了所有物品对的评分,就可以非常容易地对某个物品

,计算出与它关联的得分最高的

个物品了,这些物品称为与之最相关的物品(之所以每个物品只选择

个最相似的,是基于链两个考虑:一是其他的相似度很小了,相比这

个最相似的可以忽略了;二是只取

个可以减少计算和存储空间,因为一般来说物品的总数是很大的)。也就是从

中降序排列,选择

个得分最高的得分对应的物品就是与物品

最相关的物品。最终获得的结果可以用下表所示(下表中的

是两个物品根据表1获得的相似度)。

第三步:为某个用户计算推荐结果

有了一、二两步的准备,第三步就是为某个用户

做推荐了。假设某个用户的操作行为记录为

。那么这个用户对某个物品

的评分

可以按照如下公式计算:

上面公式中的

的具体计算方法为:如果

不在

最相似的

个物品集中(参见表2,可以获得每个

对应的最相似的

个物品集),那么

= 0,否则假设

,那么

=

当我们计算出了用户

对所有没有操作行为的物品集合(对于有操作行为的物品,根据用户的操作历史

,用户是有评分的)的评分,我们根据评分降序排列取TopN就可以获得给用的最终推荐结果。

这样,根据上面的一、二、三步,我们就可以为任何用户计算个性化推荐了。大家可以看到,上面的算法中完全只用了加减乘法,只要小学数学水平就可以理解(当然,为了通用性,我们采用了比较多的抽象符号来表示,对于没有太强抽象思维的读者,理解起来可能会觉得有点难度)。这个算法为某个用户计算推荐时,是用到了所有用户的行为的 (这在表2计算物品最相似的个物品时用到了),所以根据协同过滤算法的定义,这是一个协同过滤算法。

这个算法如果大家仔细思考,本质上其实就是item-based协同过滤(不了解的读者可以网上查一下,或者参考我之前写的「协同过滤推荐算法」这篇文章),只不过我们这里的讲解方法更容易理解(不需要采用矩阵等高等数学的思路去讲解,用矩阵讲解可能更简洁),这种思路也更容易利用Spark等分布式计算来实现。

我出版的畅销书《构建企业级推荐系统:算法、工程实现与案例分析》,可以跟这个系列文章一起阅读,大家有需要可以在京东、当当上直接购买。

标签: #基于协同过滤推荐算法代码 #协同过滤算法例题 #协同过滤算法例题讲解 #协同过滤算法步骤