今天这篇文章,主要是用来给大家解答一个问题,就是关于怎么用Python去实现一个功能,需要用到的算法是MostPopular算法,具体给大家详细的解答下。
推荐系统MostPopular算法的Python实现
MostPopular算法的是指对每个用户都选择出当前流行度最高的Top-K个物品进行推荐,在推荐的时候,需要去除用户原先就浏览过的项目。
算法代码如下
#MostPop defMostPopular(pop_dict,I,K): ''' pop_dic:流行度字典,存储了每个item:pop_value的键值对。 I:用户可以选择的Item空间(需去除已经看过的item) K:Top-K值,推荐出K个item给用户 ''' pop_dict_sort=sorted(pop_dict.items(),key=lambdakv:(kv[1],kv[0]),reverse=True) foreach_iteminpop_dict_sort: ifeach_item[0]notinI: pop_dict_sort.remove(each_item) return[i[0]foriinpop_dict_sort[:K]]
在ML-1M数据集上的测试结果(100个用户)
Precision:0.05399999999999998
Recall:0.0659683173313864
HR:0.08
NDCG:0.2668352016595219
ARP:25.750500000000002
推荐系统的几种常用算法总结
之前也做过一些关于推荐系统的项目,下面就来系统的总结一下。
一、什么是推荐系统?
引用百度百科的一段解释就是:“利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。”
在这个数据过载的时代,信息的消费者需要从海量的信息中找到自己所需要的信息,信息的生产者要让自己生产的信息在海量的信息中脱颖而出,这时推荐系统就应运而生了。对用户而言,推荐系统不需要用户提供明确的目标;对物品而言,推荐系统解决了2/8现象的问题(也叫长尾效应),让小众的物品可以展示到需要它们的用户面前。
二、推荐系统要解决的问题?
1、帮助用户找到想要的物品如:书籍、电影等
2、可以降低信息过载
3、有利于提高站点的点击率/转化率
4、有利于对用户进行深入了解,为用户提供个性化服务
三、推荐系统的发展趋势?
推荐系统的研究大致可以分为三个阶段,第一阶段是基于传统的服务,第二阶段是基于目前的社交网络的服务,第三阶段是即将到来的物联网。
这其中产生了很多基础和重要的算法,例如协同过滤(包括基于用户的和基于物品的)、基于内容的推荐算法、混合式的推荐算法、基于统计理论的推荐算法、基于社交网络信息(关注、被关注、信任、知名度、信誉度等)的过滤推荐算法、群体推荐算法、基于位置的推荐算法。
其中基于邻域的协同过滤推荐算法是推荐系统中最基础、最核心、最重要的算法,该算法不仅在学术界得到较为深入的研究,而且在业界也得到非常广泛的应用,基于邻域的算法主要分为两大类,一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法,除此之外,基于内容的推荐算法应用也非常广泛等等,因此下文将对涉及推荐系统的常用算法进行详细介绍。
1、基于流行度的推荐算法
2、基于协同过滤的推荐算法(UserCF与ItemCF)
3、基于内容的推荐算法
4、基于模型的推荐算法
5、基于混合式的推荐算法
四、基于流行度的推荐算法
基于流行度的算法非常简单粗暴,类似于各大新闻、微博热榜等,根据PV、UV、日均PV或分享率等数据来按某种热度排序来推荐给用户。
注:独立访客(UV)、访问次数(VV)两个指标有什么区别?
①访问次数(VV):记录1天内所有访客访问了该网站多少次,相同的访客有可能多次访问该网站,且访问的次数累加。
②独立访客(UV):记录1天内所有访客访问了该网站多少次,虽然相同访客能多次访问网站,但只计算为1个独立访客。
③PV访问量(PageView):即页面访问量,每打开一次页面或者刷新一次页面,PV值+1。
1、优点:该算法简单,适用于刚注册的新用户
2、缺点:无法针对用户提供个性化的推荐
3、改进:基于该算法可做一些优化,例如加入用户分群的流行度进行排序,通过把热榜上的体育内容优先推荐给体育迷,把政要热文推给热爱谈论政治的用户。
五、基于用户的协同过滤推荐算法
当目标用户需要推荐时,可以先通过兴趣、爱好或行为习惯找到与他相似的其他用户,然后把那些与目标用户相似的用户喜欢的并且目标用户没有浏览过的物品推荐给目标用户。
1、基于用户的CF原理如下:
①分析各个用户对物品的评价,通过浏览记录、购买记录等得到用户的隐性评分;
②根据用户对物品的隐性评分计算得到所有用户之间的相似度;
③选出与目标用户最相似的K个用户;
④将这K个用户隐性评分最高并且目标用户又没有浏览过的物品推荐给目标用户。
2、优点:
①基于用户的协同过滤推荐算法是给目标用户推荐那些和他有共同兴趣的用户喜欢的物品,所以该算法推荐较为社会化,即推荐的物品是与用户兴趣一致的那个群体中的热门物品;
②适于物品比用户多、物品时效性较强的情形,否则计算慢;
③能实现跨领域、惊喜度高的结果。
3、缺点:
①在很多时候,很多用户两两之间的共同评分仅有几个,也即用户之间的重合度并不高,同时仅有的共同打了分的物品,往往是一些很常见的物品,如票房大片、生活必需品;
②用户之间的距离可能变得很快,这种离线算法难以瞬间更新推荐结果;
③推荐结果的个性化较弱、较宽泛。
4、改进:
①两个用户对流行物品的有相似兴趣,丝毫不能说明他们有相似的兴趣,此时要增加惩罚力度;
②如果两个用户同时喜欢了相同的物品,那么可以给这两个用户更高的相似度;
③在描述邻居用户的偏好时,给其最近喜欢的物品较高权重;
④把类似地域用户的行为作为推荐的主要依据。
六、基于物品的协同过滤推荐算法
当一个用户需要个性化推荐时,举个例子由于我之前购买过许嵩的《梦游计》这张专辑,所以会给我推荐《青年晚报》,因为很多其他用户都同时购买了许嵩的这两张专辑。
1、基于物品的CF原理如下:
①分析各个用户对物品的浏览记录;
②依据浏览记录分析得出所有物品之间的相似度;
③对于目标用户评价高的物品,找出与之相似度最高的K个物品;
④将这K个物品中目标用户没有浏览过的物品推荐给目标用户
2、优点:
①基于物品的协同过滤推荐算法则是为目标用户推荐那些和他之前喜欢的物品类似的物品,所以基于物品的协同过滤推荐算法的推荐较为个性,因为推荐的物品一般都满足目标用户的独特兴趣。
②物品之间的距离可能是根据成百上千万的用户的隐性评分计算得出,往往能在一段时间内保持稳定。因此,这种算法可以预先计算距离,其在线部分能更快地生产推荐列表。
③应用最广泛,尤其以电商行业为典型。
④适于用户多、物品少的情形,否则计算慢
⑤推荐精度高,更具个性化
⑥倾向于推荐同类商品
3、缺点:
①不同领域的最热门物品之间经常具有较高的相似度。比如,基于本算法,我们可能会给喜欢听许嵩歌曲的同学推荐汪峰的歌曲,也就是推荐不同领域的畅销作品,这样的推荐结果可能并不是我们想要的。
②在物品冷启动、数据稀疏时效果不佳
③推荐的多样性不足,形成信息闭环
4、改进:
①如果是热门物品,很多人都喜欢,就会接近1,就会造成很多物品都和热门物品相似,此时要增加惩罚力度;
②活跃用户对物品相似度的贡献小于不活跃的用户;
③同一个用户在间隔很短的时间内喜欢的两件商品之间,可以给予更高的相似度;
④在描述目标用户偏好时,给其最近喜欢的商品较高权重;
⑤同一个用户在同一个地域内喜欢的两件商品之间,可以给予更高的相似度。
七、基于内容的推荐算法
协同过滤算法仅仅通过了解用户与物品之间的关系进行推荐,而根本不会考虑到物品本身的属性,而基于内容的算法会考虑到物品本身的属性。
根据用户之前对物品的历史行为,如用户购买过什么物品、对什么物品收藏过、评分过等等,然后再根据计算与这些物品相似的物品,并把它们推荐给用户。例如某用户之前购买过许嵩的《寻宝游戏》,这可以说明该用户可能是一个嵩鼠,这时就可以给该用户推荐一些许嵩的其他专辑或著作。
1、基于内容的推荐算法的原理如下:
①选取一些具有代表性的特征来表示每个物品
②使用用户的历史行为数据分析物品的这些特征,从而学习出用户的喜好特征或兴趣,也即构建用户画像
③通过比较上一步得到的用户画像和待推荐物品的画像(由待推荐物品的特征构成),将具有相关性最大的前K个物品中目标用户没有浏览过的物品推荐给目标用户
2、优点:
①是最直观的算法
②常借助文本相似度计算
③很好地解决冷启动问题,并且也不会囿于热度的限制
3、缺点:
①容易受限于对文本、图像、音视频的内容进行描述的详细程度
②过度专业化(over-specialisation),导致一直推荐给用户内容密切关联的item,而失去了推荐内容的多样性。
③主题过于集中,惊喜度不足
八、基于模型的推荐算法
基于模型的推荐算法会涉及到一些机器学习的方法,如逻辑回归、朴素贝叶斯分类器等。基于模型的算法由于快速、准确,适用于实时性比较高的业务如新闻、广告等,而若是需要这种算法达到更好的效果,则需要人工干预反复的进行属性的组合和筛选,也就是常说的FeatureEngineering。而由于新闻的时效性,系统也需要反复更新线上的数学模型,以适应变化。
九、基于混合式的推荐算法
现实应用中,其实很少有直接用某种算法来做推荐的系统。在一些大的网站如Netflix,就是融合了数十种算法的推荐系统。我们可以通过给不同算法的结果加权重来综合结果,或者是在不同的计算环节中运用不同的算法来混合,达到更贴合自己业务的目的。
十、推荐结果列表处理
1、当推荐算法计算得出推荐结果列表之后,我们往往还需要对结果进行处理。比如当推荐的内容里包含敏感词汇、涉及用户隐私的内容等等,就需要系统将其筛除;
2、若多次推荐后用户依然对某个物品毫无兴趣,就需要将这个物品降低权重,调整排序;
3、有时系统还要考虑话题多样性的问题,同样要在不同话题中筛选内容。
十一、推荐结果评估
当一个推荐算法设计完成后,一般需要用查准率(precision),查全率(recall),点击率(CTR)、转化率(CVR)、停留时间等指标进行评价。
查准率(precision):推荐给用户且用户喜欢的物品在推荐列表中的比重
查全率(recall):推荐给用户且用户喜欢的物品在用户列表中的比重
点击率(CTR):实际点击了的物品/推荐列表中所有的物品
转化率(CVR):购买了的物品/实际点击了的物品
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/127653.html
摘要:上一篇文章指南下一篇文章为在集合上执行基本的聚合任务提供了一些命令。也可以给传递一个查询文档,会计算查询结果的数量对分页显示来说总数非常必要共个,目前显示个。使用时必须指定集合和键。指定要进行分组的集合。 上一篇文章:MongoDB指南---17、MapReduce下一篇文章: MongoDB为在集合上执行基本的聚合任务提供了一些命令。这些命令在聚合框架出现之前就已经存在了,现在(大多...
摘要:上一篇文章指南下一篇文章为在集合上执行基本的聚合任务提供了一些命令。也可以给传递一个查询文档,会计算查询结果的数量对分页显示来说总数非常必要共个,目前显示个。使用时必须指定集合和键。指定要进行分组的集合。 上一篇文章:MongoDB指南---17、MapReduce下一篇文章: MongoDB为在集合上执行基本的聚合任务提供了一些命令。这些命令在聚合框架出现之前就已经存在了,现在(大多...
摘要:其他语言数据结构跟算法一样是在开始写代码的时候用得很少,都有着包装好的现成东西供你使用,但同样是面试和岗位上升会用得到,我就不说数据结构对代码有多少好处,请记住一句话能够实现个功能和能够最优地实现个功能,是完全不同级别的要求。 ...
摘要:大家好,我是一行今天给大家聊聊一行在读研里最成功的投资,那必然是键盘边上的每一本技术书啦毕竟股票基金这种投资即使赚了钱,过段时间就得还回去,非常的神奇但是读过的每一本技术书籍,都内化在手指上了,只要给个键盘,就能给它实 ...
阅读 889·2023-01-14 11:38
阅读 833·2023-01-14 11:04
阅读 684·2023-01-14 10:48
阅读 1887·2023-01-14 10:34
阅读 891·2023-01-14 10:24
阅读 750·2023-01-14 10:18
阅读 479·2023-01-14 10:09
阅读 519·2023-01-14 10:02