item-based CF

给用户推荐那些和他们之前喜欢的物品相似的物品。item-based CF并不是利用物品的内容属性计算物品之间的相似度,主要是通过分析用户的行为记录计算物品间的相似度

算法步骤

(1)计算物品之间的相似度
(2)根据物品的相似度和用户的历史行为,给用户生成推荐列表
w i j = ∣ N ( i ) ∩ N ( j ) ∣ ∣ N ( i ) ∣ w_{ij}=\frac{|N(i)\cap N(j)|}{|N(i)|} wij​=∣N(i)∣∣N(i)∩N(j)∣​
其中 ∣ N ( i ) ∣ |N(i)| ∣N(i)∣是喜欢物品 i i i的用户数, ∣ N ( i ) ∩ N ( j ) ∣ |N(i)\cap N(j)| ∣N(i)∩N(j)∣是同时喜欢物品 i i i和物品 j j j的用户数。喜欢物品 i i i的用户里,有多少比例的用户也喜欢物品 j j j。但如果物品 j j j很热门,即很多人都喜欢,则 w i j w_{ij} wij​就会很大,接近1;即任何物品都会和热门的物品有很大的相似度,所以添加惩罚物品 j j j的权重
w i j = ∣ N ( i ) ∩ N ( j ) ∣ ∣ N ( i ) ∣ ∣ N ( j ) ∣ w_{ij}=\frac{|N(i)\cap N(j)|}{\sqrt{|N(i)||N(j)|}} wij​=∣N(i)∣∣N(j)∣ ​∣N(i)∩N(j)∣​

用户-物品倒排表

对每个用户建立一个包含他”喜欢的物品的列表“,然后对每个用户,将他”喜欢的物品的列表“中的物品两两在共现矩阵 C C C中加1。
对每个用户”喜欢的物品的列表“建立”物品两两对应出现矩阵“,最终将每个用户的”物品两两对应出现矩阵“相加得到共现矩阵 C C C, C [ i ] [ j ] C[i][j] C[i][j]表示同时喜欢物品 i i i和物品 j j j的用户数。

import mathdef ItemSimilarity(train):""":param train: user-item matrix:return: W: similarity matrix"""#calculate co-rated users between itemsC=dict()N=dict()for u, items in train.items():for i in items:#################if i not in N:N[i] = 0#################N[i] += 1for j in items:if i == j:continue#################if i not in C:C[i] = dict()if j not in C[i]:C[i][j]=0#################C[i][j] += 1#calculate final similarity matrix WW=dict()for i, related_items in C.items():for j, cij in related_items.items():#################if i not in W:W[i] = dict()if j not in W[i]:W[i][j] = 0#################W[i][j] = cij/math.sqrt(N[i]*N[j])return W#test:
train={'A':{'a','b','d'},'B':{'b','c','e'},'C':{'c','d'},'D':{'b','c','d'},'E':{'a','d'}}
print(ItemSimilarity(train))#Output:
{'a': {'b': 0.4082482904638631, 'd': 0.7071067811865475}, 'b': {'a': 0.4082482904638631, 'd': 0.5773502691896258, 'c': 0.6666666666666666, 'e': 0.5773502691896258}, 'd': {'a': 0.7071067811865475, 'b': 0.5773502691896258, 'c': 0.5773502691896258}, 'c': {'b': 0.6666666666666666, 'e': 0.5773502691896258, 'd': 0.5773502691896258}, 'e': {'b': 0.5773502691896258, 'c': 0.5773502691896258}}

用户u对物品j的兴趣【用户u对物品i的兴趣;物品i和物品j的相似性】

p u j = ∑ i ∈ N ( u ) ∩ S ( j , K ) w j i r u i p_{uj}=\sum\limits_{i\in N(u)\cap S(j,K)}w_{ji}r_{ui} puj​=i∈N(u)∩S(j,K)∑​wji​rui​
其中 N ( u ) N(u) N(u)是用户 u u u喜欢的物品集合, S ( j , K ) S(j,K) S(j,K)是和物品 j j j最相似的 K K K个物品的集合, w j i w_{ji} wji​是物品 j j j和物品 i i i的相似度, r u i r_{ui} rui​是用户 u u u对物品 i i i的兴趣。即,和”用户历史上感兴趣的物品“越相似的物品,在用户的推荐列表里越有可能排名靠前。

from  operator import itemgetter
def Recommendation(train, user_id, W, K):""":param train: user-item matrix:param user_id: user id:param W: similarity matrix:param K: number of similar items:return: recommendation list in order"""#give final recommendation listrank=dict()ru=train[user_id]   #user_id喜欢的物品集for i in ru:   #user_id喜欢的物品iif i not in W:continuefor j, wj in sorted(W[i].items(), key=itemgetter(1), reverse=True)[0:K]:   #与物品i相似度最大的K个物品if j in ru:   #如果与物品i 相似度在前K个位置的物品j 在user_id原本喜欢的物品集里continue#################if j not in rank:rank[j] = 0#################rank[j] += wjreturn rank#test:
train={'A':{'a','b','d'},'B':{'b','c','e'},'C':{'c','d'},'D':{'b','c','d'},'E':{'a','d'}}
W=ItemSimilarity(train)
print(Recommendation(train, 'A', W, 1))
print(Recommendation(train, 'A', W, 3))#Output:
{'c': 0.6666666666666666}
{'c': 1.2440169358562925, 'e': 0.5773502691896258}#即遍历指定用户喜欢的每个物品的/前K个相似物品

扫码关注公众号:瑞行AI,欢迎交流AI算法、数据分析等技术,提供技术方案咨询和就业指导服务!

item-based CF相关推荐

  1. 推荐算法——基于协同过滤CF

    https://www.toutiao.com/a6643326861214482957/ 2019-01-06 18:21:09 前边我们已经介绍了推荐算法里的基于内容的推荐算法CB,今天我们来介绍 ...

  2. 数据挖掘干货总结(六)--推荐算法之CF

    本文共计1245字,预计阅读时长八分钟 推荐算法(二)--CF算法 一.推荐的本质 推荐分为非个性化和个性化,非个性化推荐比如各类榜单,而本系列主要介绍个性化推荐,即: 在合适的场景,合适的时机,通过 ...

  3. 推荐算法---FM,协同过滤

    文章目录 目录 1.FM算法产生背景 2.FM算法模型 3.FM算法VS其他算法 4.推荐算法总结 目录 1.FM算法产生背景 在传统的线性模型如LR中,每个特征都是独立的,如果需要考虑特征与特征直接 ...

  4. python3实现推荐算法

    两种最普遍的推荐系统的类型是基于内容和协同过滤(CF).协同过滤基于用户对产品的态度产生推荐,基于内容的推荐系统基于物品属性的相似性进行推荐.CF可以分为基于内存的协同过滤和基于模型的协同过滤. 我们 ...

  5. 从算法到工程,推荐系统全面总结

    最近读了本好书-<深度学习推荐系统>,读完不觉全身通畅,于是就有了写这篇文章的想法,把自己的理解和总结分享给大家. 本文将按照从算法到工程的顺序,先介绍一下推荐系统整体架构:再聊聊算法模型 ...

  6. 推荐系统-总结:从算法到工程

    最近读了本好书-<深度学习推荐系统>,读完不觉全身通畅,于是就有了写这篇文章的想法,把自己的理解和总结分享给大家. 本文将按照从算法到工程的顺序,先介绍一下推荐系统整体架构:再聊聊算法模型 ...

  7. recyclerview item点击无效_让你彻底掌握RecyclerView的缓存机制

    点击上方蓝字关注 ?? 来源:肖邦kakahttps://www.jianshu.com/p/3e9aa4bdaefd 前言 RecyclerView这个控件几乎所有的Android开发者都使用过(甚 ...

  8. 推荐系统(基于CB,CF,LR)

    数据预处理 用户画像数据user_profile.data(10w条,5.79M): userid, 性别, 年龄段, 收入段, 地域 物品元数据music_meta(75w条,117M): item ...

  9. [推荐] 协同滤波 —— Collaborative Filtering (CF)

    协同滤波在推荐当中应用比较广泛的算法,协同滤波主要是有两种方式: 既然是推荐,一定设计人和物两个方面,因此 CF 分为基于用户的CF和基于item的CF. 一.基于用户的CF计算用户之间的相似性,并且 ...

  10. python推介系统方法_基于AutoRec 的推荐系统介绍与python实现

    本文要介绍的模型是2015年由澳大利亚国立大学提出的AutoRec.它将自编码器(AutoEncoder) 的思想和协同过滤结合,提出了一种但隐藏层的神经网络推荐model.因为简洁的网络结构和清晰易 ...

最新文章

  1. python网络编程
  2. golang中的定时器
  3. 参考文献顺序不对_Endnote插入参考文献的保姆级教程
  4. ssh不能进入save方法_快速理清为什么你的redis未授权不能getshell
  5. [转]工程师进阶之路(三)
  6. DPDK examples cmdline完全注释(添加quit功能)
  7. 结对编程-黄金点游戏之旅[二]
  8. python中字典dictionary详解及基本使用
  9. WebView 简单使用方法
  10. C语言课程设计|学生成绩管理系统(含完整代码)
  11. Html提交表单的制作
  12. 手把手带你免费打嘉立创pcb板
  13. 默认连接电脑的模式为MTP
  14. 价值创造链路及经营计划
  15. 运维必备规章制度:故障分级和处罚规范 – 运维派
  16. Coke Rejection Risks Big Spill
  17. 陈经纶2021年高考成绩查询时间,最新丨2018人大附等28所北京学校中高考成绩一览...
  18. Imx283 Uboot2017+Linux3/4/5系统内核移植
  19. yunfile php,yunfile解析出真实地址,却不能下载,访问会出错...
  20. Unity中使用TexturePacker优化图集

热门文章

  1. 2021年电工(初级)考试报名及电工(初级)考试技巧
  2. 寻找亚马逊测评师邮箱_亚马逊站外精准引流推广实操(超级干货
  3. TGO鲲鹏会北京分会“进化”三年不改初心 坚持为会员提供优质服务
  4. 软件设计师——法律法规
  5. 在python中股票的收盘价如何表示_Python:从字典中创建收盘股价的数据框架
  6. 开讲啦-记录-创业(1)
  7. 2021-2027全球与中国车载低噪音放大器市场现状及未来发展趋势
  8. 设计E-R图,E-R图转换成关系模式结构
  9. 软件无线电 多核服务器,基于多核CPU的软件无线电平台研发及应用技术研究
  10. TFN 品牌熔接机怎么样?TFN FT-7做干线又有哪些优势