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

输入:物品用户行为矩阵,行为矩阵中的元素只有0和1,0代表行为的负类,1代表行为的正类。比如不喜欢与喜欢、不点赞与点赞、不收藏与收藏。

输出1:根据输入可计算得到物品相似度矩阵;

输出2:根据输入中物品用户行为矩阵得到用户喜欢的物品,用户喜欢的物品结合输出1得到的物品相似度矩阵,可以计算得到用户喜欢度最高的k个物品,并推荐给用户。

基于物品的协同过滤算法适用于物品数明显小于用户数的场景,适用于长尾物品丰富,用户个性化需求强烈的领域。但是该算法不适用于物品变化较快的场景,比如新闻类的应用,如果物品一直在变化,那么会增加物品相似度更新的频率,不够稳定,此类场景下可以考虑选择基于用户的协同过滤算法。

基于物品的协同过滤诞生于1998年,是由亚马逊首先提出,适用于用户明显多于物品的情况。基于物品的协同过滤算法的原始想法是:给用户推荐用户喜欢的物品相似的物品。问题在于“相似的物品”是如何度量的,基于内容的推荐系统中,物品相似是用内容的相似性计算出来的,但是实际上人的群体行为还是会有一些内容特征抓不到的相似性。

在基于物品的协同过滤之前,最常用的是基于用户的协同过滤。基于用户的协同过滤首秀按计算相似用户,然后再根据相似用户的喜好推荐物品,但是基于用户的协同过滤存在以下问题:

基于物品的协同过滤可以较好的解决上面的问题。物品的数量远远少于用户的数量,而且物品之间的相似度不易改变,物品对应的消费者数量大,所以计算出来的物品相似度比较可靠。

协同过滤算法依赖于用户物品之间的关系矩阵(如表1所示)。基于物品的协同过滤算法除了依赖用户物品之间的关系矩阵,还依赖于物品之间的相似度矩阵(如表2所示)。

计算物品的相似度有好几种方法,比如余弦相似度、杰卡德(Jaccard)相似度,余弦相似度适用于评分数据,杰卡德(Jaccard)相似度适用于隐式反馈数据,由于这里使用的用户户物品矩阵是隐式反馈数据,所以介绍下Jaccard相似度的计算公式:

通过上面的公式计算得到物品相似度矩阵后,就可以结合用户已经喜欢过的物品集合给用户推荐物品了,可以通过下面的公式计算用户对待推荐物品的评分:

可以依次求得用户u对所有物品的评分,去掉用户已经喜欢过的物品后,保留分数最高的N个结果推荐给用户u。

python代码实现

本文代码手动构造了一个100*200的物品用户行为矩阵,实际工业环境中肯定不止这点数据量,本中重点在于讲解原理和一种实现方法,对于某个用户而言,推荐喜欢度最高的10个物品,代码运行结果如下:

1user[122]top[10]recomresult:[(98,13.734837466951667),(97,13.534563830373337),(90,12.351537112348055),(94,12.194631579469013),(82,11.25929195188074),(84,10.662303442296619),(80,10.60327372276929),(79,10.570187047487309),(77,9.94780886977415),(69,8.431845325504977)]按照喜欢度从高到底排序,推荐的物品id为98、97、90、94、82、84、80、79、77、69。

THE END
1.推荐算法——基于物品的协同过滤算法标签: 算法 收藏 基于用户的协同过滤算法在用户增长的时候,相似度计算的计算会越来越困难。基于物品的算法给用户推荐他们之前喜欢的物品相似的物品。 算法步骤 计算物品之间的相似度 根据物品的相似度和用户的历史行为给用户生成推荐列表 相似度公式如下: wij=|N(i)∩N(j)||N(i)||N(j)|...https://www.imooc.com/article/27099
2.协同过滤算法深入解析:构建智能推荐系统的核心技术表示用户V对物品I的评分,s i m ( U , V ) sim(U, V)sim(U,V)表示用户U和用户V之间的相似度。 四、基于物品的协同过滤 基于物品的协同过滤算法的基本思想是:找到与目标物品相似的物品,然后将这些相似物品推荐给对目标物品感兴趣的用户。这种方法主要包括两个步骤: ...https://developer.aliyun.com/article/1267365
1.[推荐算法]ItemCF,基于物品的协同过滤算法==>该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。 基于物品的协同过滤算法主要分为两步: 一、计算物品之间的相似度; 二、根据物品的相似度和用户的历史行为给用户生成推荐列表; 下面分别来看这两步如何计算: 一、计算物品之间的相似度: ...https://blog.csdn.net/yeruby/article/details/44154009
2.基于物品的协同过滤算法(ItemCF)原理以及代码实践基于用户(user-based)的协同过滤(UserCF) 基于物品(item-based)的协同过滤(ItemCF算法) 基于模型(model-based)的协同过滤 (ModelCF算法) 本文主要讲述基于物品的协同过滤(ItemCF)算法的原理以及代码实现。ItemCF算法跟UserCF算法十分相似,关于UserCF算法的介绍可以参考这篇文章。 https://www.jianshu.com/p/f306a37a7374
3.改进的基于物品的协同过滤推荐算法这种传统的基于物品的协同过滤算法忽略了物品本身之间内在的联系,完全只是依赖于用户-物品矩阵,这无法避免由于用户主观上的偏见所导致推荐精度的偏差.针对上述的问题,本文重新定义了物品相似度的计算方法,该方法加入了对于物品内在之间联系的计算.实验结果证明:本文提出的改进的基于物品的协同过滤算法能在进一步提高了推荐的...https://d.wanfangdata.com.cn/periodical/tjlgxyxb201901006
4.GitHub算法(基于物品的协同过滤算法(ItemCF))设计与实现 基于物品的协同过滤算法主要有两步: 计算物品之间的相似度。 根据物品的相似度和用户的历史行为给用户生成推荐列表。 设N(i)是表示喜欢物品 i 的用户数。N(i)?N(j)表示同时喜欢物品 i 物品 j 的用户数。则物品 i 与物品 j 的相似度为: ...https://github.com/Sicmatr1x/EMAN/
5.机器学习推荐算法之协同过滤(基于物品)案例+代码协同过滤算法(基于物品) 基于用户的协同过滤,适用于物品较少,用户也不太多的情况。如果用户太多,针对每个用户的购买情况来计算哪些用户和他品味类似,效率很低下。 如果商品很多,每个用户购买的商品重合的可能性很小,这样判断品味是否相似也就变得比较困难了。 https://blog.51cto.com/u_15172991/5428305
6.基于物品的协调过滤算法腾讯云开发者社区基于物品的协同过滤算法 (简称ItemCF)给用户推荐那些和他们之前喜欢的物品相似的物品。 比如,该算法会因为你购买过《数据挖掘导论》而给你推荐《机器学习》 。不过, ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度...https://cloud.tencent.com/developer/article/1057554
7.基于用户相似度的随机游走社交网络事件推荐算法协同过滤是推荐领域应用最为广泛的算法[1], 主要包括3种类型:基于用户的协同过滤[2]、基于物品的协同过滤[3]及基于模型的协同过滤[4].基于用户与物品的协同过滤算法通过计算用户或物品之间的相似度完成对目标用户的推荐, 随着用户与物品的增加, 数据稀疏性和冷启动问题制约该算法的推荐质量.矩阵分解是应用最广泛的...https://xuebao.neu.edu.cn/natural/article/html/2019-11-1533.htm