我的数据科学学习之路



  • 作者:Ivan Cui

    回首过去2年多的数据学习和实践之路,有破釜沉舟的投入、有机缘巧合的幸运、更多的是庆幸,庆幸自己找到了热爱的事业,也庆幸自己找到了不错的学习方法,在毕业6年后,让自己从一名产品经理成功转型成了一名数据挖掘经理。在转型的前半年,我辞职全力自学数据领域相关的知识技能,这段时间的学习对我的转型成功有决定性的作用。现在再结合自己在工作实践中的经验和心得,一起分享给大家,也许会对准备投身到大数据浪潮中志同道合的伙伴有一些借鉴作用。

    一、数据科学的进阶历程:

    首先我想讲的是,以我的经历来看,很少有人的转型跨度会比我更大了,如果你和我一样对数据工作充满兴趣,无论你现在的基础如何,都不应该成为你前进的障碍。而如果你碰巧是一名数据分析师或者软件工程师,那么你就比我拥有更好的基础,当然要对自己更有信心。

    我理解的数据科学有五个阶段,第一个阶段就是数据分析师或者软件工程师,数据分析师通常对数据统计和处理比较擅长,也能够做一些基础的报告和数据展现,对业务知识的了解程度比较高,但是缺乏灵活的数据处理手段以及对数据挖掘的理解。而软件工程师具有比较灵活的数据处理能力,ETL能力等,但是对于数据的敏感度不够,对数据展现不熟悉。

    第二个阶段是数据挖掘工程师,第一个阶段的两个职位都有明显的短板,如果需要成为一名优秀的数据挖掘工程师,必须首先补齐自己的短板。接下来,还需要对主流的数据挖掘模型有一定的了解,能够使用机器学习包或者SAS这种数据挖掘工具完成基本的数据挖掘建模能力。

    第三个阶段是算法工程师,算法工程师最重要的两个能力是算法优化以及改写的能力,以及算法参数调优的能力。

    第四个阶段是大数据算法工程师,需要能在分布式平台实现自定义算法的架构和优化,以达成准实时甚至实时的业务需求。

    第五个阶段是数据科学家,需要能通过深度学习替代几乎所有的基础数据挖掘模型,在NPL、图像识别等领域也要有足够的积累。能够使用分布式环境,高效的完成从数据清洗到存储再到模型实现及调优的全部工作。

    二、数据科学的知识框架:

    根据我的经验,总结了数据工作不同阶段需要用到的知识、技能和素质,如下:

    0_1471208461543_1.png

    在不同的阶段需求重点不同,但是如果在前面的阶段没有把该掌握的内容掌握好,到了后面的阶段就无法做出最优秀的成果,所以我个人不建议跳跃式的发展。在具体展开聊这些知识技能前,我想讲一下自己的学习观。

    三、经验技巧分享:

    我猜绝大多数准备入行的同学看了上面的表单都会有些头大吧,内容实在太多而且跨度太广了。有没有短时间能够速成的方法呢?相比于把以上的内容依次扎扎实实学下来,确实有一些速成的技巧。

    数学方面,需要达到的程度就是熟悉所有的知识体系、定理以及定理的基本应用,对数学概念有直观而不是定义式的理解。具体的证明推倒、公式内容等只需要在用到时能够快速找出即可。我的学习方法就是把各种课程的学习笔记记录在自己的云笔记上,包括练习、重要的例题以及网上找到的资料,这样需要应用到相关知识时搜索云笔记很快就能回想起来。

    数据挖掘算法方面,需要理解所有主流数据挖掘算法的思想和实现步骤,知道每种算法的应用场景即可,至于各个算法的优劣、参数定义、算法实现等需要的时候能在云笔记找到即可。

    技能方面的掌握程度要求是弱于知识的,而且技能随着工作中的运用会逐步熟悉,根本不需要花太多时间去记忆和掌握,但每一项技能能够做的事情都需要清晰地知道,并且能够在要用时方便找到代码或方法就好。所以针对每一项技能报一个在线课程认真学下来即可,如果不是资质极佳学完一遍会很快忘记,但只要你认真记好云笔记就根本不需要担心。

    最没有办法速成的恐怕是素质了,而且以我目前的理解,影响素质表现的主要两点,一是:兴趣和热情,二是:天赋,所以不用强求。综上所述,真正非常需要花时间的就是基础数学和数据挖掘算法了,另外,如果你的编程基础和我一样弱的话,编程训练也很需要花时间,这三样没有特别好的速成技巧。如果你是一名数据分析师,那么请多在编程上下功夫,如果一是一位程序员,请多在数学上下功夫。

    四:学习路径和建议:

    1. 统计学:可能是做数据科学最重要的知识了,我报了4-5个不同机构的在线统计学课程(列出一些好的自学网站供大家参考:1、九章算法及BitTiger;2、炼数成金;3、Khan学院;4、Coursera;5、Lynda),每学一遍都加深了理解。但即使这样,也没办法把公式和定理推导都记下来,只要你的目标不是学术研究就不需要担心。统计学中最重要的是理解不同的分布,在工作中,数据统计会用到置信区间,DOE实验设计会用到各种统计知识,在数据挖掘算法中,如果对数据的分布有很好的理解,对优化算法也非常有帮助。从开始阶段就需要学习,到成为一名算法工程师时必须能深刻理解统计学,否则很难说是一个合格的算法工程师。

    2. 微积分:数据挖掘算法中常常会涉及到微积分的知识,最典型的应用之一是梯度下降法,这是理解逻辑回归必备的知识。但我感觉对微积分有基本的理解就好了,不需要掌握的很好。在学习数据挖掘算法的同时,理解其中微积分知识的运用即可。

    3. 线性代数:推荐系统、NLP等都有非常多应用到矩阵运算的场景,特别是在做大规模数据处理时,没有稀疏矩阵以及矩阵分块的知识,几乎无从入手。所以在数据分析阶段用不到的知识,在做机器学习时会非常重要。另外,SVD分解在很多算法设计中也都起到重要的作用,是算法工程师不可不熟练掌握的内容。

    4. 信息论:这是相对高级一些的数学知识,我理解的数据科学就是从数据中提取有用信息的过程,信息论最简单的应用是在决策树以及连续型变量离散化这种特征工程上。算是数据工作中级阶段需要用到的知识,我自己对信息论了解的并不多,但我强烈的认为有深入学习的价值。

    5. 数据挖掘算法:回归、分类、聚类、频繁模式识别、基于用户的推荐系统、文本挖掘等等,多报几个不同的机器学习班能够把这些算法学的差不多,会用即可。考虑到目前深度学习的热度以及应用的广度,非常多数据挖掘算法会被替代掉,所以不需要特别精专,能够做算法的局部优化以及参数调优就是不错的算法工程师了。

    6. 特征工程:其实说白了就是高级数据清洗,在模型随便套的今天,数据项目成果的好坏很大程度上取决于数据清洗的质量。能做好特征工程,是一个算法工程师的必备要求,而且这方面知识再多的积累也不嫌多,即使对数据科学家来讲依然有进一步深造的空间和必要。

    7. 最优化算法:和特征工程一样重要,可以理解成数据挖掘模型中的数据挖掘子模型,几乎每个数据挖掘模型都有自己的参数,如何使参数最优化是一个永恒的命题。大部分人都是从梯度下降法开始接触最优化算法,遗传算法、模拟退火算法等也是一些基础的有趣优化算法。同样,这方面的知识积累再多也不嫌多。

    8. 深度学习:这是目前数据科学最前沿的领域,好在谷歌开源了TensorFlow,让大家进入这一领域的门槛降低了非常多,我认为未来深度学习将会取代非常多现有的数据挖掘算法,比如:SVM。因为数据挖掘本质是对数据蕴含的信息进行理解的过程,在信息提取以及规则学习方面,目前已知的其他算法都无法和深度学习相比。而且当前深度学习在分类问题(预测、推荐等都属于此)、语义理解问题、甚至是决策问题(比如:自动驾驶),都有不错的应用,可以说深度学习就是人工智能的基础,我印象中没有什么是不能用深度学习解决的。这是做数据科学最难,也是最有趣的内容了,赶快打牢基础早日进军深度学习吧。这方面我目前了解的非常有限,就不多说了。

    9. 业务知识:我接触的很多软件工程师、甚至是数据挖掘工程师对业务知识的重视程度仅限于口头,但和学界不同,在工业界不已业务知识和经验为基础的开发都很可能走上弯路,这点我有深刻的体会。比如:推荐系统这种只靠算法能算出好的“结果”的工程,做完之后业务人员并不认可导致返工。。。

    10. 结构化数据库:熟悉MySQL的基本使用,能够用Python或其他编程语言良好的操作数据库即可,熟练使用SQL即可。这条相信即使是数据分析师和软件工程师都不成问题吧。

    11. 非结构化数据库:NoSQL数据库在处理用户画像等场景时会比结构化数据库更加高效,这方面的技能掌握相比前面的难度很小,基本学习一下原理和语法就行了。

    12. 图数据库:neo4j这样的图数据库在处理用户关系以及NLP方面都有很好的应用,如果有这方面的业务是不可能用不上的。也是掌握一下基本的使用方法即可。

    13. 数据分析工具:最常用的是excel,虽然这是最没有技术含量的工具之一,但对任何一个数据工作者来说excel都是必修课,因为应用实在太广了,即使你自己不用,也会因为其他同事的需求而用到。何况,在做一些基础的数据分析时,我真的找不到比excel效率更高的工具了。这几乎是每一个数据工作者最先需要掌握的技能。

    14. 数据展现工具:数据工作并不是做给自己的,通常需要让同事和领导理解你的工作和成果,这时好的数据展现技巧非常重要。虽然如r或者python都有自己的数据展现包,但我认为和全面的自定义功能相比,美观和效率更加重要,所以我的建议是至少熟练掌握一种数据展现工具,比如:tableau,绝大多数数据展现的需求都可以用它完美的实现。算法不是数据科学家的全部,数据展现是不可忽视的一环。

    15. 数据挖掘工具:主要的数据挖掘工具有spss,sas,matlab等,这些工具对数据挖掘工程师来说帮助都非常大,其中sas很可能是单机数据挖掘执行效率最高的软件,而matlab则是做单机矩阵运算最好的工具。通常它们应付数GB的数据没有问题,能够解决很多数据挖掘工作前期预研的问题。另外,sas提供的广泛统计参数是目前机器学习算法包不可比拟的,用之前我的老师的话说,如果能理解sas输出的所有参数的含义,基本可以统计学博士毕业了,因此,它是很好的数据挖掘算法学习帮手。不过一旦熟练掌握分布式计算平台的使用后,他们的价值就逐渐降低,对数据工作者来说,数据挖掘工具属于非常有用的过渡型技能。

    16. 编程语言:我个人主要学的是Java,正在转Scala,但我觉得Python也不错,很多做数据的同事都在用。R的话学过一段时间,但觉得做做单机小规模的数据分析不错,规模稍微大一点各种问题,与其正面硬刚不如转投其他语言的怀抱。编程也是要整个职业生涯不断学习的东西,我目前不觉得多少人能达到编程能力的顶峰,每一点提高对数据工作都是有价值的。

    17. Linux:几乎所有已知的并行式计算平台都是运行在Hadoop环境的,在成为大数据算法工程师后基本上天天都要使用Linux,不过它相比其他技能要求上会低很多,只要熟悉常用的命令和基础的使用方法就可以了。

    18. Hadoop:应该是目前应用最广泛的分布式数据存储以及任务分配平台,HDFS、YARN等都是很多其他分布式计算工具的基础。集群的配置什么的了解个大概,可以自己组个小集群做练习就可以了,主要还是学习一下MapReduce、Pig、Yarn的使用比较有帮助。

    19. Spark:目前发展非常快,前不久刚发布了2.0,相比1.6版速度提升了3-4倍,是非常好的分布式流式计算平台。在具体业务中实现准实时的计算环境没有问题,延时在秒级,我们公司在Spark上部署了推荐系统、计算广告等项目。很多算法调优也是在上面做的,是大数据算法工程师的必备技能。

    20. Storm or Samza:真正的实时处理平台,延时在毫秒级,如果想实现实时的推荐系统,必须用到Storm或者Samza。我目前在这方面了解的不多,就不细讲了,工程端相对用到的更多一些。

    21. 数据敏感度:简单的说在数据分析上,能根据发现数据的异常,能根据数据的异常合理的推断原因。更重要的是在算法优化上,能合理的设计输出参数并根据程序输出的结果,敏锐的发现算法的问题。如果这点能够做好,对算法优化非常有帮助,但这往往很难,首先要充分理解算法,然后要知道主要观察那些参数,最后根据参数的结果作出合理的分析和推断。需要强烈的兴趣和热情以及天赋才能做好,下面两条也一样。

    22. 洞察力:在数据分析方面,洞察力体现在理解业务的同时,作出假设,并根据数据发现连业务人员也不了解的信息。在算法优化方面,根据业务场景和业务经验,结合通用的算法模型原理,对算法模型作出针对性的优化,使之成为最适合目标业务场景的算法。而通用的算法在特定的业务环境下通常不能起到最好的效果,必须做有洞察力的针对性优化。

    23. 产品思维:在成为团队管理者或者数据科学家后才比较重要的能力。能够根据公司的业务发展,规划和数据结合的用户产品,不仅仅要了解数据和算法,还需要了解消费者,了解公司产品目标,结合一切资源,比如:设计、运营、UE等作出以数据算法为核心竞争力,以最好的服务、满足客户需求为最终目标的用户产品。企业的目标是发展业务,所以一个能够作出优秀产品的数据科学家才是最优秀的数据科学家。

    以上分享了一些我对数据领域学习和实践的心得,希望能对准备投身数据行业的伙伴有帮助,如果有其他前辈大神碰巧读到本文,也希望不吝赐教,在数据方面我学习的还非常不够,和大家共勉!


登录后回复
 

与 BitTiger Community 的连接断开,我们正在尝试重连,请耐心等待