目录

一、协同过滤算法

二、基于邻域的算法:UserCF、ItemCF

三、UserCF、ItemCF的改进

一、协同过滤推荐算法
协同过滤算法是指基于用户行为数据设计的推荐算法,主要包括:

1.基于邻域的算法:UserCF(基于用户的协同过滤算法)、ItemCF(基于物品的协同过滤算法)

2.隐语义模型(LFM):基于矩阵分解的推荐算法

3.基于图的随机游走算法:PersonalRank

本文主要讲解基于邻域的推荐算法UserCF、ItemCF

二、基于邻域的算法:UserCF、ItemCF
1.UserCF的核心思想是:给用户推荐和他兴趣相似的其他用户喜欢的物品,算法主要包括两个步骤:

<1>.找到和目标用户兴趣相似的用户集合;

要找到和目标用户兴趣相似的用户,就必须回答:什么样的用户兴趣相似?如何衡量两个用户兴趣相似的程度?
在生活中我们知道,如果两个人都买了《推荐系统实战》这本书,说明两个人对推荐系统都感兴趣,如果两个人的书单一模一样,则两个人对书籍的兴趣爱好就特别相似。UserCF就是利用这种用户行为的相似计算兴趣的相似度。

a.利用Jaccard公式计算

b.余弦相似度

为(喜欢)的物品的集合;|N(u)|:用户u产生过行为的物品的个数

例如:若用户U1购买了a,b,c,用户U2购买了a,b,c,e,f,,用户U3购买了a,e,则(U1,U2),(U1,U3)的相似度分别为:

有了用户相似度计算方法,我们就可计算每个用户和目标用户u的相似度,然后对这些相似度进行排序,得到和用户u兴趣相似的k个用户的集合S(u,k)

<2>.找到用户集合中其他用户喜欢的且目标用户没有听说过的物品推荐给目标用户

给用户推荐与其兴趣相似的K个用户喜欢的物品,我们首先要找到K个用户喜欢而用户没有接触过的物品,前后计算用户对该物品的感兴趣程度,根据感兴趣程度对物品进行排序,然后推荐给用户感兴趣程度较高的物品,在UserCF中衡量用户对某物品的感兴趣程度使用以下公式:

其中P(u,i)表示用户u对物品i的喜欢程度;N(i)表示喜欢物品i的用户集合;r(v,i)表示用户v对物品i是否产生过行为(对于评分系统,可以表示v对i的评分)。

以上面用户U1,U2,U3为例,k取2,U1没有对物品e,f产生过行为:
S(U1,2) = {U2,U3};N(f) = {U2} ;N(e) = {U2,U3}

如果要给用户U1只推荐一个物品,由于P(U1,e)>P(u1,f),推荐物品e。

精度指标不和参数k成线性关系,对k也不是特别敏感,K只要选定在一定范围内,就可以获得不错的精度。k越大则UserCF推荐结果就越热门(流行度越大),覆盖率越低

2.ItemCF的核心思想是:给用户推荐和其过去感兴趣的物品相似的物品,算法主要包括两个步骤:

<1>.计算物品之间的相似度

每个用户的兴趣都局限在某几个方面,如果两个物品属于一个用户的兴趣列表,那么两个物品可能就属于有限的几个领域,而如果两个物品同属于很多用户的兴趣列表,那么他们就可能属于同一个领域,因而有很大的相似度。因此ItemUser利用下面公式计算物品之间的相似度:

其中,W(i,j)表示物品i,j之间的相似度;N(i)表示喜欢物品i的用户集合,|N(i)|表示喜欢物品i的用户的个数

还是以上面  用户U1购买了a,b,c,用户U2购买了a,b,c,e,f,,用户U3购买了a,e 举例说明:
a:U1,U2 ,U3   b:U1,U2   c:U1,U2   e:U2,U3   f:U2

<2>计算用户U对一个物品的兴趣

其中P(u,j)表示用户u对物品j的兴趣,S(j,k)表示和物品j最相似的k个物品,N(u)表示用户产生过行为的物品集合,r(u,i)表示用户u对物品i是否产生过行为(对于评分系统,可以表示u对i的评分)。

以上面例子说明,给用户U1推荐物品,K取3,用户U1没有对e,f产生过行为:

如果要给用户U1只推荐一个物品,由于P(U1,e)<P(U1,f),推荐物品f。

精度不和k成线性关系,选择合适的k比较重要

3.UserCF和ItemCF的比较

从五个方面对UserCF,ItemCF进行比较
<1> 个性化程度
   UserCF推荐结果着重于和用户兴趣相似的小群体的热点,推荐更加社会化,反映了用户所在兴趣群体中物品的热门程,ItemCF着重于维护用户的历史兴趣,推荐更加个性化,反映了用户自己的兴趣传承,可以用于长尾物品丰富的领域
<2> 可解释性:ItemCF可以利用用户的历史行为给推荐结果提供推荐解释,UserCF很难对推荐结果作出解释
<3> 相似度矩阵:UserCF要计算用户相似度矩阵,适用于用户个数远少于物品个数的场景,ItemCF要计算物品相似度矩阵,适用于物品个数远少于用户个数的场景;互联网中物品的相似度相对于用户的兴趣一般比较稳定,UserCF中用户相似度矩阵相比ItemCF中物品相似度矩阵更新更频繁
<4> 物品冷启动:UserCF对物品冷启动不敏感, 对于新加入系统的物品,一旦有用户对该新物品产生行为,UserCF可以将该新物品推荐给和该用户相似的人群,而ItemCF无法很好地推荐新加入的物品
<5> 用户冷启动:ItemCF对用户冷启动不敏感,对于新加入的用户,一旦新用户对某物品产生行为,ItemCF可以给该新用户推荐和该物品相似的物品,而UserCF无法很好地给新加入的用户产生推荐

实际在互联网中使用ItemCF比较多。UserCF多用于新闻推荐,热门程度和时效性是新闻推荐的两个中点,UserCF可以给用户推荐和有相似爱好的一群其他用户都在看的新闻,这样抓住热点和时效性的同时,又保证了一定的个性化。

三、UserCF、ItemCF的改进
1.考虑物品的热门程度和用户的活跃度

<1>User-IIF

User-IIF认为两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似,使用以下公式计算用户的相似度

,其中|N(i)|表示对物品i产生过行为的用户的数量

惩罚了用户u和用户v共同兴趣列表中热门物品对他们相似度的影响

<2>Item-IUF

Item-IUF认为活跃用户对物品相似度的贡献应小于不活跃用户,使用以下公式计算物品的相似度

,其中|N(u)|表示用户u产生过行为的物品的个数

2.考虑时间因素

上面的算法都没有考虑时间因素,时间因素对推荐系统的准确率有一定的影响

<1>时间上下文相关的UserCF算法:

前面的UserCF算法认为用户对相同的物品产生过行为,则他们兴趣比较相似,显然如果两个用户同时对同一物品产生行为,则我们认为他们有更大的相似性。例如用户U1在18年1月购买了《推荐系统实战》,用户U2在18年2月购买了《推荐系统实战》,用户U3在15年1月购买了《推荐系统实战》,则我们认为U1和U2的兴趣相似度大于U1和U3。

在计算用户相似度的时候加上时间因素,使用下面公式:

其中Tui表示用户u对物品i产生行为的时间,可用任意随|Tui-Tvi|递减的且大于0的函数代替

找到和当前用户u兴趣相似的用户后,这组用户最近的兴趣相比之前的兴趣更加接近用户u当前的兴趣,可使用以下公式计算,其中T0表示当前时间

<2>时间上下文相关的ItemCF算法:

通常用户在很短时间内喜欢的物品更有相似性,在计算物品相似度时加上时间因素,使用下面公式:

用户近期行为相比之前行为更能体现用户当前的兴趣,可使用以下公式计算:

基于时间上下文的user_cf实现:https://github.com/nicajonh/MachineLearningLab/tree/master/Recomment/cf_recommend

协同过滤推荐算法:UserCF、ItemCF python现实相关推荐

  1. python协同过滤可以预测吗_基于用户的协同过滤推荐算法原理-附python代码实现...

    在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤.一直到2000年,该算法都是 ...

  2. 协同过滤推荐算法-基于用户的协同过滤UserCF及python实现

    协同过滤推荐算法 基本思想: 根据用户的历史行为数据的挖掘发现用户的兴趣爱好,基于不同的兴趣爱好对用户进行划分并推荐兴趣相似的物品给用户. 协同过滤推荐算法包含: 1.1基于记忆的推荐算法(基于领域的 ...

  3. Python+Django+Mysql个性化图书推荐系统 图书在线推荐系统 基于用户、项目、内容的协同过滤推荐算法(带设计报告)

    Python+Django+Mysql个性化图书推荐系统 图书在线推荐系统 基于用户.项目.内容的协同过滤推荐算法 WebBookRSM.Python python实现协同过滤推荐算法实现 源代码下载 ...

  4. Python+Django+Mysql开发在线美食推荐网 协同过滤推荐算法在美食网站中的运用 基于用户、物品的协同过滤推荐算法 个性化推荐算法、机器学习、分布式大数据、人工智能开发

    Python+Django+Mysql开发在线美食推荐网 协同过滤推荐算法在美食网站中的运用 基于用户.物品的协同过滤推荐算法 个性化推荐算法.机器学习.分布式大数据.人工智能开发 FoodRecom ...

  5. Python+Django+Mysql开发在线购物推荐网 协同过滤推荐算法在购物网站中的运用 个性化推荐算法开发 基于用户、物品的协同过滤推荐算法 机器学习、分布式大数据、人工智能开发

    Python+Django+Mysql开发在线购物推荐网 协同过滤推荐算法在购物网站中的运用 个性化推荐算法开发 基于用户.物品的协同过滤推荐算法 机器学习.分布式大数据.人工智能开发 ShopRec ...

  6. 在线电影推荐网 Python+Django+Mysql 协同过滤推荐算法在电影网站中的运用 基于用户、物品的协同过滤推荐算法 开发在线电影推荐系统 电影网站推荐系统 人工智能、大数据、机器学习开发

    在线电影推荐网 Python+Django+Mysql 协同过滤推荐算法在电影网站中的运用 基于用户.物品的协同过滤推荐算法 开发在线电影推荐系统 电影网站推荐系统 人工智能.大数据.机器学习开发 M ...

  7. 在线新闻推荐网 Python+Django+Mysql开发技术 基于用户、物品的协同过滤推荐算法 个性化新闻推荐系统 协同过滤推荐算法在新闻网站中的运用 个性化推荐算法、机器学习、分布式大数据、人工智

    在线新闻推荐网 Python+Django+Mysql开发技术 基于用户.物品的协同过滤推荐算法 个性化新闻推荐系统 协同过滤推荐算法在新闻网站中的运用 个性化推荐算法.机器学习.分布式大数据.人工智 ...

  8. 在线图书推荐网 Python+Django+Mysql开发技术 个性化图书推荐系统 协同过滤推荐算法在图书网站中的运用 基于用户、物品的协同过滤推荐算法 个性化推荐算法、机器学习、分布式大数据、人工智

    在线图书推荐网 Python+Django+Mysql开发技术 个性化图书推荐系统 协同过滤推荐算法在图书网站中的运用 基于用户.物品的协同过滤推荐算法 个性化推荐算法.机器学习.分布式大数据.人工智 ...

  9. 在线电影推荐网 使用Python+Django+Mysql开发技术 在线电影推荐系统 电影网站推荐系统 基于用户、物品的协同过滤推荐算法 个性化推荐算法开发 机器学习、人工智能、大数据分布式开发

    在线电影推荐网 使用Python+Django+Mysql开发技术 在线电影推荐系统 电影网站推荐系统 基于用户.物品的协同过滤推荐算法 个性化推荐算法开发 机器学习.人工智能.大数据分布式开发 Mo ...

最新文章

  1. 网络工程师_想要记录下来的一些题_2
  2. Python2和Python3关于reload()用法的区别
  3. Redis(七)Redis的噩梦:阻塞
  4. ​SoundCloud的web播放库Maestro演进之路
  5. hp laser103 属性没有配置项_哦?在hp打印机面板上就可以更改打印机ip地址
  6. TCP/ip通信模式
  7. 编写区块链_编写由区块链驱动的在线社区的综合指南
  8. 博客系统如何随机插入大量文章数据
  9. openlayers小车_openlayer 车辆跟着轨迹移动
  10. springmvc的作用:
  11. ConcurrentHashMap真的线程安全吗?
  12. SHFormatDrive格式化硬盘
  13. 计算机管理用房设置要求,党政机关办公用房管理系统解决方案
  14. 记录一个php用curl方法post一个api的过程multipart/form-data,php的json对象转数组,php数组转json格式
  15. 从零开始搭建自己的网站四:博客网站模板下载
  16. C++复数运算符重载,复数开平方
  17. ANT 下载,ant的配法 整理
  18. ARMA模型结合PSO算法进行股票预测
  19. 解忧云SMS短信服务平台系统 短信发送系统源码 全解密随时可以二开无后门
  20. Robomaster:大风车识别可视化(记录一下)

热门文章

  1. 天下熙熙,皆为利来;天下攘攘,皆为利往。—第三十八天
  2. 解决module java.base does not “opens java.lang“ to unnamed module @726f3b58问题
  3. 入局先进空中交通,Overair推出全电动垂直起降飞机
  4. select_shape算子的使用与特性
  5. CentOS 7 搭建 Keepalived+LVS NAT模式 高可用集群
  6. 【Gradle-2】一文搞懂Gradle配置
  7. 【Nature重磅】OpenAI科学家提出全新强化学习算法,推动AI向智能体进化
  8. 作家之旅 源自神话的写作要义(第三版)
  9. FOC——16.单片机最小系统
  10. Thinkphp+vue女生穿衣服装搭配系统毕业设计