基于物品的协同过滤算法(item-based collaborative filtering,以下简称ItemCF)算法思想:给用户推荐那些和他们之前喜欢的物品相似的物品。

不过,ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。

基于物品的协同过滤算法可以利用用户的历史行为给推荐结果提供推荐解释,比如给用户推荐《天龙八部》的解释可以是因为用户之前喜欢《射雕英雄传》。

ItemCF算法主要分为两步。 (1) 计算物品之间的相似度。 (2) 根据物品的相似度和用户的历史行为给用户生成推荐列表。

计算物品相似度

可以用下面的公式定义物品的相似度:

这里,分母|N(i)|是喜欢物品i的用户数,而分子

是同时喜欢物品i和物品j的用户数。因此,上述公式可以理解为

喜欢物品i的用户中有多少比例的用户也喜欢物品j

如果物品j很热门,很多人都喜欢, 那么

就会很大,接近1。因此,该公式会造成任何物品都会和热门的物品有很大的相似度。为了避免推荐出热门的物品,可以用下面的公式:

这个公式惩罚了物品j的权重,因此减轻了热门物品会和很多物品相似的可能性。

计算物品相似度时可以首先建立用户—物品倒排表(即对每个用户建立一个包含他喜欢的物品的列表),然后对于每个用户,将他物品列表中的物品两两在共现矩阵C中加1。

import math
from collections import defaultdict
​
def item_similarity(self, trainset):# 物品相似度矩阵item_similarity_matrix = {}# 物品流行度item_popularity = {}
​for user, items in trainset.items():for item1 in items:# 构造物品相似度矩阵,计算物品共现次数item_similarity_matrix.setdefault(item1, defaultdict(int))for item2 in items:if item1 == item2:continueitem_similarity_matrix[item1][item2] += 1
​# 统计喜欢item1的用户数if item1 not in item_popularity:item_popularity[item1] = 0item_popularity[item1] += 1
​# 计算最终的相似度矩阵for item1, releated_items in item_similarity_matrix.items():for item2, count in releated_items.items():self.item_similarity_matrix[item1][item2] = count / math.sqrt(item_popularity[item1] * item_popularity[item2])
return item_similarity_matrix

产生推荐列表

在得到物品之间的相似度后,ItemCF通过如下公式计算用户u对一个物品j的兴趣:

这里N(u)是用户喜欢的物品的集合,S(j,K)是和物品j最相似的K个物品的集合,

是物品j和i的相似度,
是用户u对物品i的兴趣(对于隐反馈数据集,如果用户u对物品i有过行为,即可令
。)该公式的含义是,和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。

关于物品相似度的一些改进

  • 用户活跃度对物品相似度的影响

John S. Breese在论文“Empirical Analysis of Predictive Algorithms for Collaborative Filtering ”中提出了一个称为IUF(Inverse User Frequence),即用户活跃度对数的倒数的参数,他认为活跃用户对物品相似度的贡献应该小于不活跃的用户,他提出应该增加IUF参数来修正物品相似度的计算公式:

当然,上面的公式只是对活跃用户做了一种软性的惩罚,但对于很多过于活跃的用户,为了避免相似度矩阵过于稠密,我们在实际计算中一般直接忽略他的兴趣列表,而不将其纳入到相似度计算的数据集中。

  • 物品相似度归一化

研究发现,如果将ItemCF的相似度矩阵按最大值归一化,可以提高推荐的准确率。如果已经得到了物品相似度矩阵w,那么可以用如下公式得到归一化之后的相似度矩阵w':

归一化的好处不仅仅在于增加推荐的准确度,它还可以提高推荐的覆盖率和多样性。

协同过滤算法_《推荐系统实践》3.基于物品的协同过滤算法相关推荐

  1. 推荐系统实践(二)----基于物品的协同过滤算法(ItemCF)

      上一篇博客我简单讲了一下基于用户的协同过滤算法,这里我们一起来学习一下另一种:基于物品的协同过滤算法.基于物品的协同过滤算法是目前业界应用最多的算法,亚马逊.Netflix.Hulu.YouTub ...

  2. 推荐系统实践(一)----基于用户的协同过滤算法(UserCF)

      随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载的时代.在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情,这 ...

  3. 【推荐系统】{2} —— 基于物品的协同过滤算法

    协同过滤(英语:Collaborative Filtering,简称CF),简单来说是利用某兴趣相投.拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人透过合作的机制给予信息相当程度的回应(如评分) ...

  4. 推荐系统实践(七)----基于邻域的社会化推荐算法

      今年抖音非常火爆和流行,我们在刷抖音的时候,经常会发现给我们刷到自己微信或者是抖音好友喜欢的小视频,这里很多人都就会很好奇,抖音怎么知道这些人是我的好友,甚至知道我和好友的兴趣就一样呢,这就有了基 ...

  5. Python实现基于物品的协同过滤推荐算法构建电影推荐系统

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 基于物品的协同过滤推荐(Item-based CF)的假设原理为 ...

  6. 推荐系统实战(2)——基于物品的协同过滤算法(代码实现),U-CF和I-CF的比较

    这里加点东西:有利于理解 1基于CF的推荐算法 1.1算法简介 CF(协同过滤)简单来形容就是利用兴趣相投的原理进行推荐,协同过滤主要分两类,一类是基于物品的协同过滤算法,另一种是基于用户的协同过滤算 ...

  7. 推荐算法概述(基于用户的协同过滤算法、基于物品的协同过滤算法、基于内容的推荐算法)

    "无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程." 目前推 ...

  8. 基于物品的协同过滤推荐算法_《推荐系统实践》3.基于物品的协同过滤算法

    基于物品的协同过滤算法(item-based collaborative filtering,以下简称ItemCF)算法思想:给用户推荐那些和他们之前喜欢的物品相似的物品. 不过,ItemCF算法并不 ...

  9. 基于hadoop的商品推荐系统_[零基础入门推荐系统(1)]基于用户和基于物品的协同过滤方法(python代码实现)...

    1. 前言: 为什么会有该系列? 最近,打算写<零基础入门推荐系统>系列,为了系统地介绍推荐系统知识,以及加强基础的实践能力. 该系列将结合一些书籍,比如项亮的<推荐系统实践> ...

  10. 推荐算法 itemcf java_推荐系统之基于物品的协同过滤算法(ItemCF)

    推荐系统之基于物品的协同过滤算法(ItemCF) 发布时间:2018-03-04 16:55, 浏览次数:1778 , 标签: ItemCF 推荐系统之基于物品的协同过滤算法(ItemCF) 前端时间 ...

最新文章

  1. 论文简述 | 融合关键点和标记的基于图优化的可视化SLAM
  2. 无法量产自动驾驶汽车的企业,与谷歌公司差在哪儿
  3. linux 系统创建ora文件,手动创建oracle数据库
  4. python 程序开机自启动,亲测可用
  5. 推进大数据中心新能源应用 广东省六部门联合印发培育新能源战略性新兴产业集群行动计划(2021—2025年)...
  6. [转]Linux C语言头文件搜索路径
  7. linux查看redis索引,linux的redis操作命令
  8. 用python进行自然语言处理_Python自然语言处理示例:SVM和贝叶斯分类
  9. apache.camel_Apache Camel 2.14中的更多指标
  10. Java中快速处理集合_简洁又快速地处理集合——Java8 Stream(上)
  11. 小程序路由及路由传参
  12. 导出excel/xml
  13. java 学习笔记_java学习笔记
  14. 【第3篇】python爬虫实战-CSDN个人主页文章列表获取
  15. 结构化编程 —— 顺序、分支(选择)、循环
  16. 计算机操作系统详细学习笔记(五):文件管理
  17. 无线网络和本地连接同时启用后,无线网络无法使用。
  18. The server time zone value ‘� й ��� ׼ʱ ��‘ is unrecognized or represents more than one time zone.
  19. 基于PHP的餐饮公司展示网站及点餐系统设计与实现
  20. Android网络数据JSON解析使用总结

热门文章

  1. IOS访问webserver接口
  2. 通过过滤器获取表单元素
  3. 异动处理中的发票类型应用(Complaint Processing)
  4. 智能优化算法:蛇优化算法-附代码
  5. ENVI入门系列教程---一、数据预处理---5. 图像自动配准
  6. 使用new和delete
  7. ArcGIS属性字段名设置不超过四个中文的解决方法
  8. Nested组件,解决Flutter布局嵌套过深的利器
  9. EventBus BackgroundPoster原理解析
  10. 当Java枚举遇到位掩码,还能这么玩?