推荐系统实践——什么是推荐系统

什么是推荐系统

学完了机器学习,将自己的研究方向定为推荐系统,然后现在看起了项亮的《推荐系统实践》,决定看完一段就来这里总结记录一下,方便之后复习。第一章主要是对推荐系统进行简介,主要分为推荐系统的定义,应用及推荐系统的评测。


什么是推荐系统

在互联网时代的今天,信息不再是难以获取,而且过载,导致我们常常被大量冗余的信息困扰,无法找到自己想要的,这个时候诞生了一个伟大的发明——搜索引擎,输入你想要的东西的关键词,就能将与之相关的内容列在你的眼前。然而,像我这种周末闲极无聊的渣渣,又没什么特别的兴趣爱好,常常就是不自觉点开淘宝或者微博或者百度,却并没有明确的目的,这时候就希望这些平台能自动过滤我不感兴趣的,多提供点我感兴趣的东西让我打发时间了,而走在人类智慧前沿的GG们就是这么厉害,推荐系统就这么诞生了!并不需要关键词或明确的需求,系统会根据我的历史行为自动分析我的喜好,并主动推荐能够满足我兴趣的信息。

推荐系统是如何工作的

社会化推荐

比如我周六闲着准备看一部电影,我就会问我一个很懂电影的室友,让她给我推荐几部她觉得不错的,这样的推荐是基于我的社交关系。

基于内容的推荐

比如我特别喜欢梁朝伟,我就会去搜梁朝伟曾经演过的电影电视剧来看,比如我喜欢林俊杰,我听歌的时候都会直接搜JJ的专辑,而推荐系统就省去了我主动搜索的过程,直接把我可能感兴趣的内容推荐给我,可以说是相当给力了。

基于协同过滤的推荐

比如我喜欢看言情小说,我一个男同学喜欢看武侠小说,而我室友也喜欢看言情小说,那么我要找小说看的时候,肯定是找我室友看过的书而不是男生的,而这种利用相似兴趣的用户过滤掉不感兴趣的物品的方法就是协同过滤。

从以上推荐的方式可以看出,推荐系统其实就是用某种方法将人与物联系起来。而且,是针对不同兴趣的人给他展示不同特质的物品,这就是:个性化推荐。

个性化推荐系统的应用

书中列举了几种典型的应用场景:电子商务,电影,音乐平台,社交网络,阅读,邮件,基于位置的服务,个性化广告。我们自己一联想平时用到的,淘宝的“有好物”,豆瓣的“发现好电影”,酷狗的“猜你喜欢”等等,都是推荐系统的应用,当然,我一开始看小标题的时候没想到的场景就是基于位置的服务和个性化广告,原来是说基于当前的地理位置再根据你当前的需求推荐合适的店铺等,比如我在西单逛街逛累了想找个电影院歇歇脚,就打开百度地图,点击电影院,就给我推荐附近的电影院并“贴心”地推荐了几部我感兴趣的电影;而个性化广告就跟以上应用有点区别了,以上各种都是想办法给用户推荐可能感兴趣的物品,而个性化广告可以说更多是为广告商服务,是为他们的广告寻找可能感兴趣的用户然后推送广告。

个性化推荐系统的评测

我要记录的重点是关于如何评价一个推荐系统的好坏,不然我设计一个推荐系统,凭什么就说它好用呢?

  1. 用户满意度
    用户满意度可评测推荐系统最重要的指标,一个系统,当然是“大家好,才是真的好”啦。但是用户满意度没办法从直接的数据得到定量的值,一般采用问卷调查的形式,或者是以某些行为定义为“满意”,比如一件商品,用户最终购买了则表示满意。

  2. 预测准确度
    上述用户满意度是需要系统上线之后实时获取的,而预测准确度则可以从离线数据中计算得到,又能度量推荐系统预测用户行为的能力,是最重要的离线评测指标。而预测准确度的指标又分为:
    2.1 评分预测
    平台提供给用户一个打分的功能,然后根据用户的历史行为,预测用户对物品可能的打分。评分预测的预测准确度通过均方根误差(RMSE)和平均绝对误差(MAE)计算。用 rui r u i 表示实际测试集中用户u对物品i的评分,用 rui^ r u i ^ 表示推荐系统预测的用户u对物品i的评分,则

    RMSE=(rui^rui)2|T| R M S E = ∑ ( r u i ^ − r u i ) 2 | T |

    MAE=|rui^rui||T| M A E = ∑ | r u i ^ − r u i | | T |

    2.2 TopN 推荐
    另一种推荐是给用户一个个性化推荐列表,列出其最可能感兴趣的N的物品。TopN 推荐的预测准确率通过准确率(Precision)和召回率(Recall)来计算。令 R(u) R ( u ) 是推荐系统预测之后给用户的推荐列表,令 T(u) T ( u ) 是测试集中用户实际感兴趣的列表,那么有:

    Precision=uU|R(u)T(u)|uU|R(u)| P r e c i s i o n = ∑ u ∈ U | R ( u ) ⋂ T ( u ) | ∑ u ∈ U | R ( u ) |

    Recall=uU|R(u)T(u)|uU|T(u)| R e c a l l = ∑ u ∈ U | R ( u ) ⋂ T ( u ) | ∑ u ∈ U | T ( u ) |

    书中提到,评分预测一直是研究热点,但是评分预测是预测用户看了某部电影或用了某个物品之后会给出的评分,而TopN 推荐是找出用户可能感兴趣的物品,所以TopN推荐实际上更符合应用需求,因为即使用户可能对某个物品给出很高的评分,但是如果他都不看这个,就不存在感兴趣之说了。

  3. 覆盖率
    覆盖率(coverage)主要描述推荐系统对物品长尾的发掘能力。可以用推荐出来的物品占总物品集合的比例来表示。
    coverage=uUR(u)|I| c o v e r a g e = | ⋃ u ∈ U R ( u ) | | I |

    一个好的推荐系统不仅要有较高的用户满意度,也要有较高的覆盖率。但是以上计算较为粗略,即使覆盖率为100%,物品出现的次数也会有无数种分布,其实,可以用推荐列表中不同物品出现次数的分布来表示覆盖率,出现的次数分布比较平,则说明推荐系统发掘长尾的能力强,如果分布比较陡峭,则说明覆盖率低。可以用基尼系数(G)来表示:
    G=1n1j=1n(2jn1)p(ij) G = 1 n − 1 ∑ j = 1 n ( 2 j − n − 1 ) p ( i j )

    其中 ij i j 表示按照物品流行度p从小到大排序的物品列表中的第j个物品。
    图片引自百度图片
    图中曲线表示最不热门的x%物品的总流行度占系统的比例y%,可以看到这条曲线一定在y=x直线之下,而且和y=x相交于(0,0)和(1,1)。令SA是A的面积,SB是B的面积,那么基尼系数就是SA/(SA+SB), 故基尼系数属于区间[0,1]. 如果物品流行度很平均,那么SA就很小,基尼系数就小,如果物品流行度分配不平均,那么SA就大,从而基尼系数就很大。
    推荐系统的初衷是消除马太效应(热门的物品更加热门),使得各种物品都能被展示给可能对它们感兴趣的某一类人群。而评价一个推荐系统是否具有马太效应,是通过计算初始用户行为中物品流行度的基尼系数G1和推荐列表中物品流行度的基尼系数G2来确定的,若G1
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值