基于物品的协同过滤算法。基于物品的协同过滤算法是目前业界应用最多的算法,亚马逊、Netflix、Hulu、YouTube等很多平台都采用该算法作为其基础推荐算法

原理

     基于物品的协同过滤算法给用户推荐那些和他们之前喜欢的物品相似的物品。但是它并不是利用物品的内容属性计算物品之间的相似度,而是通过分析用户的行为记录计算物品之间的相似度,比如说用户之前买过《数据挖掘导论》,该算法会根据此行为给你推荐《机器学习》,但是ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。

流程

1. 计算物品之间的相似度;
    2. 根据物品的相似度和用户的历史行为给用户生成推荐列表

物品相似度计算
  余弦相似度公式:

其中N(i) ,N(j) 分别表示对物品 i ,j  喜欢的用户数,N(i)∩N(j) 为同时喜欢 i 和 j 的人数。我们这里还是使用漫威英雄举例:假设目前共有5个用户: A 、B 、C 、D 、E ;共有5个漫威英雄人物:死侍、钢铁侠、美国队长、黑豹、蜘蛛侠。用户与人物之间的爱好程度如下图所示:

用户 喜爱英雄人物
A 死侍、钢铁侠、美国队长
B 钢铁侠、黑豹、蜘蛛侠
C 黑豹、美国队长
D 钢铁侠、黑豹、美国队长
E 死侍、美国队长

def load_data(filePath):f = open(filePath, "r", encoding="utf-8")dataSet = {}for line in f:user, hero, rating = line.strip().split(",")dataSet .setdefault(user, {})dataSet [user][hero] = ratingreturn dataSet # 数据格式如下:
#   {'A': {'死侍': '1', '钢铁侠': '1', '美国队长': '1'}, 'B': {'死侍': '1', '黑豹': '1'}, #'C': {'钢铁侠': '1', '蜘蛛侠': '1'}, 'D': {'蜘蛛侠': '1', '黑豹': '1', '美国队长': '1'}}

构建倒排表:

A: 死侍 钢铁侠 美国队长 黑豹 蜘蛛侠
死侍   1 1    
钢铁侠 1   1    
美国队长 1 1      
黑豹          
蜘蛛侠          
B: 死侍 钢铁侠 美国队长 黑豹 蜘蛛侠
死侍          
钢铁侠       1 1
美国队长          
黑豹   1     1
蜘蛛侠   1   1  

矩阵相加

END 死侍 钢铁侠 美国队长 黑豹 蜘蛛侠
死侍   1 2    
钢铁侠 1   2 2 1
美国队长 2 2   2  
黑豹   2 2   1
蜘蛛侠   1   1  

建立好稀疏矩阵之后,C[i][j]  记录了同时爱好 i 和 j 的用户数,这样我们就可以带入上面的公式得到物品之间的相似度矩阵W

 def item_similarity(userSet):C = dict()N = dict()for u, items in userSet.items():for i in items:N.setdefault(i, 0)N[i] += 1for j in items:if i == j:continueC.setdefault(i, {})C[i].setdefault(j, 0)C[i][j] += 1print("稀疏矩阵: ", C)W = dict()for i,related_items in C.items():for j, cij in related_items.items():W.setdefault(i, {})W[i].setdefault(j, 0)W[i][j] = cij / math.sqrt(N[i] * N[j])print("物品相似度: ", W)return W"""稀疏矩阵:  {'钢铁侠': {'死侍': 1, '美国队长': 2, '黑豹': 2, '蜘蛛侠': 1}, '死侍': {'钢铁侠': 1, '美国队长': 2}, '美国队长': {'钢铁侠': 2, '死侍': 2, '黑豹': 2}, '黑豹': {'钢铁侠': 2, '蜘蛛侠': 1, '美国队长': 2}, '蜘蛛侠': {'钢铁侠': 1, '黑豹': 1}}物品相似度:  {'钢铁侠': {'死侍': 0.4082482904638631, '美国队长': 0.5773502691896258, '黑豹': 0.6666666666666666, '蜘蛛侠': 0.5773502691896258}, '死侍': {'钢铁侠': 0.4082482904638631, '美国队长': 0.7071067811865475}, '美国队长': {'钢铁侠': 0.5773502691896258, '死侍': 0.7071067811865475, '黑豹': 0.5773502691896258}, '黑豹': {'钢铁侠': 0.6666666666666666, '蜘蛛侠': 0.5773502691896258, '美国队长': 0.5773502691896258}, '蜘蛛侠': {'钢铁侠': 0.5773502691896258, '黑豹': 0.5773502691896258}}
"""

推荐

这里我们取用户为 A,K=2 ,即为用户A喜欢的每个人物推荐两个相关度比较高的人物,结果为:

 def recommend(user, train, W, K):pi = 1rank = dict()interacted_items = train[user]for item in interacted_items:print(" ->", item)related_item = []for user, score in W[item].items():related_item.append((user, score))for j, v in sorted(related_item, key=itemgetter(1), reverse=True)[0:K]:print(j, v)if j in interacted_items:continueif j not in rank.keys():rank[j]=0rank[j] += pi * vprint("推荐人物: ", rank)return rank"""-> 钢铁侠黑豹 0.6666666666666666美国队长 0.5773502691896258-> 死侍美国队长 0.7071067811865475钢铁侠 0.4082482904638631-> 美国队长死侍 0.7071067811865475钢铁侠 0.5773502691896258推荐人物:  {'黑豹': 0.6666666666666666}
"""

从上面可以看出,

和钢铁侠比较相似的人物为黑豹、美国队长,

和死侍比较相似的人物为美国队长、钢铁侠 ,

和美国队长相似的两个人物为死侍、钢铁侠 。

即推荐出来的人物为黑豹、美国队长、钢铁侠、死侍,但是美国队长、死侍、钢铁侠本来就在用户 A  喜爱的人物中,所以不用推荐,那么最终推荐的人物就为黑豹了。根据 ItemCF 算法,用户 A  对黑豹的喜爱程度为:
p(A,黑豹)=w钢铁侠、黑豹=0.6666666666666666

来源:  https://blog.csdn.net/keyue123/article/details/85856515

推荐系统-ItemCF基于用的协同过滤相关推荐

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

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

  2. [推荐算法]ItemCF,基于物品的协同过滤算法

     [推荐算法]ItemCF,基于物品的协同过滤算法 标签: ItemCF基于用户的协同过滤算法 2015-03-09 15:11 4144人阅读 评论(1) 收藏 举报 本文章已收录于: 分类: ...

  3. ItemCF,基于物品的协同过滤算法

    转载自   ItemCF,基于物品的协同过滤算法 ItemCF:Item Collaboration Filter,基于物品的协同过滤 算法核心思想:给用户推荐那些和他们之前喜欢的物品相似的物品. 比 ...

  4. 推荐系统笔记:基于模型的协同过滤

    1 介绍 基于邻域的协同过滤方法可以看作是机器学习中常用的k-最近邻分类器KNN的泛化. 这些方法是基于实例的方法,因此,除了可选的预处理阶段之外,没有专门为预测预先创建模型. 推荐系统笔记:Intr ...

  5. 【推荐系统】基于模型的协同过滤算法

    基于模型的协同过滤算法 本节介绍基于模型的协同过滤算法1在Top-N推荐中的应用. 核心思想是 通过隐含特征(latent factor)联系用户兴趣和物品 . 思路:对于某个用户,首先得到其兴趣分类 ...

  6. 【推荐系统】基于物品的协同过滤算法

    基于物品的协同过滤算法 目前业界应用最多的算法. 给用户推荐和他们之前喜欢的物品相似的物品. 其主要通过分析用户的行为记录计算物品之间的相似度.物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都 ...

  7. 【推荐系统】基于用户的协同过滤算法

    基于用户的协同过滤算法 基础算法 在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的.而用户A没有听说过的物品推荐给A.这种方法称为基于 ...

  8. 推荐系统实践----基于用户的协同过滤算法(python代码实现书中案例)

    本文参考项亮的<推荐系统实践>中基于用户的协同过滤算法内容.因其中代码实现部分只有片段,又因本人初学,对python还不是很精通,难免头大.故自己实现了其中的代码,将整个过程走了一遍. 1 ...

  9. mapreduce实现ItemCF——基于物品的协同过滤

    推荐系统的基本架构: 实时推荐和离线推荐 源码:github 注:以下所有数据之间都是以 \t 隔开的,博客里显示效果不好 数据集: 1 101 5 1 102 3 1 103 3 2 101 2 2 ...

最新文章

  1. 【算法笔记】哈密顿问题
  2. EJB3.0 定时服务:Timer Service
  3. jQuery 插入元素
  4. SpringData Jpa、Hibernate、Jpa 三者之间的关系
  5. 防火墙(15)——SNAT和DNAT,SNAT实践
  6. 硬盘安装Linux救援系统,硬盘安装linux系统
  7. Flume监控几种方式
  8. 华硕2020年显卡_送自己最好的新年游戏礼物,2020年新春显卡市场完全解析
  9. Windows常用运行库合集--官网(VC++、DirectX、.NET)
  10. 海康球机3D定位功能编码实现VC(对前一篇补充改进)
  11. 计算机与单片机串口程序,51单片机与电脑串口通信,并用数码管显示的两种方法...
  12. 吃饭?睡觉?打豆豆?
  13. 九爷带你 查看linux所有正在运行的进程
  14. MySQL8.0 - 新特性 - Descending Index
  15. Jenkins无法访问解决方法
  16. 韩国5G产品定价及营销策略剖析
  17. 利用office2010 word2010生成目录
  18. Youth means limitless possibilities.
  19. mysql 1265错误_Mysql出现ERROR 1265: Data truncated for
  20. 常太晚睡觉等于自杀!!熬夜也要有技巧!!

热门文章

  1. 我的世界java版月步教程,【我的世界】我的世界三大极限操作展现!完美月步艳惊四座 无道具瞬移实现_玩得好游戏攻略...
  2. 【附源码】计算机毕业设计Python安卓便利猫电影购票系统安卓app14g1h(源码+程序+LW+调试部署)
  3. 蓝鲸智云社区版多机部署笔记
  4. 答题软件 JAVA web_悟空问答自动答题软件下载 1.0 免费版
  5. 简单的基于地理图片的旅行路线还原
  6. com.alibaba.rocketmq.client.exception.MQClientException: No route info of this topic, topic_orderCre
  7. traceroute命令初探
  8. Ubuntu pm2 重启自动启动服务
  9. 矮人要塞 Dwarf Fortress 汉化记录 序
  10. 电脑打开计算机的管理闪退怎么办,电脑软件打开后闪退或崩溃的解决办法