推荐算法之基于用户的协同过滤

简介: 推荐算法之基于用户的协同过滤

基于用户的的协同过滤算法是推荐统统最古老的算法,简称UserCF。该算法的诞生一定程度上标志着推荐系统的诞生。本文将对UserCF算法原理进行讲解,并且基于Movielens数据集给出实现代码供大家交流学习。

基本原理

在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,先找到和他相似兴趣的其他用户,然后把那些用户喜欢的而用户A没有听说过的物品推荐给用户A。这种方法就称为基于用户的协同过滤算法。该算法主要包括两个步骤:

  1. 找到和目标用户兴趣相似的用户集合
  2. 找到这个集合中用户喜欢的且目标用户没有听说过的物品推荐给目标用户。

步骤1的关键为计算两个用户之间的兴趣相似度。那么如何度量两个用户的兴趣相似度呢,该算法主要利用用户行为的相似度计算兴趣的相似度。给定用户和用户,令表示用户曾经有过正反馈的物品集合,表示用户曾经有过正反馈的物品集合。那么,可通过如下的公式简单计算兴趣相似度:

或者通过余弦相似度:

下面通过表1.1的用户行为记录为例,举例说明UserCF计算用户兴趣相似度的例子。在该例中,用户A对物品{a, b, d}有过行为,用户B对物品{a,c}有过行为,利用余弦相似度公式计算用户A和用户B的兴趣相似度为:

表 1.1

user item
A a,b,d
B a,c
C b,c
D c,d,e

由于对两两用户都计算余弦相似度,时间复杂度太高。可以在时不计算余弦相似度。为此,可以首先建立物品到用户的倒排表,对于每个物品都保存对该物品产生过行为的用户列表。令稀疏矩阵。假设用户u和用户v同时属于倒排表中K个物品对应的用户列表,就有。从而,可以扫描倒排表每个物品对应的用户列表,将用户列表中的两两用户对应的加1,最终得到所有用户之间不为零。

得到用户之间的兴趣相似度后,UserCF算法会给用户推荐和他兴趣最相似的K个用户喜欢的物品。如下公式度量了UserCF算法中用户u对物品i的感兴趣程度:

其中,包含和用户u兴趣最接近的K个用户,N(i)是对物品i有过行为的用户集合,是用户u和用户v的兴趣相似度,代表用户v对物品i的兴趣,对于单一行为的隐反馈数据,所有的。

算法改进

使用公式(或者余弦相似度)计算用户兴趣度,会带来一定的缺陷。考虑这种情况,以图书为例,如果两个用户都曾买过《新华字典》,这丝毫不能说明他们兴趣相似,因为绝大多数中国人小时候都买过。但是如果两个用户都买过《数据挖掘导论》,那可以认为他们的兴趣比较相似,因为只有研究数据挖掘的人才会买这本书。换句话说,两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。因此,John S. Breese在论文中提出了如下公式,根据用户行为计算用户的兴趣相似度:

可以看到,该公式通过惩罚用户u和用户v共同兴趣列表中热门物品对他们相似度的影响。

作者基于MovieLens数据集(显性反馈数据集)实现了该算法,地址详见:UserCF算法实现

小结

UserCF是推荐系统领域较为古老的算法,1992 年就已经在电子邮件的个性化推荐系统Tapestry 中得到了应用,1994 年被GroupLens用来实现新闻的个性化推荐,后来被著名的文章分享网站Digg用来给用户推荐个性化的网络文章。UserCF 给用户推荐那些和他有共同兴趣爱好的用户喜欢的物品,从算法的原理可以看出UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,换句话说, UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度。

UserCF适用于用户较少的场景,时效性较强且用户个性兴趣不太明显的领域。当用户有新行为时,它不一定能够实时更新用户的推荐结果。并且无法给出令用户信服的推荐解释。

相关文章
|
4月前
|
机器学习/深度学习 人工智能 搜索推荐
协同过滤算法:个性化推荐的艺术与科学
协同过滤算法:个性化推荐的艺术与科学
协同过滤算法:个性化推荐的艺术与科学
|
4月前
|
机器学习/深度学习 搜索推荐 算法
协同过滤算法
协同过滤算法
147 0
|
1月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
|
3月前
|
搜索推荐 算法 小程序
基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
|
3月前
|
搜索推荐 算法 小程序
基于Java协同过滤算法的图书推荐系统设计和实现(源码+LW+调试文档+讲解等)
基于Java协同过滤算法的图书推荐系统设计和实现(源码+LW+调试文档+讲解等)
|
1月前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
102 7
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
2月前
|
数据采集 搜索推荐 算法
Python基于协同过滤算法进行电子商务网站用户行为分析及服务智能推荐
Python基于协同过滤算法进行电子商务网站用户行为分析及服务智能推荐
|
3月前
|
算法 搜索推荐 Java
基于SpringBoot+协同过滤算法的家政服务平台设计和实现(源码+LW+调试文档+讲解等)
基于SpringBoot+协同过滤算法的家政服务平台设计和实现(源码+LW+调试文档+讲解等)
|
3月前
|
搜索推荐 算法 前端开发
计算机Java项目|基于协同过滤算法的体育商品推荐系统
计算机Java项目|基于协同过滤算法的体育商品推荐系统
|
4月前
|
算法 搜索推荐
R语言混合SVD模型IBCF协同过滤推荐算法研究——以母婴购物平台为例
R语言混合SVD模型IBCF协同过滤推荐算法研究——以母婴购物平台为例