协同过滤推荐算法


点击上方“大数据与人工智能”,“星标或置顶公众号”

第一时间获取好内容

640?wx_fmt=gif640?wx_fmt=png


作者丨gongyouliu

这是作者的第15篇文章,1.1万字,阅读需70分钟


以下为正文:

作者在《推荐系统产品与算法概述》这篇文章中简单介绍了协同过滤算法。协同过滤算法是在整个推荐系统发展史上比较出名的算法,具备举足轻重的地位,甚至在当今还在大量使用。

本篇文章作者会详细讲解协同过滤推荐算法的方方面面,这里所讲的也是作者基于多年推荐系统研究及工程实践经验的基础上总结而成,希望对大家学习协同过滤推荐算法有所帮助,提供一些借鉴。

本文会从协同过滤思想简介、协同过滤算法原理介绍、离线协同过滤算法的工程实现、近实时协同过滤算法的工程实现、协同过滤算法应用场景、协同过滤算法的优缺点、协同过滤算法落地需要关注的几个问题等7个方面来讲述。希望读者读完本文,可以很好地理解协同过滤的思路、算法原理、工程实现方案,并且具备基于本文的思路自己独立实现一个在真实业务场景中可用的协同过滤推荐系统的能力。

在正式讲解之前,先做一个简单定义。本文用”操作过“这个词来表示用户对标的物的各种操作行为,包括浏览、点击、播放、收藏、评论、点赞、转发、评分等等。

640?wx_fmt=gif 一、协同过滤思想简介 640?wx_fmt=gif 协同过滤,从字面上理解,包括协同和过滤两个操作。 所谓协同就是利用群体的行为来做决策(推荐),生物上有协同进化的说法,通过协同的作用,让群体逐步进化到更佳的状态。 对于推荐系统来说,通过用户的持续协同作用,最终给用户的推荐会越来越准。 而过滤,就是从可行的决策(推荐)方案(标的物)中将用户喜欢的方案(标的物)找(过滤)出来。 具体来说,协同过滤的思路是通过群体的行为来找到某种相似性(用户之间的相似性或者标的物之间的相似性),通过该相似性来为用户做决策和推荐。 现实生活中有很多协同过滤的案例及思想体现,除了前面提到的生物的进化是一种”协同过滤“作用外,我认为人类喜欢追求相亲中的“门当户对”,其实也是一种协同过滤思想的反射,门当户对实际上是建立了相亲男女的一种“相似度”(家庭背景、出身、生活习惯、为人处世、消费观、甚至价值观可能会相似),给自己找一个门当户对的伴侣就是一种“过滤”,当双方”门当户对“时,各方面的习惯及价值观会更相似,未来幸福的概率也会更大。 如果整个社会具备这样的传统和风气,以及在真实”案例“中”门当户对“的夫妻确实会更和谐,通过”协同进化“作用,大家会越来越认同这种方式。 我个人也觉得”门当户对“是有一定道理的。 协同过滤利用了两个非常朴素的自然哲学思想: “群体的智慧”和“相似的物体具备相似的性质”,群体的智慧从数学上讲应该满足一定的统计学规律,是一种朝向平衡稳定态发展的动态过程,越相似的物体化学及物理组成越一致,当然表现的外在特性会更相似。 虽然这两个思想很简单,也很容易理解,但是正因为思想很朴素,价值反而非常大。 所以协同过滤算法原理很简单,但是效果很不错,而且也非常容易实现。 协同过滤分为基于用户的协同过滤和基于标的物(物品)的协同过滤两类算法。 下面我们对协同过滤的算法原理来做详细的介绍。 640?wx_fmt=gif 二、协同过滤算法原理介绍 640?wx_fmt=gif 上面一节简单介绍了协同过滤的思想,基于协同过滤的两种推荐算法,核心思想是很朴素的”物以类聚、人以群分“的思想。 所谓物以类聚,就是计算出每个标的物最相似的标的物列表,我们就可以为用户推荐用户喜欢的标的物相似的标的物,这就是基于物品(标的物)的协同过滤。 所谓人以群分,就是我们可以将与该用户相似的用户喜欢过的标的物的标的物推荐给该用户(而该用户未曾操作过),这就是基于用户的协同过滤。 具体思想可以参考下面的图1。

640?wx_fmt=png

图1: ”物以类聚,人以群分“的朴素协同过滤推荐
协同过滤的核心是怎么计算标的物之间的相似度以及用户之间的相似度。 我们可以采用非常朴素的思想来计算相似度。 我们将用户对标的物的评分(或者隐式反馈,如点击、收藏等)构建如下用户行为矩阵(见下面图2),矩阵的某个元素代表某个用户对某个标的物的评分(如果是隐式反馈,值为1),如果某个用户对某个标的物未产生行为,值为0。 其中行向量代表某个用户对所有标的物的评分向量,列向量代表所有用户对某个标的物的评分向量。 有了行向量和列向量,我们就可以计算用户与用户之间、标的物与标的物之间的相似度了。 具体来说,行向量之间的相似度就是用户之间的相似度,列向量之间的相似度就是标的物之间的相似度。 为了避免误解,这里简单解释一下隐式反馈,只要不是用户直接评分的操作行为都算隐式反馈,包括浏览、点击、播放、收藏、评论、点赞、转发等等。 有很多隐式反馈是可以间接获得评分的,后面会讲解。 如果不间接获得评分,就用0、1表示是否操作过。 在真实业务场景中用户数和标的物数一般都是很大的(用户数可能是百万、千万、亿级,标的物可能是十万、百万、千万级),而每个用户只会操作过有限个标的物,所以用户行为矩阵是稀疏矩阵。 正因为矩阵是稀疏的,会方便我们进行相似度计算及为用户做推荐。 640?wx_fmt=png 图2:用户对标的物的操作行为矩阵
相似度的计算可以采用cosine余弦相似度算法来计算两个向量  640?wx_fmt=png  (可以是上图2中的行向量或者列向量)之间的相似度:
640?wx_fmt=png
计算完了用户(行向量)或者标的物(列向量)之间的相似度,那么下面说说怎么为用户做个性化推荐。
2.1 基于用户协同过滤


根据上面算法思想的介绍,我们可以将与该用户最相似的用户喜欢的标的物推荐给该用户。 这就是基于用户的协同过滤的核心思想。
用户u对标的物s的喜好度sim(u,s)可以采用如下公式计算,其中U是与该用户最相似的用户集合(我们可以基于用户相似度找到与某用户最相似的K个用户),  640?wx_fmt=png  是用户  640?wx_fmt=png  对标的物s的喜好度(对于隐式反馈为1,而对于非隐式反馈,该值为用户对标的物的评分),  640?wx_fmt=png  是用户  640?wx_fmt=png  与用户u的相似度。 640?wx_fmt=png 有了用户对每个标的物的评分,基于评分降序排列,就可以取topN推荐给用户了。
2.2 基于标的物的协同过滤
类似地,通过将用户操作过的标的物最相似的标的物推荐给用户,这就是基于标的物的协同过滤的核心思想。
用户u对标的物s的喜好度sim(u,s)可以采用如下公式计算,其中S是所有用户操作过的标的物的列表, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据与智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值