推荐算法 订阅
推荐算法是计算机专业中的一种算法,通过一些数学算法,推测出用户可能喜欢的东西,目前应用推荐算法比较好的地方主要是网络,其中淘宝做的比较好。所谓推荐算法就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西。 展开全文
推荐算法是计算机专业中的一种算法,通过一些数学算法,推测出用户可能喜欢的东西,目前应用推荐算法比较好的地方主要是网络,其中淘宝做的比较好。所谓推荐算法就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西。
信息
外文名
recommendation algorithm
分    类
基于内容、协同过滤、关联规则等
中文名
推荐算法
目    的
推测出用户可能喜欢的东西
推荐算法推荐算法起源
个性化推荐概念的首次出现是在1995年3月的美国人工智能协会上,由卡耐基梅隆大学的 Robert Armstrong 等提出了个性化导航系统 Web Watcher。同时,斯坦福大学的Marko balabanovic等也推出了LIRA——一个个性化推荐系统。自此之后,个性化推荐的研究开始蓬勃发展。 [1]  推荐算法的研究起源于20世纪90年代,由美国明尼苏达大学 GroupLens研究小组最先开始研究,他们想要制作一个名为 Movielens的电影推荐系统,从而实现对用户进行电影的个性化推荐。首先研究小组让用户对自己看过的电影进行评分,然后小组对用户评价的结果进行分析,并预测出用户对并未看过的电影的兴趣度,从而向他们推荐从未看过并可能感兴趣的电影。此后, Amazon开始在网站上使用推荐系统,在实际中对用户的浏览购买行为进行分析,尝试对曾经浏览或购买商品的用户进行个性化推荐。根据 enture Beat的统计,这一举措将该网站的销售额提高了35%自此之后,个性化推荐的应用越来越广泛。 [1] 
收起全文
精华内容
下载资源
问答
  • 推荐算法
    万次阅读 多人点赞
    2018-11-23 21:05:42

    推荐算法具有非常多的应用场景和商业价值,因此对推荐算法值得好好研究。推荐算法种类很多,但是目前应用最广泛的应该是协同过滤类别的推荐算法,本文就对协同过滤类别的推荐算法做一个概括总结,后续也会对一些典型的协同过滤推荐算法做原理总结。

    1. 推荐算法概述

        推荐算法是非常古老的,在机器学习还没有兴起的时候就有需求和应用了。概括来说,可以分为以下5种:

        1)基于内容的推荐:这一类一般依赖于自然语言处理NLP的一些知识,通过挖掘文本的TF-IDF特征向量,来得到用户的偏好,进而做推荐。这类推荐算法可以找到用户独特的小众喜好,而且还有较好的解释性。这一类由于需要NLP的基础,本文就不多讲,在后面专门讲NLP的时候再讨论。

        2)协调过滤推荐:本文后面要专门讲的内容。协调过滤是推荐算法中目前最主流的种类,花样繁多,在工业界已经有了很多广泛的应用。它的优点是不需要太多特定领域的知识,可以通过基于统计的机器学习算法来得到较好的推荐效果。最大的优点是工程上容易实现,可以方便应用到产品中。目前绝大多数实际应用的推荐算法都是协同过滤推荐算法。

        3)混合推荐:这个类似我们机器学习中的集成学习,博才众长,通过多个推荐算法的结合,得到一个更好的推荐算法,起到三个臭皮匠顶一个诸葛亮的作用。比如通过建立多个推荐算法的模型,最后用投票法决定最终的推荐结果。混合推荐理论上不会比单一任何一种推荐算法差,但是使用混合推荐,算法复杂度就提高了,在实际应用中有使用,但是并没有单一的协调过滤推荐算法,比如逻辑回归之类的二分类推荐算法广泛。

        4)基于规则的推荐:这类算法常见的比如基于最多用户点击,最多用户浏览等,属于大众型的推荐方法,在目前的大数据时代并不主流。

        5)基于人口统计信息的推荐:这一类是最简单的推荐算法了,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后进行推荐,目前在大型系统中已经较少使用。

    2. 协同过滤推荐概述

        协同过滤(Collaborative Filtering)作为推荐算法中最经典的类型,包括在线的协同和离线的过滤两部分。所谓在线协同,就是通过在线数据找到用户可能喜欢的物品,而离线过滤,则是过滤掉一些不值得推荐的数据,比比如推荐值评分低的数据,或者虽然推荐值高但是用户已经购买的数据。

        协同过滤的模型一般为m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时我们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。

        一般来说,协同过滤推荐分为三种类型。第一种是基于用户(user-based)的协同过滤,第二种是基于项目(item-based)的协同过滤,第三种是基于模型(model based)的协同过滤

        基于用户(user-based)的协同过滤主要考虑的是用户和用户之间的相似度,只要找出相似用户喜欢的物品,并预测目标用户对对应物品的评分,就可以找到评分最高的若干个物品推荐给用户。而基于项目(item-based)的协同过滤和基于用户的协同过滤类似,只不过这时我们转向找到物品和物品之间的相似度,只有找到了目标用户对某些物品的评分,那么我们就可以对相似度高的类似物品进行预测,将评分最高的若干个相似物品推荐给用户。比如你在网上买了一本机器学习相关的书,网站马上会推荐一堆机器学习,大数据相关的书给你,这里就明显用到了基于项目的协同过滤思想。

        我们可以简单比较下基于用户的协同过滤和基于项目的协同过滤:基于用户的协同过滤需要在线找用户和用户之间的相似度关系,计算复杂度肯定会比基于基于项目的协同过滤高。但是可以帮助用户找到新类别的有惊喜的物品。而基于项目的协同过滤,由于考虑的物品的相似性一段时间不会改变,因此可以很容易的离线计算,准确度一般也可以接受,但是推荐的多样性来说,就很难带给用户惊喜了。一般对于小型的推荐系统来说,基于项目的协同过滤肯定是主流。但是如果是大型的推荐系统来说,则可以考虑基于用户的协同过滤,当然更加可以考虑我们的第三种类型,基于模型的协同过滤。

        基于模型(model based)的协同过滤是目前最主流的协同过滤类型了,我们的一大堆机器学习算法也可以在这里找到用武之地。下面我们就重点介绍基于模型的协同过滤。

    3. 基于模型的协同过滤

        基于模型的协同过滤作为目前最主流的协同过滤类型,其相关算法可以写一本书了,当然我们这里主要是对其思想做有一个归类概括。我们的问题是这样的m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时我们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。

        对于这个问题,用机器学习的思想来建模解决,主流的方法可以分为:用关联算法,聚类算法,分类算法,回归算法,矩阵分解,神经网络,图模型以及隐语义模型来解决。下面我们分别加以介绍。

    3.1 用关联算法做协同过滤

        一般我们可以找出用户购买的所有物品数据里频繁出现的项集活序列,来做频繁集挖掘,找到满足支持度阈值的关联物品的频繁N项集或者序列。如果用户购买了频繁N项集或者序列里的部分物品,那么我们可以将频繁项集或序列里的其他物品按一定的评分准则推荐给用户,这个评分准则可以包括支持度,置信度和提升度等。

        常用的关联推荐算法有Apriori,FP Tree和PrefixSpan。如果大家不熟悉这些算法,可以参考我的另外几篇文章:

        Apriori算法原理总结

        FP Tree算法原理总结

        PrefixSpan算法原理总结 

    3.2 用聚类算法做协同过滤

        用聚类算法做协同过滤就和前面的基于用户或者项目的协同过滤有些类似了。我们可以按照用户或者按照物品基于一定的距离度量来进行聚类。如果基于用户聚类,则可以将用户按照一定距离度量方式分成不同的目标人群,将同样目标人群评分高的物品推荐给目标用户。基于物品聚类的话,则是将用户评分高物品的相似同类物品推荐给用户。

        常用的聚类推荐算法有K-Means, BIRCH, DBSCAN和谱聚类,如果大家不熟悉这些算法,可以参考我的另外几篇文章:

        K-Means聚类算法原理

        BIRCH聚类算法原理

        DBSCAN密度聚类算法

        谱聚类(spectral clustering)原理总结

    3.3 用分类算法做协同过滤

        如果我们根据用户评分的高低,将分数分成几段的话,则这个问题变成分类问题。比如最直接的,设置一份评分阈值,评分高于阈值的就是推荐,评分低于阈值就是不推荐,我们将问题变成了一个二分类问题。虽然分类问题的算法多如牛毛,但是目前使用最广泛的是逻辑回归。为啥是逻辑回归而不是看起来更加高大上的比如支持向量机呢?因为逻辑回归的解释性比较强,每个物品是否推荐我们都有一个明确的概率放在这,同时可以对数据的特征做工程化,得到调优的目的。目前逻辑回归做协同过滤在BAT等大厂已经非常成熟了。

        常见的分类推荐算法有逻辑回归和朴素贝叶斯,两者的特点是解释性很强。如果大家不熟悉这些算法,可以参考我的另外几篇文章:

        逻辑回归原理小结

        朴素贝叶斯算法原理小结

    3.4 用回归算法做协同过滤

        用回归算法做协同过滤比分类算法看起来更加的自然。我们的评分可以是一个连续的值而不是离散的值,通过回归模型我们可以得到目标用户对某商品的预测打分。

        常用的回归推荐算法有Ridge回归,回归树和支持向量回归。如果大家不熟悉这些算法,可以参考我的另外几篇文章:

        线性回归原理小结

        决策树算法原理(下)

        支持向量机原理(五)线性支持回归

    3.5 用矩阵分解做协同过滤

        用矩阵分解做协同过滤是目前使用也很广泛的一种方法。由于传统的奇异值分解SVD要求矩阵不能有缺失数据,必须是稠密的,而我们的用户物品评分矩阵是一个很典型的稀疏矩阵,直接使用传统的SVD到协同过滤是比较复杂的。

        目前主流的矩阵分解推荐算法主要是SVD的一些变种,比如FunkSVD,BiasSVD和SVD++。这些算法和传统SVD的最大区别是不再要求将矩阵分解为UΣVTUΣVT的形式,而变是两个低秩矩阵PTQPTQ的乘积形式。对于矩阵分解的推荐算法,后续我会专门开篇来讲。

    3.6 用神经网络做协同过滤

        用神经网络乃至深度学习做协同过滤应该是以后的一个趋势。目前比较主流的用两层神经网络来做推荐算法的是限制玻尔兹曼机(RBM)。在目前的Netflix算法比赛中, RBM算法的表现很牛。当然如果用深层的神经网络来做协同过滤应该会更好,大厂商用深度学习的方法来做协同过滤应该是将来的一个趋势。后续我会专门开篇来讲讲RBM。

    3.7  用图模型做协同过滤

        用图模型做协同过滤,则将用户之间的相似度放到了一个图模型里面去考虑,常用的算法是SimRank系列算法和马尔科夫模型算法。对于SimRank系列算法,它的基本思想是被相似对象引用的两个对象也具有相似性。算法思想有点类似于大名鼎鼎的PageRank。而马尔科夫模型算法当然是基于马尔科夫链了,它的基本思想是基于传导性来找出普通距离度量算法难以找出的相似性。后续我会专门开篇来讲讲SimRank系列算法。 

    3.8 用隐语义模型做协同过滤

        隐语义模型主要是基于NLP的,涉及到对用户行为的语义分析来做评分推荐,主要方法有隐性语义分析LSA和隐含狄利克雷分布LDA,这些等讲NLP的再专门讲。

    4. 协同过滤的一些新方向

        当然推荐算法的变革也在进行中,就算是最火爆的基于逻辑回归推荐算法也在面临被取代。哪些算法可能取代逻辑回归之类的传统协同过滤呢?下面是我的理解:

        a) 基于集成学习的方法和混合推荐:这个和混合推荐也靠在一起了。由于集成学习的成熟,在推荐算法上也有较好的表现。一个可能取代逻辑回归的算法是GBDT。目前GBDT在很多算法比赛都有好的表现,而有工业级的并行化实现类库。

        b)基于矩阵分解的方法:矩阵分解,由于方法简单,一直受到青睐。目前开始渐渐流行的矩阵分解方法有分解机(Factorization Machine)和张量分解(Tensor Factorization)。

        c) 基于深度学习的方法:目前两层的神经网络RBM都已经有非常好的推荐算法效果,而随着深度学习和多层神经网络的兴起,以后可能推荐算法就是深度学习的天下了?目前看最火爆的是基于CNN和RNN的推荐算法。

    5. 协同过滤总结 

        协同过滤作为一种经典的推荐算法种类,在工业界应用广泛,它的优点很多,模型通用性强,不需要太多对应数据领域的专业知识,工程实现简单,效果也不错。这些都是它流行的原因。

        当然,协同过滤也有些难以避免的难题,比如令人头疼的“冷启动”问题,我们没有新用户任何数据的时候,无法较好的为新用户推荐物品。同时也没有考虑情景的差异,比如根据用户所在的场景和用户当前的情绪。当然,也无法得到一些小众的独特喜好,这块是基于内容的推荐比较擅长的。   

        

        以上就是协同过滤推荐算法的一个总结,希望可以帮大家对推荐算法有一个更深的认识,并预祝大家新年快乐!

    (欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com) 

    更多相关内容
  • 购物网站商品推荐算法论文,购物网站商品推荐算法论文
  • 常用推荐算法(50页干货)。常用推荐算法(50页干货)。
  • 推荐算法开源代码库,全部采用java写的,包含70多种推荐算法
  • 推荐算法测试

    2018-05-03 18:03:33
    阿里推荐算法测试,个性化推荐测试,算法阿里推荐算法测试,个性化推荐测试,算法阿里推荐算法测试,个性化推荐测试,算法阿里推荐算法测试,个性化推荐测试,算法
  • 协同过滤推荐算法java实现

    千次下载 热门讨论 2014-05-14 20:55:30
    本资源是推荐系统中最基本且最精但的协同过滤推荐算法实现,包括数据集,以及算法的评价指标MAE的计算,数据集采用MovieLens中两个数据集进行测试,需要别的数据集可以根据自己需要添加,只需修改Base.java文件中的...
  • 一种基于协同过滤推荐算法-K最近邻分类算法的App推荐方法.docx一种基于协同过滤推荐算法-K最近邻分类算法的App推荐方法.docx一种基于协同过滤推荐算法-K最近邻分类算法的App推荐方法.docx一种基于协同过滤推荐算法-K...
  • 推荐算法

    千次阅读 2020-12-07 10:44:39
    在本篇文章中,作者基于自己近10年的大数据与推荐系统项目经验来讲讲我们该怎么入门推荐算法工程师,怎样更容易找一个推荐算法的职位,以及找到相关职位后怎么更快的融入工作。 希望本文对于毕业后想从事推荐算法的...

    在本篇文章中,作者基于自己近10年的大数据与推荐系统项目经验来讲讲我们该怎么入门推荐算法工程师,怎样更容易找一个推荐算法的职位,以及找到相关职位后怎么更快的融入工作。

    希望本文对于毕业后想从事推荐算法的学生以及有工作经验但是准备转行推荐算法的读者提供一些指导。让大家可以轻松应对面试,入职时快速上手。

    本文从我自己的学习成长经历、如何判断自己是否适合从事推荐算法、推荐算法工程师需要的知识储备、怎么找一份合适的推荐算法工作、怎么可以更快的适应工作5个部分来讲解。

    在作者正式介绍怎么入门推荐算法工程师时,先讲讲自己入门推荐算法工程师的经历,可以给大家一些启发和思考。

    作者从零开始学习推荐系统的心路历程

    作者算是从零开始学习推荐系统的。2010年到2011年之间在一家公司做了一年算法工程师,其中有大半年研究了Netflix Prize相关的推荐算法(2006年Netflix公司发起了一次推荐算法竞赛,希望参赛团队可以将Netflix的推荐预测算法的RMSE提升10%,第一个做到的团队将获得100w美元大奖,最终这个奖在3年后的2009年被三个团队的混合算法拿到了),当时用matlab的分布式计算实现了几个推荐算法。算是对推荐系统的初步入门。

    然后2012年9月份加入现在的公司,从零开始搭建大数据平台和推荐系统,一直到现在。虽然之前做过半年的推荐算法研究,但是作者当时对Java编程是零基础,也从未学习过大数据相关技术,对机器学习也不太了解,所有这些都需要从零开始学习。当时公司没有一个人懂大数据与推荐系统,学习难度可想而知。

    好在作者学的是数学专业,自认为数学学得不错,自学能力强。经过自己多年的努力学习和实践,看过大量相关的书和材料,参加过很多线下的分享,通过无数次的掉坑与填坑,边学习、边实践、边总结,最终对大数据与推荐系统有了比较全面深入的了解。

    我自己的整个学习过程是比较曲折的,写作本文及这一系列公众号文章的目的也是想通过自己的经验帮助更多有志于从事推荐系统的读者可以少走弯路,尽快成长起来。

    经过近10年的学习成长,我发现自己还是非常喜欢这个职业的,并且自认为做得还可以。那么是不是推荐算法就没有门槛,所有人都适合从事推荐算法呢?其实是不一定的,要想在这个方向上做得好,是有一定前提条件的。

    如何判断自己是否适合从事推荐算法

    推荐算法工程师对数学、机器学习、编程等技能都有一定的要求,在这些方面是需要有一定基础的。如果想做好推荐算法,还是有一定难度的。如果你这些方面基础还不错,并且对推荐算法也非常感兴趣,那么你将推荐算法作为自己的职业是比较好的选择。

    但是如果你不具备上面这些基础(比如数学基础太差、非常讨厌数学等),但是觉得推荐算法工资高,现在是人工智能时代,推荐算法职位很火,完全凭工资和追热点去选择推荐算法,那么你很难在这个职位上做的好。

    作者强烈建议数学基础需要足够好才更适合做推荐系统,否则很难在这个领域做到足够深,后面肯定会遇到瓶颈的。如果数学基础太差或者非常不喜欢数学,就不要选择推荐算法作为自己的终生职业了。

    推荐系统是一门实用的综合性学科,构建一套完善的、对业务产生价值的推荐系统需要了解很多知识、掌握大量相关技术,并且需要不断思考、不断总结,结合产品的发展和用户的诉求,逐步完善,好的推荐系统不是一天建成的,是一个持续优化和迭代的过程。下面对构建推荐系统需要的知识储备做一个比较全面的说明,方便立志从事推荐系统研发并将推荐系统作为自己事业的读者有一个大致了解,初步指明学习的方向。

    推荐系统推荐算法工程师需要的知识储备

    下面图1是一种可行的推荐系统业务流图,用户通过终端(如手机)访问推荐业务,终端调用推荐系统web服务接口(可能会用CDN加速,同时通过Nginx等web服务做反向代理),推荐接口从推荐结果库中将用户的推荐结果取出来,组装成合适的数据格式再返回用户。从另外一侧,用户在终端上的行为会通过日志收集系统收集到大数据平台,通过ETL处理进入数据仓库,我们构建推荐算法模型为用户生成推荐结果,将推荐结果通过kafka管道存入推荐库中。

    我会结合该图来说明学习推荐系统需要用到哪些技术,需要学习哪些相关知识点。当然,你去一个公司做推荐算法并非一定会接触到下图的所有方面(如果是创业公司,很有可能都会接触,因为创业公司没有这么多资源招聘各个模块的人,一般一个人要顶几个人,所以覆盖的面也会更广,在大公司可能只会接触其中某一个小点)。但是如果你对所有模块有更好的认识和了解,对帮助你形成推荐系统全局认识是大有裨益的

    我们可以将上图中涉及到的知识点分为基本技能、核心技能、补充技能三大块。推荐算法工程师一般也分为偏算法类偏工程类,偏算法类主要是根据产品特性、已有的数据资源设计一个高效可行的算法,也可能会涉及到实现相关算法,而偏工程类主要是推荐算法相关模块编码及推荐支撑模块开发等。

    偏算法类的工程师需要数学基础好,机器学习理论扎实,最好有相关学术经验。偏工程类的需要编程能力强,熟悉软件架构设计、面向对象思想、设计模式等,最好有开发较大工程项目的经验。

    推荐算法工程师的核心技能主要是机器学习相关技术、推荐算法理论、推荐算法工程实现等。数学知识、编程知识、数据结构与算法、数据库、大数据相关知识、英文阅读能力等是基础技能。而产品UI交互、网络协议、web服务、CDN、数据交互协议等属于补充技能

    入门推荐算法工程师,基础技能和核心技能是需要学习的,如算法基础、机器学习相关技术、推荐系统相关常用算法是需要掌握的。但是为了完整性,我将推荐系统涉及到的所有知识点都罗列出来了,其他非必须掌握的知识点读者可以分阶段选择性学习。

    下面我们对推荐系统涉及到的技术和知识点做一个较全面的整理说明,作为大家学习的参考指南。你可以根据刚刚提到的基本技能、核心技能、补充技能等选择性学习。

    数学基础

    数学是一切自然科学的基础,任何自然科学(甚至人文科学)的发展离不开数学的贡献,甚至有人说过一个学科发展的成熟程度与它使用数学知识的深度正相关。

    要想学好推荐算法,是需要具备一定数学基础的,具体需要对如下几个领域的数学知识有所了解。

    我认为只要学好大学的高等数学、线性代数、概率与统计这三门课就足够了,是完全可以应付推荐系统需要的数学储备的。

    离散数学作为计算机系的必修课程,对理解计算机体系结构、更好地理解很多机器学习算法是非常有帮助的。如果你想在推荐上有更深的造诣是需要学习了解的,初学者前期可以不必花很多时间在这门课上。

    a.高等数学

    微积分是整个高等数学的核心,现代科技的发展得益于微积分的发明,它让整个高等数学知识在工程科技领域得到非常广泛的运用,大大促进了自然科学和工程学科的发展壮大。机器学习是计算机与数学的交叉学科,当然也离不开高等数学。

    推荐模型(甚至绝大多数机器学习算法模型)其实最终可以归结为一个最优化问题。简单来说,最优化问题就是求函数极值的问题,需要利用各种数学技术来求解模型的最优参数,常用的有极大似然估计,梯度下降算法等。

    深度学习的激活函数、机器学习模型的目标函数的性质我们需要了解,需要计算梯度来逐步迭代求解最优解,这些都涉及到微积分相关知识。

    另外,关于算法的时间空间复杂度(比如归并排序的时间复杂度是O(nlogn))等都需要用高等数学无穷小的形式来描述。

    我们需要掌握的高等数学知识主要有初等函数的基本性质、极限、积分、微分、求极值、无穷小量等。

    b. 线性代数

    矩阵运算是非常简洁高效的一种数学运算。如果用矩阵来描述线性方程组是非常简单的(Ax=b,A是系数矩阵,b是数值向量,x是未知向量),有很多机器学习算法都利用了矩阵相关知识,如奇异值分解、降维方法等。矩阵运算非常适合在GPU等现代芯片架构上做并行处理。

    推荐系统中比较出名的利用矩阵运算的算法是矩阵分解算法,深度学习中从一层到下一层的信息传递本质上就是矩阵乘法。计算相似度的余弦相似计算也需要利用向量的内积运算。

    我们需要掌握矩阵及向量相关运算、解线性方程、正交性、特征值、特征向量等基本知识点。

    c.概率统计

    用于模型训练的样本可以看成是从满足某个概率分布中的一次抽样,基于该观点,任何一个推荐算法可以看成是一个概率估计问题。很多机器学习问题可以采用概率的思想来解释,最后通过极大似然估计相关参数。

    很多推荐算法可以利用概率的思想来建模,推荐系统的navie bayes方法就是一种简单的利用概率方法来做推荐的算法。我们也可以将推荐系统看成是二分类问题,可以将用户是否喜欢某个标的物看成一个概率,概率值的大小代表用户喜欢的程度,从而可以用logistic回归来做推荐。贝叶斯估计也是常用的概率估计方法,在推荐系统中得到了大量的使用,比如主题模型。

    我们需要掌握什么是概率、概率的计算、频率与概率的关系、常用分布、贝叶斯公式、极大似然估计、先验估计、概率密度函数、均值、方差、样本、抽样、置信度、置信区间等相关概率统计知识。

    d. 离散数学

    学计算机专业的同学本科时必学的一门课程是离散数学,包括的内容有集合论、图论、代数结构、组合数学、数理逻辑等部分。

    计算机运算本质上就是布尔代数,通过二进制数来解决所有计算问题。深度学习的神经网络模型其实就是一种有向图的结构,像滴滴打车为司机寻找最短路径到达目的地其实是图的最短路径问题。机器学习的维度灾难就是一种组合爆炸。

    对于这部分的理解有助于大家更好的理解计算机体系结构及相关算法原理。

    机器学习

    推荐系统是机器学习的一个分支,主要是解决为海量用户推荐标的物的问题,可以将推荐系统看成是一个监督学习问题。机器学习中的各种算法都可以用于推荐系统中,比如回归、聚类、奇异值分解、深度学习、强化学习、迁移学习等。

    对传统机器学习算法有深入的了解和掌握,对学好推荐系统,对推荐系统算法的深刻理解非常有帮助。常用的聚类、分类、回归、集成学习需要有较好的掌握。

    另外,对于机器学习的一些基本概念和相关知识点,如训练集、测试集、验证集、模型训练、模型推断、特征工程、模型效果评估等要有所了解和掌握。这些是构建推荐算法模型过程中一定会涉及到的概念和知识点。

    推荐系统

    既然是入门推荐算法工程师,当然需要对推荐算法有所了解了。首先,需要知道推荐系统是一种解决信息过载的技术手段,知道在什么场景下需要推荐算法、什么场景不需要推荐算法、推荐算法会面临哪些挑战、推荐算法在工业界的应用场景等。

    推荐系统常用的算法有基于内容的推荐和协同过滤推荐(包括基于用户的协同过滤和基于物品的协同过滤)。对这两类算法要有比较好的理解,能够说清楚算法原理,能够大致推导这些算法的实现方案。同时,也需要知道怎么评估推荐算法的好坏,有哪些衡量推荐算法质量的指标,这些指标是怎么计算的,怎么解决推荐系统冷启动问题等。

    最好可以基于一些开源的数据集,采用第三方开源机器学习框架,自己能够独立实现这些算法,这样你会理解比较深刻。

    编程能力

    推荐算法工程师除了设计算法外,可能需要将算法付诸实践,自己实现算法,即使是利用现有的算法框架做推荐,在处理数据、模型训练、模型推断等阶段也需要动手编程。所以,推荐算法工程师一定需要有一定的编程基础。

    在工业界最常用的编程语言是Java语言,Java有非常成熟的生态系统,并且推荐系统前期数据处理是需要依赖大数据技术的,而大数据技术基本是基于Java(或者基于JVM的Scala语言)生态系统的。所以掌握Java/Scala开发是可以帮助你快速熟悉掌握各类大数据开源技术的。

    随着深度学习驱动的第三次人工智能浪潮的到来,出现了越来越多的深度学习框架,如Tensorflow、Pytorch、MxNet等等,这些框架基本是采用python语言来跟用户交互的(底层是用C++写的),间接促使Python语言火爆起来。Python作为一个较古老的编程语言,生态相对丰富,易于学习,并且Python有非常成熟的数据处理分析库及流行的机器学习框架scikit-learn。

    作为推荐算法工程师,熟悉Java/Scala、Python两类编程语言基本就够了。

    数据结构与算法

    上面一节提到了做推荐算法需要掌握编程技能,任何类型的编程都或多或少会涉及到一些数据结构与算法。我们需要了解常用的数据结构,比如集合、列表、哈希、链表等。常用的排序算法等肯定是需要掌握的。同时要对算法的时间复杂度和空间复杂度要有一定的了解。布隆过滤器,压缩算法,加密算法等更高深的算法也需要有所了解,知道他们可以解决哪些问题,在需要的时候可以通过搜索相关材料快速学习。

    工程技能

    推荐算法的实现也需要考虑很多工程问题,数据处理平台采用什么,用什么编程语言,推荐结果存储在哪里,推荐结果怎么给到用户,这些问题都需要很好的工程实现。

    随着用户规模的扩大,数据量越来越大,处理数据和训练推荐模型花的时间越来越长,怎么有效的处理大规模数据和并发计算是摆在大家面前的棘手问题。

    用户访问推荐页面是否有延迟,是否会开天窗,怎么应对开天窗,怎么缩短访问时长,怎么提升推荐服务的并发能力,这些问题都需要结合工程的知识和行业经验来改善和优化。

    怎么设计一套高效的推荐算法组件,让整个团队开发效率更高,更容易将推荐算法落地到实际产品中,怎么在算法精准度、效率、计算复杂度上做平衡是一种工程实现的哲学

    总之,你需要有足够多的工程实践经验,才可以设计一套高效易用的、有业务价值的推荐算法体系。

    大数据相关开源技术

    推荐系统是一个系统性工程,从上面图1可以知道,要搭建一个稳定有效的推荐系统还是相当复杂的,涉及到很多知识。toC互联网产品是构建在规模用户基础上的生意,好的toC互联网产品一定是服务于大量用户的,大量用户的行为会产生海量数据,这时大数据相关技术就有了用武之地。

    幸好随着互联网和信息技术的发展,随着开源技术的流行和开源社区的壮大,出现了很多优秀的开源框架,如Hadoop、Spark、Flink、Tensorflow、Pytorch等,这些框架是我们构建工业级推荐系统的基石,下面我对推荐系统需要用到的一些开源技术做一些简单介绍,方便大家了解熟悉,基于这些开源技术是非常容易构建一套推荐系统的。

    a. 数据收集系统  

    构建推荐算法模型需要依赖用户行为数据等各类数据,而这些数据来源于用户在客户端的操作,所以我们需要将这些操作日志“运输”到数据中心,这个过程就是数据收集。

    大数据生态系统中常用的收集转运数据的组件有flume、kafka等。当我们将所有需要的数据收集到数据中心存下来后就可以进行处理、训练、构建推荐算法模型了。

    b. 数据存储系统  

     通过上面收集到的数据后,我们需要将数据存下来。由于互联网公司数据量很大,单台服务器一般存不下,这时就需要利用分布式数据存储技术,因此Hadoop的HDFS分布式文件系统就派上用场了。HDFS可以横向扩容,具备数据读取等常用文件操作,并且每个数据块可以保留多份副本,即使一台服务器坏了也不会丢失数据,安全可靠性极高。

    在做数据分析时,我们需要更好的存储、获取、处理数据,我们一般将数据采用Parquet的数据格式存储,Parquet是基于Hadoop生态之上的一种列式数据存储格式,不管采用Hadoop生态上的什么分析组件,不管什么数据模型及编程语言,Parquet格式都可以轻松应对。Parquet对数据有比较好的压缩,可以极大减少存储资源的消耗。

    另外,随着公司数据的增大,业务规模的扩大,我们会从更多的维度对数据进行分析处理,这时就有必要构建一套完善的数据仓库了,大数据社区构建数仓的组件主要有Hive和HBase。Hive是基于关系型数据库查询语言SQL的结构化数据存储组件,Hive采用表的形式存储结构化数据,利用SQL查询,非常适合批处理的数据分析形式。如果你需要对数据进行实时的分析处理,可以将数据存到HBase上,它是一种列式数据存储组件。

    c. 数据分析系统

    随着Google在2003发表了3篇划时代意思的论文(见参考文献1,2,3),大数据逐步从萌芽到繁荣壮大,这其中最重要的大数据技术当属2006年启动的Hadoop工程,Hadoop包含HDFS和MapReduce两个组件,HDFS用于存储海量数据,可以利用廉价的服务器构建分布式集群,方便存储大量数据,并且数据有很好的容错性。而MapReduce是一个基于HDFS之上的数据分析组件。经常十几年的发展,围绕Hadoop形成了一套完善的大数据生态系统,正式Hadoop生态系统引爆了大数据浪潮。

    后续陆续出现的Spark、Flink等基于Hadoop之上的数据分析软件,拓展了大数据分析的能力,这些软件的发展也壮大了整个大数据生态系统。Spark、Flink上有非常多的算子操作,同时也有相关机器学习库(Spark的mllib机器学习库包括ALS推荐算法),这些算法和库方便我们构建各种推荐模型。

    其他支撑技术

    除了上面提到的技能点外,我们还需要对下面的一些知识有所了解。这些技能点有些是构建完备的推荐系统必不可少的部分,有些是支撑推荐系统服务更好运转的基础能力

    a. 数据库

    在推荐系统架构中,需要将为用户生成的推荐结果存入数据库中,方便web服务提取推荐结果返回给用户,而业界主要有关系型数据库和NoSQL数据库两大类。

    关系型数据库是最早被大量使用的数据库,在整个互联网发展史上占有非常重要的地位,大量用于各类公司作为最核心的数据存储(如交易数据、用户注册信息等)。关系型数据库最大的特点是采用行列的形式存储数据,类似二维的电子表格,现实生活中非常多的数据都可以抽象为这种表格的形式。从这些表格数据中操作数据(增删改查)采用SQL语言,它简单易学,非常高效。目前比较火的开源关系型数据库有MySQL和ProgreSQL等。

    推荐系统虽然不直接利用关系型数据库作为最终推荐结果的存储,但是推荐的标的物相关的信息、用户相关的信息等基本会存放在关系型数据库中,推荐算法工程师至少需要了解熟悉一种关系型数据库,并且需要熟练使用SQL语言

    推荐系统每天(甚至是每分钟或者每秒)需要为每个用户计算推荐结果,如果用户量大的话,将这些推荐结果插入数据库是一个非常频繁的读写操作,采用关系型数据库是非常不合适的,这时NoSQL就派上用场了。NoSQL采用key-value的形式存储数据,是非常适合用于存储用户的推荐结果的,key就是用户的id,value就是为用户的推荐结果。非常流行的NoSQL如CouchBase, Redis等都适合做推荐的结果存储,他们读写都是非常高效的,并且可以横向扩容。我们公司的推荐结果存储就是采用的这两个NoSQL数据库。

    b. 操作系统

    除了微软体系外,整个互联网行业的基础架构基本是构建在Linux操作系统之上的,推荐系统的任务调度、任务监控等都是部署在linux服务器上,所以作为推荐算法工程师是需要熟悉linux操作系统的。常用的磁盘、内存、核、进程、网络、文件目录结构、基础命令等常用操作是必须熟练掌握的。

    c. 网络

    推荐系统的结果需要存到数据库,用户访问推荐服务时需要从数据库中将推荐结果取出来,这个过程中都会涉及到数据在网络上的传输,因此需要对网络延迟、网络传输等过程有所了解。同时数据传输遵守网络协议,我们需要对http、https、tcp等网络协议有所了解。为了加速用户获取推荐结果,让用户体验更好,一般互联网公司都会通过CDN来加速用户查询过程,对CDN技术也需要有所了解。

    d. 互联网上常用的数据交互协议

    像 json,xml,protobuf,Avro等常用的数据交互和序列化协议需要大家熟悉。特别是json,可读性强,很多互联网公司采用json格式来作为数据交互的协议,大量用于数据接口中。

    e. Web服务

    从上面图1可以知道,用户获取推荐数据,需要通过web服务模块,该模块的作用是通过从推荐结果数据库中将用户的推荐结果取出来,组装成合适的格式返回给用户。

    常用的web服务组件有基于java语言的Tomcat,基于go语言的gin、Beego,以及基于python语言的Flask等等。如果你的工作中涉及到为推荐业务开发接口,就需要对这块熟悉,否则只要知道即可。

    f. AB测试与指标体系

    前面讲过推荐算法是一个逐步迭代优化的过程,我们需要根据公司业务场景构建一套完善的指标体系,搭建一套好用的AB测试平台来评估推荐算法的好坏及对业务的价值,通过不断优化迭代,让推荐算法朝着驱动公司业务发展的方向前进。

    作为一个推荐算法工程师,在平时工作中是会经常接触到这两块的,因此是有义务也是有必要对这两块知识点有所了解的。由于这两块比较偏业务,初学者提前知道就可以了,未来在需要的时候希望可以针对性地学习。

    实践(项目)经验

    在你准备找一个推荐算法工作时,如果你有推荐或者机器学习相关项目经验,简历是更容易被选中,有更多面试机会的。我建议可以参加一些推荐或者机器学习的竞赛,比如阿里的天池竞赛。通过竞赛可以提前接触工业级的数据,提前熟悉整个算法的流程,对个人学习成长是非常有帮助的。

    当然,如果你还没有毕业,在实验室做过相关项目,或者找一份相关的实习锻炼一下,对找到相关的职位也是非常有帮助的。有相关的项目经验,也会让你在入职时更容易上手。

    产品与交互

    产品是推荐系统价值呈现的载体。用户通过使用产品中推荐模块,获得推荐结果。所以推荐系统怎么和用户交互,操作是否便捷流畅,这些因素都会影响推荐系统的最终效果。往往好的UI及交互方式产生的价值比好的算法还大。

    推荐算法工程师对UI展示与交互逻辑需要有一定的了解,虽然不必对这块了解太深入,知道一些基本的交互和展示逻辑有助于更好的理解推荐业务,并通过适当的算法逻辑来满足特定的UI交互。

    英文文献阅读能力

    目前关于推荐系统、机器学习等计算机相关书本及学习资料,比较好的还是国外的。遇到复杂的问题,自己搞不定,也需要去google上搜索解决方案的。好的开源项目也基本是国外的,参考学习材料都是英文的。平时学习参考相关专业论文,也基本是英文的。因此为了让自己的能力得到更大的提升,需要具备读懂英文原版材料或者书籍的能力。

    英文看起来比较难的就是一些专业的词汇,我建议可以尝试先看英文的,遇到不懂的单词查查,当你看完弄懂3本以上的英文参考书时,基本就具备阅读计算机行业英文文献的能力了。

    至此,推荐算法工程师需要的知识储备基本讲完了,我们在下表中对相关知识点及比较好的学习资源做了一个归类整理,方便大家参考。

    类别

    知识点

    学习材料

    掌握程度

    数学基础

    高等数学

    本科《高等数学》教材,如同济大学版

    对基本概念、原理要比较熟悉

    线性代数

    本科《线性代数》教材,如同济大学版

    概率与统计

    本科《概率论与数理统计》教材,如浙大版

    离散数学

    如,普通高等教育"十一五"国家级规划教材:离散数学(第2版)

    机器学习

    监督学习

    无监督学习

    周志华的《机器学习》西瓜书

    李航的《统计学习方法》

    必须掌握常用监督与无监督算法

    推荐系统

    推荐系统解决什么问题

    什么时候需要推荐系统

    推荐系统常用算法

    怎么评估推荐系统

    推荐系统冷启动

    项亮的《推荐系统实践》

    《推荐系统:技术、评估及高效算法》(原书第2版)

     

    熟悉基于内容的推荐算法和协同过滤算法原理,并会公式推导

    编程能力

    Java/Scala,Python

    熟悉面向对象编程

    《计算机科学丛书:Java语言程序设计(基础篇)》

    《Learning  Scala》

    《Python学习手册》(第4版)

    有较好的编程能力

    数据结构与算法

    常用数据结构

    常用算法

     

    图灵程序设计丛书:算法(第4版)

     

    熟悉集合、列表、链表、哈希等数据结构

    熟悉排序等常用算法

    了解算法时间空间复杂度

    工程技能

    熟悉常用设计模式

    Head  First设计模式(中文版)

     

    掌握常用设计模式

    多读一些优秀开源软件源码,如Hadoop、Spark、Flink源码等

    大数据相关技术

    数据收集

    熟悉flume、Kafka等

    了解常用API,会使用即可

    数据存储系统

    熟悉HDFS、Parquet、Hive、HBase等

    熟悉常用API,会使用

    数据分析系统

    熟悉Hadoop、Spark、Flink等

    Spark、Flink是非常火的两个数据分析平台,需要较熟悉,会利用他们来做数据分析处理,并且他们都有相关的机器学习组件

    其他支撑技术

    数据库

    熟悉Mysql、Redis、CouchBase等数据库

    了解基本原理,会进行数据的crud操作[增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)]

    操作系统

    鸟哥的Linux私房菜:基础学习篇(第四版)

    熟悉linux操作系统常用操作

    网络

    熟悉http、https、tcp等网络协议,对CDN有所了解

    需要有基本的了解即可

    数据交互协议

    熟悉json,xml,protobuf,Avro等协议

    特别是json和xml是需要了解的,会利用相关包进行处理

    protobuf,Avro了解即可

    web服务

    熟悉tomcat、gin、beego、Flask等web服务框架

    建议可以学习一下Flask,比较容易上手

    怎么找一份合适的推荐算法工程师的工作

    如果你已经对上面介绍的技能有比较好的了解和掌握了,就可以尝试找一份推荐算法工程师的工作了。下面这些点是你在找工作之前及找工作过程中必须要思考关注的。

    自己的诉求是什么

    如果你刚毕业想找一份推荐算法工程师的工作,我觉得你一定要将是否能够学习成长作为自己最重要的诉求,不要太在乎短期薪资,成长性比薪资更重要。我知道很多同学之间是会比较offer的,如果别人成绩比你差但是找到的工作薪资比你高,你肯定会有一些不爽的,但是最好还是不要放在心上,不要跟别人做比较。人生是一场长跑,不要太在乎短期的利益,成长性比短期薪资更重要,一定要有这种意识。当你努力几年后有了真正的成长,往往薪资是有一个非常大的跳跃式增长的。

    如果你已经工作了好几年,是中途转推荐算法工程师,也要有一定的心里预期,可能给你的工资会比原来工资低。如果你能力足够强,在努力工作两三年后,工资一定会大幅反弹的。如果你一定要找推荐算法工程师并且还要薪资比原来高,我敢肯定你不容易找到。从用人单位的角度考虑,你工作了几年工资相对高,之前也没做过推荐算法,凭什么要你啊,还不如招聘一个刚毕业的大学生呢。

    找什么公司什么行业

    推荐算法工程师一般是互联网行业才会有的职位,或者传统行业的子公司及创新部门也会有相关的职位招聘。所以如果找推荐算法工程师,基本需要在互联网行业找,下面给出了主流的互联网行业类别及有代表性的公司,方便大家选择参考。

    互联网公司种类很多,具体有如下几大主流类别

    电商类(如阿里,京东,拼多多等),搜索类(如百度、搜狗等),社交类(如微信、脉脉等),视频类(爱奇艺,腾讯视频等),广告类(阿里妈妈、腾讯广点通等),互联网金融类(陆金所,蚂蚁金服等),生活服务类(携程、美团、滴滴等),娱乐休闲类(游戏公司、网易云音乐等),新闻短视频类(头条、快手等),知识社区类(如知乎,豆瓣等),互联网医疗(如平安好医生、丁香园等),云计算(阿里云,七牛,Ucloud等),互联网教育(vipkids,英语流利说等),大数据与AI类(科大讯飞,出门问问,第四范式,face++等),招聘类(51job,boss直聘等),硬件类(地平线,小米等)等等。

    大家可以结合自己的专业背景及偏好选择,我个人比较看好云计算、互联网教育、大数据与AI类垂直创业公司,未来成长空间大。

    另外,关于是选择大公司还是小公司的问题,相信很多读者都在其他地方看到过对这个问题的解读,大公司做螺丝钉,但是文化制度相对健全,小公司接触面广,可以承担更大的责任,但是流程制度比较缺失。如果是大公司的核心部门肯定去大公司好,可以接触到的技术更先进,往往资源也比较多,去大公司的边缘部门个人觉得没啥意思。如果选择小公司,一定要选择成长型的创业公司,在面试时多跟公司创始人沟通交流,对该公司的行业及创始人的性格特点有较深入的了解。理想比较远大,格局大,有想法的创始人更容易成功。该公司从事的行业也必须是与大众生活息息相关(衣食住行等)的必须产业,不能太小众,否则成长性不大。

    怎么写简历投简历

    我见过很多候选人,简历写得毫无特色。写简历一定要突出自己的优势和核心技能及相关项目经验。这块需要写在比较靠前的地方,并且需要写的非常清晰细致。如果自己核心技能比较缺,可以多学习,特别是项目经验,很多公司是很看重的,如果没有可以提前找一个相关的实习职位实习一段时间或者参加一些竞赛。

    对于应届毕业生,简历可以按照“基本信息,学校专业,所获奖励,核心技能,项目经验,个性特长”的顺序写简历(学校较好的,可以将学校专业放到前面,学校很一般可以将学校专业放到项目经验之后),对于已经工作的可以按照“基本信息,核心技能,项目经验,学校专业,个性特长”的顺序来写简历。之所以按照这个顺序,是因为,对于应届生,用人单位往往比较看重学校专业,而对于已经工作过的候选人,用人单位更在乎的是你的核心技能和项目经验。这里再提一下,这些只是一些写简历的技巧,简历写得好虽然可以增加你面试的概率,但是能不能面试得上,还是要靠自己真本事的。

    另外,真诚是做人的第一准则,简历需要保证真实,不要写一些假的项目或者经历。如果简历都伪造,那公司怎么相信你,公司如果知道了,即使入职了,被辞退的可能性也是非常大的。

    简历投放的渠道有很多,校园招聘,招聘网站,内推等等,拉勾网、boss直聘、51job等是比较出名的网站。

    确定了自己喜欢什么行业什么类型的公司了,就比较好投简历了。具体投哪家公司时,需要仔细看jd(工作描述),了解清楚用人单位的需求点是否跟自己匹配,如果有一些能够匹配上,我觉得就可以投了,完全匹配的上是不可能的。如果一点都不匹配我建议不要投,这是浪费大家时间。我也不建议海投简历,海投是对自己和用人单位的不负责

    怎么面试

    简历准备好后,需要对自己简历上的内容非常熟悉,特别是简历的中提到的知识点,需要了然于心,包括相关的概念,算法,项目等。对于算法,需要了解基本原理,并且最好可以推导相关公式和算法。对于项目的实现方案,优缺点,项目中自己负责哪块,是怎么做的,是否遇到了困难,怎么解决的,最终效果,是否有优化的方案等等都需要知道。

    面试前最好自己提前排练几次,可以让关系好的朋友当面试官,将排练过程录下来,让朋友多提建议,反复琢磨,回答问题的时间节奏,语气,语速,逻辑性等需要控制好。

    另外,好好琢磨一下自我介绍,基本所有的面试官都会让你介绍一下自己的,自我介绍要突出自己的优势特长,简洁干练,不要拖泥带水,最好控制在3-5分钟之间。很多面试官喜欢问你的优缺点,优点大家可以讲一堆,但是缺点,很多人想了很久都答不上来。

    有一个理论是说如果你在前几分钟没有给别人留下好的印象,那么你基本就没有机会了,营销学有一个很有名的电梯测验,说的是在乘电梯的30秒内清晰准确地向客户解释清楚解决方案,这也说明了在短时间内给别人留下印象的重要性

    从面试官的角度来说,希望候选人沟通能力较强,在自我介绍阶段能够抓住重点,突出自己的能力特长,给面试官留下好印象。

    现场面试时 ,尽量提前规划好路线,预估时间,尽量提前15分钟到场,最好不要迟到。衣着得体,礼貌沟通。在面试交谈过程中,学会聆听,不要抢话,理解清楚再作答。在面试过程中思路要开阔,应变能力强,对于任何问题,即使自己不太会,也要给出自己的理解和思考

    面试完成后,可以主动询问面试结果,有很多公司流程很长,还有绝大部分公司觉得你不合适就不给反馈的。自己主动了解会更好一些,自己掌控节奏。

    面试过程可能会遇到挫折,面试不上,不要泄气,多总结反思,针对自己不足的点,补充学习。一定要保持良好的心态,持续努力,一定会有收获的。

    可能遇到的坑

    前年李文星遇害案,充分说明了招聘网站上,有很多不法分子利用漏洞来做坏事,所以在去一个不是很知名的公司面试时需要查一下这个公司的背景,对公司的合法性做验证,看是否有负面新闻,一来保证自己的安全,二来可以侧面了解这个公司的情况,比如融资情况,股东情况,专利情况等等。这类可以查询企业情况的APP有“企查查”和“天眼查”,百度和知乎上也可以提前搜索了解。

    另外,一个可能遇到的坑是公司不按照法律的规定缴纳社保、五险一金等,不过由于今年税制改革这种情况会好些,大家最好选择规范合法的公司。

    还有,公司可能承若给你的职位,真正入职时却分配的是另外一个职位,这种情况确实无法完全避免。不过入职前需要跟面试官确认一下工作内容,以及目前团队情况,负责哪些业务,还需要在各种渠道了解一下这个部门相关的情况。做一个比较细致的了解,可以帮助你判断降低这种事情出现的概率。

    怎么更快地适应工作

    当你通过自己努力找到了一份还算不错的推荐算法工程师的工作后,就需要尽快熟悉业务,让自己尽快上手。下面提供一些参考点帮助你更快的适应工作。

    平时除了自己自学,完成领导布置的任务外,遇到实在不懂的问题需要多向同事请教,不要什么问题都不问,也不要过度依赖别人,在自己解决问题和问别人之间做好平衡。自己搞不定的问题,可以多百度,Google,知乎等搜索解决方案,需要有自己独立思考独立解决问题的能力。公司的wiki等文档系统可以多看看,从中了解公司的业务。另外,相关的源代码自己下去多读读,多学习

    平时跟同事保持良好的沟通交流,自己主动点,跟同事一起吃饭,一起聊天,尽快融入氛围,切记一个人搞自己的,这样很容易被孤立。

    平时多做事,主动问一个组的同事,是否有事情需要帮忙,刚入职时,自己辛苦一下,多承担一些,可以更多的获得同事的信任。

    养成良好的编码习惯,多注释,多总结,利用空余时间多学习与工作相关的技能,比如你只做推荐模型的特征提取这块,需要多学习这方面的技术,在网上搜集其他公司是怎么做的,学术上是怎么做的,保持对这块的持续关注和学习。

    认真对待领导交给你的每一件事,不光将每件事做完,更应该做好,做到极致,通过一段时间的磨砺,你的能力一定会得到提升,做出成果了也会受到领导的认可,从而更容易转正,更容易得到重用。

    除了认真完成领导交代的工作,学习相关专业技能外,还需要在工作中有意培养自己的软实力,比较重要的软实力有:沟通协调能力、长远规划能力、目标导向、是否能够把握问题的重点、自制力、执行力等等。在刚工作时可能不觉得这些软实力重要,但是当你工作越久、职位越高,这些能力会越重要,甚至起到决定性的作用。

    当你能够完全应付工作时,走上正轨后,除了在自己做的这块逐渐深入学习了解,同时需要对整个推荐业务流(即上面图1涉及到的各个方面)做学习了解,形成自己整体的认知能力。剩下的时间就是你跟着公司业务发展一起成长了,你可以参考我写的另外一篇《推荐算法工程师的成长之道》了解该怎么学习成长。

    写在最后

    至此,作者结合自己的亲身经历及思考写完了怎么入门推荐算法工程师,希望这份指南可以帮助你更好地入门,帮助你做好准备,找到一份推荐算法工程师的工作并且快速融入工作中。

     

    参考文献:

    1.《The Google File System》    

    2.《MapReduce: Simplified Data Processing on Large Clusters》

    3.《Bigtable: A Distributed Storage System for Structured Data》

    展开全文
  • 推荐算法架构1:召回

    千次阅读 多人点赞 2022-02-19 20:17:14
    1 推荐算法总体架构 1.1 推荐算法意义 随着互联网近十年来的大力发展,用户规模和内容规模均呈现迅猛发展。用户侧日活过亿早已不是什么新鲜事,内容侧由于UGC生产方式的普及,拥有几十亿内容库的平台也屡见不鲜。...

    系列文章,请多关注

    推荐算法架构1:召回

    推荐算法架构2:粗排

    推荐算法架构3:精排

    推荐算法架构4:重排

    1 推荐算法总体架构

    1.1 推荐算法意义

    随着互联网近十年来的大力发展,用户规模和内容规模均呈现迅猛发展。用户侧日活过亿早已不是什么新鲜事,内容侧由于UGC生产方式的普及,拥有几十亿内容库的平台也屡见不鲜。如何让海量用户在海量内容中找到自己喜欢的,以及如何让海量内容被海量用户精准消费,一直以来都是每个公司十分核心的问题。在这个背景下,搜索系统和推荐系统应运而生。搜索系统主要解决用户寻找感兴趣的内容,偏主动型消费。推荐系统则主要解决内容推送给合适用户,偏被动型消费。二者一边牵引用户,一边牵引内容,是实现用户与内容匹配的中间媒介。推荐系统在每个公司都是十分核心的地位,其意义主要有

    1. 用户侧,为用户及时精准的推送感兴趣的个性化内容,并不断发现和培养用户的潜在兴趣,满足用户消费需求,提升用户体验,从而提升用户活跃度和留存。
    2. 内容侧,作为流量分发平台,对生产者(如UGC作者、电商卖家等)有正向反馈刺激能力,通过扶持有潜力的中小生产者,可以促进整体内容生态的繁荣发展
    3. 平台侧,推荐系统对内容分发的流量和效率都至关重要。通过提升用户体验,可提升用户留存,从而提升日活。通过提升用户转化和流量效率,可提升电商平台订单量和内容平台用户人均时长等核心指标。通过提升用户消费深度,可提升平台整体流量,为商业化目标(如广告)打下基础,提升ARPU(每用户平均收入)等核心指标。推荐系统与公司很多核心指标息息相关,有极大的牵引和推动作用,意义十分重要。

    1.2 推荐算法基本模块

    当前基于算力和存储的考虑,还没办法实现整体端到端的推荐。一般来说推荐系统分为以下几个主要模块:

    1. 推荐池:一般会基于一些规则,从整体物料库(可能会有几十亿甚至百亿规模)中选择一些item进入推荐池,再通过汰换规则定期进行更新。比如电商平台可以基于近30天成交量、商品在所属类目价格档位等构建推荐池,短视频平台可以基于发布时间、近7天播放量等构建推荐池。推荐池一般定期离线构建好就可以了。
    2. 召回:从推荐池中选取几千上万的item,送给后续的排序模块。由于召回面对的候选集十分大,且一般需要在线输出,故召回模块必须轻量快速低延迟。由于后续还有排序模块作为保障,召回不需要十分准确,但不可遗漏(特别是搜索系统中的召回模块)。目前基本上采用多路召回解决范式,分为非个性化召回和个性化召回。个性化召回又有content-based、behavior-based、feature-based等多种方式。
    3. 粗排:获取召回模块结果,从中选择上千item送给精排模块。粗排可以理解为精排前的一轮过滤机制,减轻精排模块的压力。粗排介于召回和精排之间,要同时兼顾精准性和低延迟。一般模型也不能过于复杂
    4. 精排:获取粗排模块的结果,对候选集进行打分和排序。精排需要在最大时延允许的情况下,保证打分的精准性,是整个系统中至关重要的一个模块,也是最复杂,研究最多的一个模块。精排系统构建一般需要涉及样本、特征、模型三部分。
    5. 重排:获取精排的排序结果,基于运营策略、多样性、context上下文等,重新进行一个微调。比如三八节对美妆类目商品提权,类目打散、同图打散、同卖家打散等保证用户体验措施。重排中规则比较多,但目前也有不少基于模型来提升重排效果的方案。
    6. 混排:多个业务线都想在Feeds流中获取曝光,则需要对它们的结果进行混排。比如推荐流中插入广告、视频流中插入图文和banner等。可以基于规则策略(如广告定坑)和强化学习来实现。

    推荐系统包含模块很多,论文也是层出不穷,相对来说还是十分复杂的。我们掌握推荐系统算法最重要的还是要梳理清楚整个算法架构和大图,知道每个模块是怎么做的,有哪些局限性和待解决问题,可以通过什么手段优化等。并通过算法架构大图将各个模块联系起来,融会贯通。从而不至于深陷某个细节,不能自拔。看论文的时候也应该先了解它是为了解决什么问题,之前已经有哪些解决方案,再去了解它怎么解决的,以及相比其他方案有什么改进和优化点。本文主要讲解推荐算法架构大图,帮助读者掌握全局,起到提纲挈领作用。

    2 召回

    2.1 多路召回

    召回模块面对几百上千万的推荐池物料规模,候选集十分庞大。由于后续有排序模块作为保障,故不需要十分准确,但必须保证不要遗漏和低延迟。目前主要通过多路召回来实现,一方面各路可以并行计算,另一方面取长补短。召回通路主要有非个性化和个性化两大类。

    2.1.1 非个性化召回

    非个性化召回与用户无关,可以离线构建好,主要有

    1. 热门召回:比如近7天播放vv比较高的短视频,可以结合CTR和时间衰减做平滑,并过滤掉人均时长偏低的疑似骗点击item。还可以选择用户点赞多、好评多的item等。这部分主要基于规则实现即可。由于热门item容易导致马太效应,如果热门召回占整体通路比例过大,可以考虑做一定打压。
    2. 高效率召回:比如高CTR、高完播率、高人均时长的短视频,这类item效率较高,但可能上架不久,历史播放vv不多,好评也需要时间积累,有可能不在热门召回内。
    3. 运营策略召回:例如运营构建的各个类目的榜单、片单,最新上架item等。

    2.1.2 个性化召回

    个性化召回与用户相关,千人千面,根据构建方式主要有

    1. content-based:基于内容,可以通过用户标签,比如新注册时填写的喜欢的导演、演员、类目等信息,也可以通过用户历史行为作为trigger,来选取与之内容相似的item。主要有:

      一般先离线构建好倒排索引,在线使用时通过用户标签或者历史行为item作为trigger,取出对应候选即可。基于内容来构建倒排索引,不需要item有丰富的行为,对冷启item比较友好。

      1. 标签召回:比如演员、导演、item标签tag、类目等。
      2. 知识图谱
      3. 多模态:比如标题语义相似的item,首图相似的item,视频理解相似的item等
    2. behavior-based:基于行为,主要是userCF和itemCF两种,都是通过行为来找相似,需要user或者item有比较丰富的行为。userCF先找到与user行为相似的user,选取他们行为序列中的item作为候选。itemCF则找到每个item被行为相似的其他item,构建倒排索引。二者使用的时候有什么区别呢,个人认为主要有:

      1. userCF需要user行为较为丰富,itemCF则需要item被行为比较丰富。所以对于新闻类等item实时性要求高的场景,由于冷启item很多,所以可以考虑userCF

      2. 一般来说用户量要远大于推荐池的item数量,也就是user向量远多于item向量,故userCF的存储压力和向量检索压力都要大于itemCF。同时也导致user向量远比item向量要稀疏,相似度计算准确性不如itemCF。

             协同过滤有哪些缺点呢?

      1. 由于大部分user只对很少一部分item有行为,导致user与item的行为矩阵十分稀疏,甚至有些user根本没有任何行为,影响了向量相似度计算准确性。

      2. user和item数量都很大,行为矩阵存储压力很大。

      3. 矩阵稀疏也带来一个问题,就是头部热门item容易与大多数item均相似,导致极其严重的马太效应

    1. 那怎么解决这些问题呢,矩阵分解MF应运而生。它将user与item的行为矩阵,分解为user和item两个矩阵,M * N的矩阵转化为 M * K和K * N的两个矩阵,user矩阵每一行就是一个K维user向量,item矩阵每一列就是一个K维item向量。由于不像CF中向量是基于行为产生的,有比较明确的含义,故MF中的向量也叫user隐向量和item隐向量。通过MF,可以解决CF向量过于稀疏的问题,同时由于K远小于M和N,使得高维稀疏向量实现了低维稠密化,大大减小了存储压力。

      MF矩阵分解有哪些实现方法呢,可以基于SVD和梯度下降来计算。由于SVD有一定限制条件,基于梯度下降的比较多。因此MF也被称为model-based CF。MF本质上仍然是基于用户行为来构建的,没有充分利用user和item的各种feature,比如用户性别年龄,导致有大量的信息丢失。LR和FM就应运而生。
    2. feature-based:基于特征,比如user的年龄、性别、机型、地理位置、行为序列等,item的上架时间、视频时长、历史统计信息等。基于特征的召回构建方式,信息利用比较充分,效果一般也比较好,对冷启也比较友好,是最近几年来的研究重点。又主要分为

      1. 线性模型:比如FM、FFM等,就不具体展开了

      2. 深度模型:比如基于DNN的DSSM双塔、youtubeDNN(又叫deepMatch)。基于用户序列的Mind。基于GNN的graphSAGE等

        线上使用时,可以有两种方式:
        1. i2i倒排索引:通过item embedding,找到与本item相似的其他item,离线构建i2i索引。线上使用时,通过用户历史行为中的item作为trigger,从倒排索引中找到候选集
        2. 向量检索:通过生成的user embedding,采用近邻搜索,寻找与之相似的item embedding,从而找到具体item。检索方式有哈希分桶、HNSW等多种方法
    3. social-network:通过好友点赞、关注关系、通信录关系等,找到社交链上的其他人,然后通过他们来召回item。原则就是好友喜欢的item,大概率也会喜欢,物以类聚人以群分嘛。

    2.2 召回优化

    多路召回的各通路主要就是这些,那召回中主要有哪些问题呢,个人认为主要有

    1. 负样本构建问题:召回是样本的艺术,排序是特征的艺术,这句话说的很对。召回正样本可以选择曝光点击的样本,但负样本怎么选呢?选择曝光未点击的样本吗,肯定不行

      1. 曝光未点击样本,能从已有召回、粗排、精排模块中竞争出来,说明其item质量和相关性都还是不错的,作为召回负样本肯定不合适
      2. SSB问题,召回面向的全体推荐池,但能得到曝光的item只是其中很小的子集,这样构建负样本会导致十分严重的SSB(sample selection bias)问题,使得模型严重偏离实际

      基于这个问题,我们可以在推荐池中随机选择item作为负样本,但又会有一个问题,随机选择的item,相对于正样本来说,一般很容易区分,所以需要有hard negative sample来刺激和提升召回模型效果。构建hard negative sample,是目前召回研究中比较多的一个方向,主要有:

      1. 借助精排模型:比如选取精排打分处于中间位置的item,如排名100~500左右的item,它们不是很靠前,可以看做负样本,也不是吊车尾,与正样本有一定相关性,区分起来有一定难度。
      2. 业务规则:比如选择同类目、同价格档位等规则的item,可以参考Airbnb论文的做法。
      3. 主动学习:召回结果进行人工审核,bad case作为负样本

      一般会将hard negative与easy negative,按照一定比例,比如1: 100,同时作为召回负样本。

    2. SSB问题:召回面向的是全体推荐池,item数量巨大,故需要做一定的负采样,有比较大的SSB样本选择偏差问题。故需要让选择出来的负样本,尽可能的能代表全体推荐池,从而提升模型泛化能力。主要问题仍然是负采样,特别是hard negative sample的问题。

    3. 目标不一致问题:目前的召回目标仍然是找相似,不论是基于内容的,还是基于行为和特征的。但精排和最终实际业务指标仍然看的是转化,相似不代表就能得到很好的转化,比如极端情况,全部召回与用户最近播放相似的短视频,显然最终整体的转化是不高的。

    4. 竞争问题:各召回通路最终会做merge去重,各通道之间重复度过高则没有意义,特别是新增召回通路,需要对历史通路有较好的补充增益作用,各召回通路之间存在一定的重叠和竞争问题。同时,召回通路的候选item,不一定能在精排中竞争透出,特别是历史召回少的item,由于其曝光样本很少,精排中打分不高,所以不一定能透出。召回和精排的相爱相杀,还需要通过全链路优化来缓解。

    系列文章,请多关注

    推荐算法架构1:召回

    推荐算法架构2:粗排

    推荐算法架构3:精排

    推荐算法架构4:重排

    展开全文
  • 协同过滤推荐算法

    千次阅读 多人点赞 2022-01-29 17:08:27
    首先我们在外出和朋友吃饭的时候肯定会问身边的朋友哪些饭店味道比较好,看看最近有什么美食推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。 所谓协同就是利用群体的行为来...

    一、协同过滤思想简介

    二、协同过滤算法原理介绍

    三、基于用户的协同过滤算法描述

    四、基于物品的协同过滤算法

    基于物品的协同过滤算法的优缺点


    一、协同过滤思想简介

    协同过滤,从字面上理解,包括协同过滤两个操作。首先我们在外出和朋友吃饭的时候肯定会问身边的朋友哪些饭店味道比较好,看看最近有什么美食推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。

    所谓协同就是利用群体的行为来做决策(推荐),生物上有协同进化的说法,通过协同的作用,让群体逐步进化到更佳的状态。对于推荐系统来说,通过用户的持续协同作用,最终给用户的推荐会越来越准。而过滤就是从可行的决策方案中将用户喜欢的方案找出来,协同过滤就是对从群体的行为中来寻找存在的普遍相似性,通过相似性来对用户做出决策和推荐。

    协同过滤利用了两个非常朴素的自然哲学思想:“群体的智慧”和“相似的物体具备相似的性质”,群体的智慧从数学上讲应该满足一定的统计学规律,是一种朝向平衡稳定态发展的动态过程,越相似的物体化学及物理组成越一致,当然表现的外在特性会更相似。虽然这两个思想很简单,也很容易理解,但是正因为思想很朴素,价值反而非常大。所以协同过滤算法原理很简单,但是效果很不错,而且也非常容易实现。

    协同过滤推荐算法分为两类,分别是基于用户的协同过滤算法(user-based collaboratIve filtering),和基于物品的协同过滤算法(item-based collaborative filtering)。

    二、协同过滤算法原理介绍

    简单的说就是:物以类聚,人以群分。所谓物以类聚,就是计算出每个物品最相似的物品列表,可以为用户推荐相似的物品。所谓人以群分,就是我们可以将与该用户相似的用户喜欢过的物品推荐给该用户。

     

    三、基于用户的协同过滤算法描述

     基于用户的协同过滤算法的实现主要分为两个步骤:

    • 1)如何找到和你有相似爱好的人,也就是要计算数据的相似度:
    • 2)通过相似爱好的人来推荐商品

      计算相似度需要根据数据特点的不同选择不同的相似度计算方法,有几个常用的计算方法:

    我们在寻找有有相同爱好的人的时候,可能会找到许多个,例如几百个人都喜欢A商品,但是这几百个人里,可能还有几十个人与你同时还喜欢B商品,他们的相似度就更高,我们通常设定一个数K,取计算相似度最高的K个人称为最相邻的K个用户,作为推荐的来源群体。

      这里存在一个小问题,就是当用户数据量十分巨大的时候,在所有人之中找到K个基友花的时间可能会比较长,而且实际中大部分的用户是和你没有什么关系的,所以在这里需要用到反查表

      所谓反查表,就是比如你喜欢的商品有A、B、C,那就分别以ABC为行名,列出喜欢这些商品的人都有哪些,其他的人就必定与你没有什么相似度了,从这些人里计算相似度,找到K个人

    通过这K个人推荐商品

    ABCD
    X(相似度30%)
    Y(相似度40%)

      我们假设找到的人的喜好程度如下,那么对于产品ABCD,推荐度可以计算为:

    • A:1*0.3=0.3
    • B:1*0.3=0.3
    • C:1*0.4=0.4
    • D:1*0.3+1*0.4=0.7

      很明显,我们首先会推荐D商品,其次是C商品,再后是其余商品

      当然我们也可以采用其他的推荐度计算方法,但是我们一定会使用得到的相似度0.3和0.4,也即一定是进行加权的计算

    基于用户的协同推荐算法的步骤可以总结为:

      1.计算其他用户的相似度,可以使用反查表除掉一部分用户

      2.根据相似度找到最相似的K个用户

      3.在这些邻居喜欢的物品中,根据与你的相似度算出每一件物品的推荐度

      4.根据相似度推荐物品

    四、基于物品的协同过滤算法(item-based collaborative filtering)

    基于物品的协同过滤算法(简称ItemCF 算法)主要分为2个步骤:

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

    其中,关于物品相似度计算的方法有夹角余弦、杰卡德(Jaccard)相似系数和相关系数等。

    将用户对某一产品的喜好或者评分作为一个向量,例如用户对产品1的评分为

    ,对产品m的评分或者喜好程度为

     其中m为物品,n为用户数

     计算各个物品之间的相似度之后,即可构成一个物品之间的相似度矩阵,通过相似度矩阵,推荐算法会给用户推荐与其物品最相似的K个物品,推荐系统是根据物品的相似度以及用户的历史行为对用户的兴趣度进行预测并推荐的,在评价模型的时候一般是将数据集划分成训练集和测试集两部分。模型通过在训练集的数据上进行训练学习得到推荐模型,然后在测试集数据上进行模型预测,最终统计出相应的评测指标来评价模型预测效果的好与坏。

    模型的评测采用的方法是交叉验证法。交叉验证法即将用户行为数据集按照均匀分布随机分成M份,挑选一份作为测试集,将剩下的M-1份作为训练集。然后在训练集上建立模型,并在测试集上对用户行为进行预测,统计出相应的评测指标。为了保证评测指标并不是过拟合的结果,需要进行M次实验,并且每次都使用不同的测试集。最后将M次实验测出的评测指标的平均值作为最终的评测指标。
    基于用户的协同过滤推荐算法进行推荐,构建模型的流程如下图所示:

     训练集与测试集是通过交叉验证的方法划分后的数据集,通过协同过滤算法的原理可知,在建立推荐系统时,建模的数据量越大越能消除数据中的随机性,得到的模型准确度也就越高,但是随之而来也会导致计算时长过长。

    基于物品的协同过滤算法的优缺点

    优点:

    • 可以离线完成相似性步骤,降低了在线计算量,提高了推荐效率,可以利用用户的历史行为给用户做出推荐解释,结果容易让客户信服

    缺点:

    • 现有的协同过滤算法没有充分利用到用户间的差别,使计算得到的相似度不够准确,导致影响了推荐精度;此外,用户的兴趣是随着时间不断变化的,算法可能对用户新点击兴趣的敏感性较低,缺少一定的实时推荐,从而影响了推荐质量。
    • 基于物品的协同过滤适用于物品数明显小于用户数的情形,如果物品数很多,会导致计算物品相似度矩阵代价巨大。
    • 不积跬步,无以至千里
    展开全文
  • 基于邻域推荐算法中,基于物品的协调过滤推荐算法 itemCF 的visual c++ 的实现代码,MovieLens数据集。
  • 一文看懂基于内容的推荐算法

    千次阅读 2021-01-13 17:56:11
    作者 | gongyouliu来源 |数据与智能从本篇开始我们来详细讲解各类推荐算法。这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例...
  • 基于内容的推荐算法 基于内容的推荐算法的本质是对内容进行分析,建立特征。 一般而言都是对物品进行有关内容的分类,例如电影、书籍、商品等,通过提取这些物品的内容属性或历史评分也或是操作记录,计算不同用户对...
  • 推荐算法概述

    千次阅读 2019-06-26 17:17:23
    推荐算法种类很多,但是目前应用最广泛的应该是协同过滤类别的推荐算法,本文就对协同过滤类别的推荐算法做一个概括总结,后续也会对一些典型的协同过滤推荐算法做原理总结。 1.1 推荐算法概述 推荐算法是非常古老...
  • 推荐算法介绍

    千次阅读 2020-12-19 20:01:29
    推荐算法 基于内容、基于协同过滤、混合推荐算法。 二.详细介绍 1.基于内容 根据用户之前的行为内容数据,找到相关的内容进行推荐。 解决的问题:用户冷启动。 2.基于协同过滤 2.1基于模型的协同过滤 常见的算法:...
  • 面对海量的商品信息如何实现针对不同用户维度开展个性化商品推荐,实现用户线上选购商品,下订单,支付,物流配送等?本次毕设程序基于前后端分离开发模式,搭建系统网络商品推荐系统前台与系统后台商品管理系统,...
  • 推荐算法总结

    千次阅读 2020-04-30 20:55:14
    一、什么是推荐算法 所谓推荐算法就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西。 个性化推荐概念的首次出现是在1995年3月的美国人工智能协会上,由卡耐基梅隆大学的 Robert Armstrong 等...
  • 电影推荐算法及python实现

    千次阅读 2021-07-23 01:10:40
    导读:推荐算法在电子商务如淘宝,个人社交如微博等方面起着重要的作用。随着这些网站的飞速发展,这种个人推荐服务得到了更广泛的应用,例如抖音短视频推荐算法可以根据用户的观看习惯进行精准投放。本人通过查阅...
  • 个性化推荐算法(推荐系统)概要

    万次阅读 多人点赞 2020-05-16 19:59:38
    本文也可以作为读者落地推荐算法到真实推荐场景的参考指南。 一、推荐算法与产品介绍 什么是推荐系统? 在介绍推荐算法之前需要先介绍一下什么是信息过载。 信息过载就是信息的数量远超于人手工可以遍历的数量。比如...
  • 基于内容的推荐算法

    2012-10-17 12:52:52
    对基于内容的个性化推荐算法进行了系统描述
  • 推荐算法总览(完整总结)

    千次阅读 2020-01-15 15:20:46
    1. 什么是推荐算法 2. 推荐算法的目的 3.推荐算法的条件 4. 推荐算法分类 4.1 基于流行度的推荐算法 4.2基于内容的推荐算法 4.3 基于关联规则的推荐算法 4.4 基于协同过滤的推荐 4.4.1基于用户(User-based)...
  • 几个推荐算法的java实现

    千次下载 热门讨论 2012-01-05 20:00:28
    java实现的几个推荐算法:slopeone SVD,RSVD,ItemNeighborSVD 内有readme,相关内容在blog.csdn.net/lgnlgn
  • 推荐算法: ​ 推荐算法是计算机专业中的一种算法,通过一些数学算法,推测出用户可能喜欢的东西,目前应用推荐算法比较好的地方主要是网络,其中淘宝做的比较好。 发展背景: ​ 推荐算法的研究起源于20世纪90...
  • 个性化推荐算法总结

    万次阅读 多人点赞 2019-04-11 23:24:58
    读书笔记 |《推荐系统实践》- 个性化推荐系统总结 对于推荐系统,本文总结内容,如下图所示: 一、什么是推荐系统 1. 为什么需要推荐系统 为了解决互联网时代下的信息超载问题。 2. 搜索引擎与推荐系统 ...
  • 微博推荐算法简述

    千次阅读 2019-11-26 17:38:36
    在介绍微博推荐算法之前,我们先聊一聊推荐系统和推荐算法。有这样一些问题:推荐系统适用哪些场景?用来解决什么问题、具有怎样的价值?效果如何衡量? 推荐系统诞生很早,但真正被大家所重视,缘起于以”facebook...
  • 简易推荐算法

    万次阅读 2020-05-19 19:12:12
    推荐算法: ​ 推荐算法是计算机专业中的一种算法,通过一些数学算法,推测出用户可能喜欢的东西,目前应用推荐算法比较好的地方主要是网络,其中淘宝做的比较好。 发展背景: ​ 推荐算法的研究起源于20世纪90...
  • 基于内容推荐算法实现原理

    千次阅读 2020-04-30 22:00:36
    本文会从什么是基于内容的推荐算法、算法基本原理、应用场景、基于内容的推荐算法的优缺点、算法落地需要关注的点等5个方面来讲解。 1、什么是基于内容的推荐算法 所谓基于内容的推荐算法(Content-Based ...
  • 推荐算法分类

    千次阅读 2018-10-24 15:25:11
    推荐算法种类很多,但是目前应用最广泛的应该是协同过滤类别的推荐算法,本文就对协同过滤类别的推荐算法做一个概括总结,后续也会对一些典型的协同过滤推荐算法做原理总结。 1. 推荐算法概述 推荐算法是非常古老的...
  • 【机器学习】推荐算法(附例题代码)

    千次阅读 多人点赞 2022-04-06 16:52:10
    推荐算法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 575,090
精华内容 230,036
关键字:

推荐算法

友情链接: Board.Intel.zip