干货基于用户的协同过滤推荐算法原理和实现余弦

在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单。该算法1992年提出并用于邮件过滤系统,两年后1994年被GroupLens用于新闻过滤。一直到2000年,该算法都是推荐系统领域最著名的算法。

基本思想

俗话说“物以类聚、人以群分”,拿看电影这个例子来说,如果你喜欢《蝙蝠侠》、《碟中谍》、《星际穿越》、《源代码》等电影,另外有个人也都喜欢这些电影,而且他还喜欢《钢铁侠》,则很有可能你也喜欢《钢铁侠》这部电影。

所以说,当一个用户A需要个性化推荐时,可以先找到和他兴趣相似的用户群体G,然后把G喜欢的、并且A没有听说过的物品推荐给A,这就是基于用户的系统过滤算法。

原理

根据上述基本原理,我们可以将基于用户的协同过滤推荐算法拆分为两个步骤:

1.找到与目标用户兴趣相似的用户集合2.找到这个集合中用户喜欢的、并且目标用户没有听说过的物品推荐给目标用户1.发现兴趣相似的用户

通常用Jaccard公式或者余弦相似度计算两个用户之间的相似度。设N(u)为用户u喜欢的物品集合,N(v)为用户v喜欢的物品集合,那么u和v的相似度是多少呢:

Jaccard公式:

余弦相似度:

假设目前共有4个用户:A、B、C、D;共有5个物品:a、b、c、d、e。用户与物品的关系(用户喜欢物品)如下图所示:

如何一下子计算所有用户之间的相似度呢?为计算方便,通常首先需要建立“物品—用户”的倒排表,如下图所示:

然后对于每个物品,喜欢他的用户,两两之间相同物品加1。例如喜欢物品a的用户有A和B,那么在矩阵中他们两两加1。如下图所示:

计算用户两两之间的相似度,上面的矩阵仅仅代表的是公式的分子部分。以余弦相似度为例,对上图进行进一步计算:

到此,计算用户相似度就大功告成,可以很直观的找到与目标用户兴趣较相似的用户。

2.推荐物品

首先需要从矩阵中找出与目标用户u最相似的K个用户,用集合S(u,K)表示,将S中用户喜欢的物品全部提取出来,并去除u已经喜欢的物品。对于每个候选物品i,用户u对它感兴趣的程度用如下公式计算:

其中rvi表示用户v对i的喜欢程度,在本例中都是为1,在一些需要用户给予评分的推荐系统中,则要代入用户评分。

举个例子,假设我们要给A推荐物品,选取K=3个相似用户,相似用户则是:B、C、D,那么他们喜欢过并且A没有喜欢过的物品有:c、e,那么分别计算p(A,c)和p(A,e):

看样子用户A对c和e的喜欢程度可能是一样的,在真实的推荐系统中,只要按得分排序,取前几个物品就可以了。

园友推荐

1.计算10名与我兴趣最相似的园友

2.计算对推荐园友的兴趣度

这10名相似用户一共推荐了25名园友,计算得到兴趣度并排序:

排序昵称兴趣度1wolfy0.3730019232961262Artech0.3405026123034993CatChen0.3405026123034994WXWinter(冬)0.3405026123034995DanielWise0.3405026123034996一路前行0.315244162495647LiamWang0.315244162495648usharei0.315244162495649CoderZh0.3152441624956410博客园团队0.3152441624956411深蓝色右手0.3152441624956412Kinglee0.3152441624956413Gnie0.3152441624956414riccc0.3152441624956415Braincol0.3152441624956416滴答的雨0.3152441624956417DennisGao0.3152441624956418刘冬.NET0.3152441624956419李永京0.3152441624956420浪端之渡鸟0.3152441624956421李涛0.3152441624956422阿不0.3152441624956423JK_Rush0.3152441624956424xiaotie0.3152441624956425Leepy0.312771621085612

只需要按需要取相似度排名前10名就可以了,不过看起来整个列表的推荐质量都还不错!

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