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

基本思想

该算法向用户推荐与他们之间喜欢的物品相似的其它物品,例如,如果你购买过《数据挖掘导论》,会向你推荐《机器学习》。

itemCF算法通过计算用户的历史行为记录,来分析物品之间的相似度:如果喜欢物品a的用户大多数也喜欢物品b,那么认为物品A与物品B具有一定的相似度。这就很容易为推荐结果做出合理的解释。

假设,N(a)N(a)N(a)和N(b)N(b)N(b)分别是喜欢物品A和物品B的用户数量,∣N(a)⋂N(b)∣|N(a) \bigcap N(b)|∣N(a)⋂N(b)∣是既喜欢物品a又喜欢物品b的用户数量,那么物品A和物品B的相似度为:
wab=∣N(a)⋂N(b)∣∣N(a)∣w_{ab} = \frac {|N(a) \bigcap N(b)|} {|N(a)|} wab​=∣N(a)∣∣N(a)⋂N(b)∣​
上述公式有个问题:如果B是个很热门的商品,那么将会接近于1(因为喜欢A的人都喜欢B),这会造成任何其他物品与某个热门物品都很相似。因此,我们对公式作一些修改,加上一个惩罚物品B的权重因子,得到了如下公式:
wab=∣N(a)⋂N(b)∣∣N(a)∣∣N(b)∣w_{ab} = \frac {|N(a) \bigcap N(b)|} {\sqrt {|N(a)||N(b)|}} wab​=∣N(a)∣∣N(b)∣​∣N(a)⋂N(b)∣​

计算过程

假设物品的全集是III,首先初始化一个∣I∣×∣I∣|I|\times|I|∣I∣×∣I∣的全零矩阵C:

a b c d f
a 0 0 0 0 0
b 0 0 0 0 0
c 0 0 0 0 0
d 0 0 0 0 0
f 0 0 0 0 0

对于用户-物品兴趣列表:
AabdBacfCacdDbd\begin{matrix} A & a & b & d\\ B & a & c & f\\ C & a & c & d\\ D & b & d \end{matrix} ABCD​aaab​bccd​dfd​

如果物品对(x, y)出现在某个用户的兴趣列表中,则将C[x][y]C[x][y]C[x][y]和C[y][x]C[y][x]C[y][x]都加1,如此遍历之后,得到最终的矩阵:

a b c d f
a 0 1 2 2 1
b 1 0 0 2 0
c 2 0 0 1 1
d 2 2 1 0 0
f 1 0 1 0 0

在得到了物品两两之间的相似度后,itemCF通过以下公式来计算用户u对物品i的兴趣度。
pui=∑j∈N(u)⋂S(i,k)wijrujp_{ui} = \sum_{j \in N(u) \bigcap S(i, k)} w_{ij}r_{uj} pui​=j∈N(u)⋂S(i,k)∑​wij​ruj​
假设N(u)N(u)N(u)是用户喜欢的物品集合,S(i,K)S(i, K)S(i,K)是与物品i最相似的K个物品的集合,wijw_{ij}wij​是物品i与物品j的相似度,rujr_{uj}ruj​是用户u对物品j的兴趣(对于隐反馈数据集,如果用户u对物品j产生过行为,则可令ruj=1r_{uj}=1ruj​=1),puip_{ui}pui​是用户u对物品i的兴趣。

算法参数

参数K是ItemCF算法的重要参数,它对推荐算法的各种指标都会产生一些列的影响:

精度(准确率和召回率):准确率和召回率与参数k并不呈正相关或者负相关,但是选择合适的K对于获得推荐系统高的精度比较重要。

流行度:随着K的增大,推荐结果的流行度会逐渐提高,但是当K增加到一定的程度,流行度就不会再有明显变化。

覆盖率:K越大,覆盖率会相应地降低。

用户活跃度对物品相似度的影响(itemCF-IUF)

在ItemCF中,两个物品之间能产生相似度是因为它们共同出现在了多个用户的兴趣物品列表中,因此用户会对其兴趣列表中的两两物品的相似度产生贡献。但是,不同的用户的贡献是不相同的。
例如,图书馆管理员买了京东上90%的图书,但绝大部分都不是他的兴趣;而一个文艺青年买了5本小说,但都是他的兴趣。所以,图书管理员对他所买的书的两两相似度,要远远小于文艺青年。

因此,活跃的用户,相比起不活跃的用户而言,对物品之间相似度的贡献更小。John S. Breese在论文中提出了IUF(Inverse User Frequence)的概念。假设N(u)是用户u喜欢的物品列表,那么用户u的IUF参数为:
1log⁡(1+∣N(u)∣)\frac 1 {\log {(1 + |N(u)|)}} log(1+∣N(u)∣)1​

增加了IUF参数的物品相似度公式为:
wAB=∑u∈N(A)⋂N(B)1log⁡(1+N(u)∣∣)∣N(A)∣∣N(B)∣w_{AB} = \frac {\sum_{u \in N(A) \bigcap N(B)} \frac 1 {\log (1 + N(u)||)}} {\sqrt{|N(A)||N(B)|}} wAB​=∣N(A)∣∣N(B)∣​∑u∈N(A)⋂N(B)​log(1+N(u)∣∣)1​​

该算法记为itemCF-IUF。

实际上,对于过于活跃的用户,例如上面的图书管理员,一般直接忽略其兴趣物品列表,不将其纳入到相似度计算的数据集中。

物品相似度的归一化处理

Karypis在论文中提到:在ItemCF中,如果将相似度矩阵按照最大值进行归一化处理(将最大值设为1行不行?),那么可以提高推荐的准确率。

除了提高推荐结果的准确率外,归一化还能够提高推荐结果的覆盖率和多样性。
wij′=wijmax⁡wijw_{ij}^{'} = \frac {w_{ij}} {\max w_{ij}} wij′​=maxwij​wij​​
除了提高推荐结果的准确率外,归一化还能提高推荐结果的覆盖率和多样性。

举例
假设有两类物品A和B,A类物品之间的相似度为0.5,B类物品之间的相似度为0.6,A类物品和B类物品之间的相似度为0.2。在这种情况下,如果某用户喜欢5个A类物品和5个B类物品,那么ItemCF算法会向该用户推荐B类物品,因为B类物品之间的相似度比较大。对相似度进行归一化处理后,A类物品之间的相似度变成了1,B类物品之间的相似度也是1,在这种情况下,如果用户喜欢5个A类物品和5个B类物品,那么系统向他推荐的A类物品和B类物品的数量应该是大致相等的。什么样的类其类内物品之间的相似度较高,什么样的类其类内物品之间的相似度较低?
一般来说,越是热门的类,其类内物品的相似度越大,如果不进行归一化,那么就会倾向于推荐热门类里的物品,造成推荐的覆盖率低。

ItemCF算法的缺陷

上面提到:越是热门的类,其类内物品的相似度越大。除此之外,不同领域的最热门物品之间的相似度往往也是很高的。

举例
老一辈人喜欢看新闻联播,不看其他新闻节目。他们在看完新闻联播后,立刻换台去看中央8套的国产电视剧,其他电视剧(如偶像剧)几乎不看。那么,通过ItemCF算法得到的数据,我们很容易认为新闻联播与黄金时段的电视剧的相似度很高,而新闻联播与其他新闻节目(如南京零距离)的相似度很低。这显然是不合理的。

对于这类问题,仅仅靠用户数据是不能解决的,必须引入物品的内容数据。这超出了协同过滤的范围。

参考博客:
https://www.zybuluo.com/xtccc/note/200979

推荐系统召回之itemCF相关推荐

  1. 推荐系统召回、粗排、精排综述

    注:为便于个人学习,将搜集的资料整合到一个文档当中 1 召回 召回总结:推荐系统召回策略之多路召回与Embedding召回 推荐书籍:深度学习推荐系统 推荐系统 embedding 技术实践总结:推荐 ...

  2. 推荐系统召回策略之多路召回与Embedding召回

    多路召回与Embedding召回 1. 多路召回 1.1 概述 1.2. 多说一点 1.3. 融合排序与策略 2. Embedding召回 2.1 概述 2.2 Embedding召回的常见方法 2. ...

  3. PaddleRec与Milvus深度结合,手把手带你体验工业级推荐系统召回速度

    基于 Milvus 召回服务教程 概述 互联网和移动技术的快速发展,一方面让更多的个人随时随地可以接入互联网获取信息,另一方面也让个人和网站更加快捷的提供UGC(User Generated Cont ...

  4. 推荐系统召回总结(持续更新)

    推荐系统架构 候选池:可供推荐的物料候选池,对于图文.短视频.新闻等来说通常是最近N天的新物料组成的集合,定期进行物料更新. 召回:从候选池中选出和用户相关的物料,交给后面的排序模块进行打分.召回面对 ...

  5. 推荐系统召回四模型之全能的FM模型

    作者 | 张俊林 作者简介:中国中文信息学会理事,中科院软件所博士.目前在新浪微博 AI Lab 担任资深算法专家.在此之前,张俊林曾经在阿里巴巴任资深技术专家并负责新技术团队,以及在百度和用友担任技 ...

  6. JAVA召回算法_推荐系统召回策略之多路召回与Embedding召回

    图1. 推荐系统整体架构 推荐系统学习笔记系列链接: 1. 多路召回 1.1 概述 所谓的"多路召回策略"就是指采用不同的策略.特征或者简单模型,分别召回一部分候选集,然后再把这些 ...

  7. 推荐系统——召回模型

    YoutubeDNN 内容 YoutubeDNN是Youtube用于做视频推荐的落地模型,可谓推荐系统中的经典,其大体思路为召回阶段使用多个简单模型筛除大量相关度较低的样本,排序阶段使用较为复杂的模型 ...

  8. 推荐系统-召回-概述(一):内容为王

    大家在访问京东或者淘宝等电商系统时,会发现当看了某件商品或者买了某件商品时,电商系统会马上推荐很多相似的商品:当在百度上搜索某个新闻时,信息流马上推荐类似的新闻,这些是怎么做到的呢?这就涉及到我们今天 ...

  9. 基于Elastic Search的推荐系统“召回”策略

    当我们打开一个资讯APP刷新闻时,有没有想过,系统是如何迅速推送给我们想看的内容?资讯APP背后有一个巨大的内容池,系统是如何判断要不要将某条资讯推送给我们的呢?这就是今天想跟大家探讨的问题--推荐系 ...

最新文章

  1. redis在php中的使用介绍
  2. “package ‘ElemStatLearn‘ is not available for this version of R
  3. echsop privilege.php?act=login,ecshop 后台登陆自动退出的一种可能情况(目录大小写问题)...
  4. 分部方法 partial
  5. 【渝粤题库】国家开放大学2021春1366英语教学理论与实践题目
  6. linq结果转换object_【JavaScript 教程】标准库—Object 对象
  7. 关闭打开苹果电脑Rootless机制
  8. Excel密码保护怎么解密码
  9. Linux 3g上网卡 拨号,Linux 系统 CDMA 无线上网卡拨号过程
  10. win10/11如何安装安卓app?带你使用华为移动应用引擎
  11. 上传文件报错500或者文件大于2M上传不上去解决方法
  12. 九龙证券|大宗商品集体下挫,黄金一枝独秀,纳指领跑全球股市
  13. HTTP API接口设计规范
  14. Linux USB 驱动开发实例(七)—— 基于USB 总线的无线网卡浅析
  15. 计算机显卡的专业术语怎么说,电脑显卡知识你知多少?显卡知识普及
  16. 基于jsp的旅游信息网站的设计
  17. C++OpenCV系统学习(17)——图像分割与抠图(6)——视频背景替换
  18. RX 6500 XT和rtx3050 哪个好
  19. VB让图片铺满整个FORM
  20. 模块介绍之六轴陀螺仪MPU6050篇(STM32基本使用)

热门文章

  1. Synaptic Systems NeuN抗体的应用和参考文献
  2. Commvault斥资2.25亿美元收购Hedvig进行二次创业
  3. 大人孩子都值得一看的20本经典绘本
  4. 线程让步——Thread.yield()
  5. Android离线语音识别(SpeechRecognizer、PocketSphinx)
  6. Fruits 360 基于CNN实现果蔬识别系统
  7. C++STL详解(一)string类的使用及其模拟实现
  8. 小白渗透0-1:BlackMarket靶场渗透记录
  9. iPhone 电池的正确激活与使用方式
  10. hackbar2.1.3 安装教程(附下载地址 )Firefox Chrome