1.协同过滤

1.1基于用户的协同过滤算法

包含两个步骤:
a. 计算用户之间的相似度:找到和目标用户兴趣相似的用户集合。
b. 根据用户相似度及用户对物品的评价为物品打分:找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。

Step1: 计算用户相似度
根据协同过滤算法的定义,这里主要是利用用户行为的相似度来计算兴趣的相似度。给定用户u和用户v,令N(u)和N(v)分别表示用户u和用户v曾经有过正反馈的物品集合,则有如下三种方式计算相似度:

Jaccard公式

余弦相似度(UserCF算法)

改进的余弦相似度(UserIIF算法)

在UserIIF算法中,N(i) N(i)N(i)是物品i的热度,可见其对热门物品进行了惩罚,因为两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。

这里要强调一个工程实现上的Trick。在计算用户行为之间的相似度时,如果按照定义实现的话,需要对两两用户的行为集合进行统计,这样的时间复杂度为O(∣U∣∗∣U∣) ,但用户行为往往是十分稀疏的,很多用户之间的行为并没有交集,导致时间浪费在这些不必要的计算上。这时就可以建立Item-User的倒排表,这样在同一个Item下面的User两两之间一定是在这个Item上有交集的,所以只需要遍历所有的Item,对其下所有的User两两进行统计即可,这样可以极大降低时间复杂度。

Step2:为物品打分

在统计完用户之间的相似度之后,就可以利用这种用户相似度以及用户对物品的评价为物品打分。其公式如下:

在实现的时候,往往会取一个较小的K值,先召回一批物品,然后为这些物品中没出现在目标用户中的物品利用上述公式进行打分。

1.2 基于物品的协同过滤算法

与基于用户的协同过滤算法一样,基于物品的协同过滤算法也是基于邻域的一种做法。它也可以分为两步:

a. 计算物品之间的相似度。
b. 根据物品的相似度和用户的历史行为为用户生成推荐列表。

Step1: 计算物品相似度
计算物品相似度主要还是利用用户的行为数据,即比较对两个物品有过正反馈的用户集合的相似性。令N(i)为喜欢物品i的用户集合,则有如下几种相似度计算方法:

购买了该商品的用户也经常购买的其他商品

余弦相似度(ItemCF算法)

上面的公式在计算的时候会导致物品与热门物品的相似度都很高,因此可以加上物品j的热度惩罚项,变成了如下的余弦相似度的形式:

改进的余弦相似度(ItemIUF算法)

与UserIIF算法类似,这里也对热门用户进行了惩罚,即活跃用户对物品相似度的贡献应该小于不活跃的用户。

Step2:为物品打分

在统计完物品之间的相似度之后,就可以利用这种物品相似度以及用户对历史物品的评价为物品打分。其公式如下:

1.3 基于图的模型

用户的行为(User, Item)是可以表示为二分图的,比如下图:

那么任务就变成了在二分图上为用户进行个性化推荐,即给用户u推荐物品的任务可以转化为度量用户顶点vu和与vu没有边直接相连的物品节点在图上的相关性,相关性越高的物品在推荐列表中的权重就越高。

正常来说,相关性高的一对节点之间一般具有如下特征:

1.两个顶点之间有很多路径相连;
2.连接两个顶点之间的路径长度都比较短;
3.连接两个顶点之间的路径不会经过出度比较大的顶点。

基于上面这三个主要因素,可以用PersonalRank算法进行图上的随机游走推荐,其原理为:要给用户u进行个性化推荐,可以从用户u对应的节点vu开始在用户物品二分图上进行随机游走。游走到任何一个节点时,首先按照概率α决定是继续游走,还是停止这次游走并从vu 节点开始重新游走。如果决定继续游走,那么就从当前节点指向的节点中按照均匀分布随机选择一个节点作为游走下次经过的节点。这样,经过很多次随机游走后,每个物品节点被访问到的概率会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。

表述为递推公式如下:

1.4 UserCF和ItemCF的综合比较

1.UserCF比较古老,而ItemCF则相对较新。
2.UserCF给用户推荐那些和他有共同兴趣爱好的用户喜欢的物品,而ItemCF给用户推荐那些和他之前喜欢的物品类似的物品。从这个算法的原理可以看到,UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,而ItemCF的推荐结果着重于维系用户的历史兴趣。换句话说,UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。
3.UserCF比较适合用于新闻推荐等热门程度和实时性较强的场景。比如一个人看新闻不可能每天只看和之前看的相关的那些,更多的是看今天有哪些新的热门的。从原理上讲,UserCF可以给用户推荐和他有相似爱好的一群其他用户今天都在看的新闻,这样在抓住热点和时效性的同时,保证了一定程度的个性化。从技术角度讲,UserCF主要是维护用户相似度表,在这种场景下,物品的更新速度远超用户,所以维护物品相似度表难度和成本都较高。
4.ItemCF则适用于图书、电商、电影等场景。首先这些场景中用户的兴趣是比较固定和长久的,而且一般物品更新的速度不会特别快。

推荐系统实战第一部分 协同过滤相关推荐

  1. Python机器学习实战教学——基于协同过滤的电影推荐系统(超详细教学,算法分析)

    注重版权,转载请注明原作者和原文链接 作者:Yuan-Programmer 结尾处有效果展示 文章目录 引言 一.技术原理 (一)推荐算法介绍 (二)主流距离计算法 (三)余弦距离计算法 二.数据介绍 ...

  2. 推荐系统组队学习之协同过滤

    1. 协同过滤算法 协同过滤(Collaborative Filtering)推荐算法是最经典.最常用的推荐算法. 所谓协同过滤, 基本思想是根据用户之前的喜好以及其他兴趣相近的用户的选择来给用户推荐 ...

  3. 如何使用Java+SSM(Spring+SpringMVC+Mybatis)开发个性化新闻推荐系统 在线新闻推荐系统 基于用户项目协同过滤、内容、聚类、关联规则推荐算法实现WebNewsRSMEx

    如何使用Java+SSM(Spring+SpringMVC+Mybatis)开发个性化新闻推荐系统 在线新闻推荐系统 基于用户项目协同过滤.内容.聚类.关联规则推荐算法实现WebNewsRSMEx 一 ...

  4. mysql数据推荐算法_Java+Mysql实现简单在线电影、音乐、图书推荐系统 基于用户的协同过滤推荐算法实现 源代码下载...

    # Java+Mysql实现简单在线电影.音乐.图书等推荐系统(基于用户的协同过滤推荐算法) 一.项目简介 1.开发工具和实现技术 MyEclipse10,jdk1.7,mysql5.5,tomca ...

  5. 推荐系统--基于用户的协同过滤算法

    1.         概述 和搜索引擎一样,推荐系统是为了帮助人们更快速的获得对自己有用的信息. 和搜索引擎不同,推荐系统是人们被动的获取,由系统根据用户行为或其他的信息推荐给用户的,儿搜索引擎是用户 ...

  6. 推荐系统经典算法之协同过滤

    讲推荐算法,就不得不提协同过滤,协同过滤是推荐系统中比较经典的推荐算法之一,我们常用的协同过滤算法共有两种,既 基于物品的协同过滤.基于用户的协同过滤:它们的效果由训练模型的数据特征选取.训练过程中的 ...

  7. ncf 推荐系统_浅析神经协同过滤NCF在推荐系统的应用

    NCF在推荐领域应用背景 CF,也就是协同过滤,在推荐领域有极其广泛的应用,应该没有谁的智能推荐系统是没用到过CF的.CF其实就是挖掘user和item的交互关系,然后生成I2I或者U2I表示向量.传 ...

  8. TKDE2022 | 最新深度学习推荐系统综述:从协同过滤到信息增强的推荐系统

    省时查报告-专业.及时.全面的行研报告库 省时查方案-专业.及时.全面的营销策划方案库 [免费下载]2022年2月份热门报告盘点 某短视频APP推荐算法及策略最详细拆解 机器学习在B站推荐系统中的应用 ...

  9. 基于springboot+vue个性化商城商品推荐系统 前后端分离 协同过滤 全套视频教程

    个性化商城商品推荐系统(用户,多商户,管理员,SpringBoot,SSM,Maven,Vue,Layui) 本系统包含买家,卖家,后台管理员三种角色的用户 买家用户的功能包含: 登录,退出,修改密码 ...

最新文章

  1. 从CPU缓存看缓存的套路
  2. opencv dnn 人脸 年龄
  3. java compare 返回值_关于Java你不知道的那些事之Java8新特性[Lambda表达式和函数式接口]...
  4. gradle中的增量构建
  5. windows下有趣的小玩意
  6. python2.7升级到python3.6注意事项
  7. 探索Windows Azure 监控和自动伸缩系列1 - 连接中国区Azure
  8. Tomcat根目录下work文件夹的作用
  9. 通过JAVA获取优酷视频
  10. ubuntu常用软件安装集合:360浏览器、QQ--持续更新
  11. php ajax mysql视频教学视频_PHP入门教程之AJAX 与 MySQL
  12. 南方cass快捷键命令修改在哪_南方cass快捷键大全_南方cass快捷键命令大全_好特教程...
  13. 一键生成2020年虎年头像
  14. 泛微OA-流程存储数据说明(表单主表+明细表)
  15. 前端代码动态生成 审批流程图、流程图
  16. C语言输出三位数的水仙花数
  17. SpiderViewer - 远程桌面客户端
  18. HTLM 零基础入门教程(详解)
  19. three.js obj模型的mtl材质贴图不显示
  20. 直播平台软件开发都使用了什么协议呢?

热门文章

  1. 以太坊全网算力较去年8月已上升126%
  2. 如何浅显得理解风控模型中的特征筛选|附实操细节(全)
  3. Python入门学习笔记(8)
  4. 信贷常用风控报表(一)
  5. 软件工程第一次测试——学生管理系统设计
  6. 在Windows平台下实现《简明 Python 教程》第十章案例(利用winrar实现压缩备份)...
  7. Confluence 6 创建一个用户宏
  8. LINUX 安装 PHP5.6.13
  9. 走向ASP.NET架构设计--第一章:走向设计
  10. 香港高校校长对话盖茨:技术与社会