想学习推荐系统,如何从小白成为高手?

现在在看推荐系统实践,会JAVA,正在加Python,看完这本书下一步该怎么做,求赐教
关注者
558
被浏览
19464

5 个回答

同在学习推荐算法,大概介绍一下我自己规划的推荐算法学习轨迹(还在慢慢实践中,好长时间了,捂脸...)。

首先,看完了推荐系统实战的话,应该大概了解了大部分的推荐算法。那我觉得看完了书,应该有必要再从宏观上再来了解一下推荐系统这个研究领域的研究现状,包括研究领域目前有的挑战,比如冷启动问题,大规模矩阵分解问题,增量模型计算问题等等,包括目前热门的研究方向,比如基于LBS、社交网络等等的推荐。最方便的了解这些问题的途径当然就是看论文了,找到 Recommender System相关最新的Review 或者Survey 文章,多读几篇。这些文章往往是该领域的大牛所著,往往会非常良心的收集了近十几年来该领域的研究成果,分析好坏,做出比较,非常赞。

然后,看完理论算法就要到算法实现层面来了,一些简单的算法,比如UCF,ICF,SlopeOne等等算法,完全可以根据自己的理解手动编一编,更好的来对它做理解。当然借助于开源解决方案也是一种非常好的学习方法。这里有几篇总结的很好的推荐系统开源软件介绍:
推荐系统开源软件列表汇总和点评
TOP 10开源的推荐系统简介
如果楼主会JAVA,那就果断推荐Mahout了,虽然Mahout是在2011年搞出来的,但是它对Hadoop的支持做的不错,而且最新版本的Mahout即将抛弃Mapreduce,转向Spark了,背后还有阿帕奇基金会的支持,相信会是不错的选择。Python的用过Recommender Systems Framework in Python (Crab) 代码比较简洁,适合一读,号称是Mahout的python版本。其他的开源软件楼主也可以关注关注。特别之前两篇中提到的Myrrix,它是Mahout的作者之一Sean Owen基于Mahout开发的一个试验性质的推荐系统,目前已经并入Oryx项目,Oryx1.0 (cloudera/oryx · GitHub )已经发布,Oryx2.0也正在孵化中,相较于1.0版本,Oryx2.0更好的实现了lambda架构,使得各个层之间可复用性更强。实现了比1更多的机器学习算法(1.0只实现了,ALS协同过滤,随机森林,以及K-means++算法)同时2.0版本还引入更新的Spark和Streaming技术。总之社区更新非常活跃,所用的技术也非常前沿,适合学习用。

最后,(我也还停留在这一步)了解了这些东西我觉得就应该去实践了(其实边实践边了解可能更好),找一份实习,或者相关的工作,看看如何将所学到的算法真正的结合到特定 的业务中去,不同的模型,不同的推荐算法如何进行融合,如何解决冷启动,如何解决大规模的计算等等。不同的业务比如电商,音乐,电影,新闻,咨询等等的推荐,都会有相对应的特色的方法。先进的算法和解决方案固然重要,但是如何深刻的理解业务,提取一些用特征,总结一些业务经验,有时候往往会比几个干净的算法,融合几个模型对业务提升更有效。
以上都是愚见,望与大家一起学习交流。
做了几年推荐的工作,也带出过几个应届生,说说我的看法吧。

首先,刚刚接触的阶段不要去考虑太多算法层面的东西,而是要先弄明白推荐是做什么的,为什么要有个性化推荐,个性化推荐的主要应用场景有哪些。其实这样做的好处就是要从最开始就保持一个业务的思维,等做的多了你会发现,算法层面的提升很困难了,有时候花大力气优化出来的算法可能不如在数据的处理过程中加一个策略来的有效。

其次,算法方面,就还是从基本的CF入手,这是最经典算法,最古老的算法,同时也是当前互联网市场的生产环境中用的最多的算法。其实准确来说这不是一个算法,而是一系列算法,后期很多所谓的新算法也是由其衍生出来的。所以一定要吃透,包括几种不同的similarity的计算方法和异同点、用户评分的计算方式、显反馈和隐反馈数据怎么用等等。看懂了CF相关的内容,应该说你就已经入门了,后面再去学新东西也就轻松很多。

第三,在有了上面的理论基础以后,还是要多动手实践。如果有实习能接触到实际的业务数据最好,没有的话就去看一些经典的推荐相关的比赛,像最有名的Netflix的,还有kaggle上面的,都有数据,自己实现算法去跑数据,想办法优化,然后再去看别人是怎么做的,慢慢的就会有很多收获。

最后,通过上面这些步骤以后,相信你已经有了一定的基础了,那如果想提高,还是要多看paper。每年recsys都产出很多优质的paper,可能会有一些引领未来潮流的算法出现,多关注多尝试。

其实,当你把以上这些都做了以后,你会发现推荐这个领域有多广阔,有信息的地方就会有推荐。推荐算法涉及到的东西远不止用户、物品、评分。好的策略能提升算法,好的presentation能提升算法,甚至好的产品也能给算法以质的飞跃。这就是为什么一个好的推荐工程师一定要是一个对产品业务足够熟悉的人的原因了。

还有很多可以谈的点,就不展开讨论了,祝早日成为一个推荐领域的高手。
为什么?