推荐召回--基于物品的协同过滤:ItemCF
1. 前言
说完基于用户的协同过滤后,趁热打铁,我们来说说基于物品的协同过滤:“看了又看”,“买了又买”。
如果说协同过滤在推荐系统的召回策略中,占据着非常重要的地位,那么基于物品的协同过滤ItemCF,就是协同过滤的重心。
协同过滤算法诞生于1998年,由亚马逊首先提出,论文是:Item-Based Collaborative Filtering Recommendation
Algorithms。该论文被授予“时间检验奖”,理由就是:该论文深深的影响了实际应用。历经二十多年,至今仍发光发热,为推荐系统的演化,做出了不可磨灭的贡献。
有的小伙伴可能会问:有了UserCF,还要什么ItemCF?存在即合理,在总结了UserCF后,大家有没有想过它的缺点呢?
- 用户的数量很大,计算起来,很耗时
- 用户的兴趣和口味会随着时间而变化
- 数据稀疏,用户间的消费会受热门物品的影响,很难发现用户真正的兴趣
而针对以上UserCF的缺点,ItemCF很好的解决了该问题。原因在于,构建物品-用户的倒排表,先去计算物品间的相似度,然后对用户已经消费过的物品进行规则过滤,那么这样的话,用户的兴趣就能很好的体现出来,此外,物品上通常比用户基数少,在计算方面相应的会缩短计算时间。
接下来,我们就详细的说说ItemCF。
2. 原理&计算&改进
跟用户的协同过滤很像,物品的协同过滤,也需要用户-物品的共现矩阵,区别于UserCF利用相似度计算方法去计算用户间的相似度,ItemCF是计算物品间的相似度,然后根据物品的相似度,再去加权评分给用户推荐。
当然,也可以直接对相似物品进行排序,直接把相似性高的物品,推荐给用户,作为召回结果。具体根据效果来判定使用哪种方式。
同UserCF计算相似度的方法一样,ItemCF的相似度计算也可以根据共现矩阵的特点去针对性的选择余弦相似度、杰卡德、皮尔逊等方法。此处,更新下变种的余弦相似度计算方法:
\]
分母\(|N(i)|\)是浏览 i 的用户数,分子\(|N(i)\cap N(j)|\)是一个月内同时浏览过 i 和 j 的用户数。在计算完相似度后,可以直接使用:
\]
公式的核心思想如下:
要预测一个用户 u 对一个物品 i 的分数,遍历用户 u 评分过的所有物品,假如一共有 m个,每一个物品和待计算物品 i 的相似度乘以用户的评分,这样加权求和后,除以所有这些相似度的总和,就得到了一个加权平均评分,作为用户 u 对物品 i 的分数预测。
在实际的工作中,相似度的计算都是拿前一天的用户数据离线计算完成后,直接存储在redis或hbase中,供后续排序阶段使用。
当然,相似度的计算方法有很多种,主要是根据业务实际情况来选择,还有Slope One算法,以及考虑序列跨度的相似度算法。此外,常规的改进思路有:在评分体系中,可以用矩阵中物品的分数,减去物品的均值分数。这样做的目的就是为了减少个人倾向所造成的影响。
3. 总结
关于协同过滤的总结到这里就告一段路,后续会继续总结其他召回通路,其实对于推荐召回侧来说,主要的就是与业务相关策略的实现,而排序侧主要就是算法为主了。
在实际的工作中,sklearn通常作为调试使用,如果数据量大,可以通过spark分布式计算框架来缩短计算量,但spark的底层一般不好修改,所以业界在大规模数据时,会以TensorFlow或Pytorch来训练模型。
对于推荐系统来说,不管数据量多大,使用什么平台工具,其根本就是就是思想和理念,所以一定要把召回侧、排序侧的实现原理搞懂,剩下的工具,不需太过担心,唯熟练尔。
最后,对于协同过滤来说,不管是UserCF还是ItemCF,无非就是三个过程:输入端的数据处理,中间过程的相似度计算方法,输出端的相似性词典和推荐得分。另外,根据不同的特征,选择不同的方法,组合拼接就可以实现最基本的推荐召回,一点也不难。
继续加油!
推荐召回--基于物品的协同过滤:ItemCF的更多相关文章
- 转】Mahout分步式程序开发 基于物品的协同过滤ItemCF
原博文出自于: http://blog.fens.me/hadoop-mahout-mapreduce-itemcf/ 感谢! Posted: Oct 14, 2013 Tags: Hadoopite ...
- 基于物品的协同过滤ItemCF的mapreduce实现
文章的UML图比较好看..... 原文链接:www.cnblogs.com/anny-1980/articles/3519555.html 基于物品的协同过滤ItemCF 数据集字段: 1. Use ...
- 基于物品的协同过滤item-CF 之电影推荐 python
推荐算法有基于协同的Collaboration Filtering:包括 user Based和item Based:基于内容 : Content Based 协同过滤包括基于物品的协同过滤和基于用户 ...
- Mahout分步式程序开发 基于物品的协同过滤ItemCF
http://blog.fens.me/hadoop-mahout-mapreduce-itemcf/ Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, ...
- 推荐召回--基于用户的协同过滤UserCF
目录 1. 前言 2. 原理 3. 数据及相似度计算 4. 根据相似度计算结果 5. 相关问题 5.1 如何提炼用户日志数据? 5.2 用户相似度计算很耗时,有什么好的方法? 5.3 有哪些改进措施? ...
- 【RS】Amazon.com recommendations: item-to-item collaborative filtering - 亚马逊推荐:基于物品的协同过滤
[论文标题]Amazon.com recommendations: item-to-item collaborative filtering (2003,Published by the IEEE C ...
- 基于物品的协同过滤算法(ItemCF)
最近在学习使用阿里云的推荐引擎时,在使用的过程中用到很多推荐算法,所以就研究了一下,这里主要介绍一种推荐算法—基于物品的协同过滤算法.ItemCF算法不是根据物品内容的属性计算物品之间的相似度,而是通 ...
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms” .
ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3 基于物品的协同过滤推荐算法--读"Item-Based ...
- ItemCF_基于物品的协同过滤_MapReduceJava代码实现思路
ItemCF_基于物品的协同过滤 1. 概念 2. 原理 如何给用户推荐? 给用户推荐他没有买过的物品--103 3. java代码实现思路 数据集: 第一步:构建物品的同现矩阵 第 ...
随机推荐
- js控制滚动条在最底部位置
window.scrollTo(0, document.body.scrollHeight) 如果需要始终保持在最底部,可以循环调用该方法 如果是div的 /*滚动条到地步*/ function to ...
- C# 基础(更新中)
Data Structure There're two types of variables in C#, reference type and value type. Enum: enum Colo ...
- Pebbles(hdu2167)
Pebbles Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- 一个不常遇到的HbuilderX自动化测试运行问题
晚上10点左右,刚好说想研究一下uniapp项目中怎么进行自动测试,于是跟着插件的官方教程开始配置测试环境,写好了一个简单的测试脚本,然后图形化操作IDE运行测试,却报错了一大片错误信息,如下所示: ...
- Chapter 20 Treatment-Confounder Feedback
目录 20.1 The elements of treatment-confounder feedback 20.2 The bias of traditional methods 20.3 Why ...
- Adversarially Robust Generalization Requires More Data
目录 概 主要内容 高斯模型 upper bound lower bound 伯努利模型 upper bound lower bound Schmidt L, Santurkar S, Tsipras ...
- Xcode Error returned in reply: Connection invalid
当电脑上有Xcode两个版本是使用其中的某一个的Simulator时出现了这样的报错 在Preference->Location->Command Line Tool 选择 Xcode 9 ...
- ORW-测信道攻击
做SCTF时碰到一个没看过的题型,比赛结束之后才知道是orw的一个玩法,测信道攻击.主要特点就是只给使用open,read,但是不给write,即无法把flag输出到终端.这里可以通过把flag读到栈 ...
- Java Web程序设计作业目录(作业笔记)
Java Web程序设计笔记 • [目录] 第1章 Web应用程序 >>> 1.1.3 使用 Eclipse 创建一个静态的登录页面 1.2.5 使用 IE 或Chrome等浏览器, ...
- Java开发之项目分包
在我们开始准备写一个大点规模的项目时,我们不能随便地从main函数就开始往下写,要有清晰的逻辑思路和各个层面上的数据的传递和交互. 同时在我们写项目时也应该分出不同的包来做不同的事情,比如view包就 ...