我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:爱彩网 > 二分图 >

怎样快速成为算法工程师

归档日期:04-24       文本归类:二分图      文章编辑:爱尚语录

  在本文介绍算法工程师当中,我分为以下三个部分来为大家做简单的讲解和梳理:

  在了解如何成为一个合格算法工程师之前,我们需要先定义什么是算法工程师。很多人会问我算法工程师、数据挖掘工程师和数据分析之间到底有什么关系。

  其实从我个人理解来看,算法工程师和数据挖掘工程师还是比较接近的,在大部分中小公司中是不做区分的,在大厂里的话算法工程师相对数据挖掘工程师而言更偏底层一些,需要自己动手造一些高性能计算相关的轮子,提供给数据挖掘工程师使用。但这毕竟是我自己的看法,我们不妨通过各大企业的算法 JD开始了解这个岗位。

  这是 100offer上,某BAT发给算法工程师的面试邀请JD,从这份 JD可以看出,资深算法工程师的普遍要求是 3年以上工作经验,提供 30k-60k的基础月薪。在岗位描述中主要介绍了具体的业务场景,其实主要做的还是数据挖掘和搜索相关工作。在岗位要求中,罗列了一些常见的机器学习技术,并对编程开发的能力有较高的需求。

  总的来说,这整份 JD侧重细节方面比较多,要求也比较细,属于比较典型的招码农的 JD,碰到这样的 JD一般说明这个部门的老大比较厉害,但是对自身而言晋升空间就相对较小了。

  关于怎么定义一个算法工程师这块,除了我拍脑袋给你们下的定义外,我还抓取了上近千份算法岗位的 JD,并粗糙地做了一个关键词词云图,仍有不少噪音没有去除掉。虽然粗糙,但我们也能从中抓住几个明显的重点。

  主要是Python、算法、数据、业务、C++、Java、数据挖掘、广告、数学、硕士等等。其中计算广告方面的专业词汇较多,如 CTR和 DSP,但并不是本文重点。所以如果单从 JD的这个词云上来看,如果真心想往这个方向走,那么修炼好 Python和 C++,读个硕士,努力学好数学还是很有必要的。

  曾经的我也只是一个只懂 ACM竞赛相关算法的普通程序员,误打误撞接触到了数据挖掘之后才开始系统地了解机器学习相关知识。

  最早接触到的一个 case是把从淘宝抓下来的商品按名称进行分类,进行了一番研究之后知道了有一个叫做朴素贝叶斯的分类器可以完成这样的工作。抱着试试看的心态,我又通过垂直类目抓取了一部分商品作为我分类器的训练集,第一版分类器交叉验证的准确率就达到了 97%,这对我来说就是打开了一扇新世界的大门,原来分类问题可以被如此优雅地解决,同样我也感受到了大数据带来的魅力。

  在经过一些调整和对朴素贝叶斯的深入研究之后,准确率成功提升到 99%以上,并没有出现明显的过拟合现象。

  在这个入门的练手 case中,我最深的体会就是实践是最快的学习方式。虽然只是完成了一个简单得不能再简单的分类器,但是我知道了如何去判断模型的好坏、如何去针对模型来预处理数据、如何根据结果来修正模型、如何判断模型过拟合等等机器学习中的常识。

  再之后我买了相关书籍来学习,发现第一章普遍都是在教会你如何去评估一个模型并罗列了许多统计学方法,如果我通过这本书籍入门的话,可能就会因为繁琐的统计证明而丧失兴趣。但在我通过一些实践之后再来阅读这部分内容,顿时让我觉得获益匪浅。

  所以怎么样才算是一名出色的算法工程师呢?按目前市面上普遍的用人需求来看,大致要从以下几个方面来考察:

  这个就很好理解了,毕竟作为工程师还是需要编程来解决问题。根据工作内容来说,越是偏底层的开发,对编程能力的要求就越高。如果只是用 Python或者 R来做数据挖掘,那对编程能力的要求就相对较低了。

  但如果一旦涉及到高性能的计算中间件、高并发的业务场景时,对编程能力的要求就会陡升,而目前大厂基本都会有这样的业务场景,所以大厂对各岗位的工程师都有较高的编程能力要求,我们不妨从最早就踏实打好语言基础,无论是 C/C++/Java编译型语言,还是像 Python这样的解释型语言,都应该由浅入深了解语言底层的相关知识。

  这是一个老生常谈的内容了,从最早Google面试喜欢考算法题的作风开始,算法和数据结构的重要性渐渐为人所知。当然这里的算法和算法工程师工作时所用的算法还是有一点差别的,传统算法往往有一个标准的输入和输出,然后利用不同的数据结构和策略来降低算法的时空复杂度,如果读者有幸参与过信息学奥林匹克竞赛或者 ACM竞赛的话应该会非常了解。

  在算法工程师的工作中,我们同样会遇到类似的情况,譬如我自己就在做计算广告的时候,遇到过二分图最大权值匹配的经典场景:

  我们手头有 n个广告主参与竞价,同时有 m个广告位可供展示,但我们不能拿相同广告主的广告进行重复竞价,这就构成了经典的二分图匹配,在这个约束下,我们还得优化我们的最终目标,即通过机器学习模型预测每一种匹配情况下的点击率,这个点击率转化为这个二分图上的权值,要求计算该二分图的最大权值匹配。

  我们知道所谓算法工程师,目前其核心还是在机器学习,而机器学习的学习中,数学知识是必不可少的。

  在大数据人工智能概念越炒越热的时代,有越来越多的人加入到了这个大军中来,然而却有不少同学因为数学能力不足望而却步,或者止步于一些现有机器学习开源库的调用。这样的内功情况会对未来的职业生涯造成比较大的负面影响,成为一个比较尴尬的瓶颈,也会更容易触及到自己职业生涯的天花板。

  那么这里的数学又具体是哪些呢?简单来说,就是微积分、概率与统计、线性代数这三板斧,这三门课程在大部分理工科专业的本科阶段都可以接触到,所以如果遇到了这些课,就请务必认真听讲,如果已经错过了认真听讲的时光,也不用太懊悔,多花一点时间从网上各路的公开课中重新学习即可。

  这一点中,我主要强调的是实践经验。我见过不少面试者,简历上写了一堆自学的公开课课程,甚至是 Coursera机器学习相关的各种证书。但在实际对话中,往往摸不清特征工程的意义是什么,也无法对不同类型的数据做出甄别并采用合适的特征选择方式和模型评估方式。

  很多人在学习的时候往往会一门心思钻研如何实现并证明逻辑回归、SVM核展开、各种神经网络的原理等等,我这里并不是否认这些知识的价值,而是对于大部分初学者来说,这些相对底层的知识其实仅做了解即可,等到工作若干年后再回头来了解才会更有收获,而特征工程、模型评估等实践经验,往往才是用人公司最为看重的点,毕竟我们的目标是成为一名工程师,而不是一名科学家。

  聊完这些,我想各位应该已经对算法工程师有一个比较清晰的了解了,那接下来就介绍一些比较方法论的干货了,首先是编程,如果仅针对数据挖掘而言,学习好 Python并能加以灵活运用就够了,这里推荐的是《集体智慧编程》一书,在这本书中,语言文字都是非常浅显易懂的,书中的例子源码都是 Python事先,并能帮助我们快速熟悉Python相关的各种计算库。

  其次就是数学了,围绕概率与统计来学习会是非常快的学习方式,推荐阅读李航教授的《统计学习方法》,这本书非常地精炼,第一遍阅读可能会有不少障碍,日后需要反复阅读巩固才能更深入地理解背后的知识点。如果有同学对线性代数感到陌生,可以去看 MIT的线性代数公开课,这门课中对基础概念的讲解和教学流程。

  有了以上这些基础后,基本就可以无压力敲开机器学习的大门了。首推依然还是吴恩达教授的机器学习公开课。在这门课中你会把所学的数学知识应用到机器学习领域中,并对底层的知识原理会有一定了解。

  可以配合周志华教授的《机器学习》一并阅读,这本书还是有一定难度的,初读同样可能会有一些障碍,但目前这本书基本可以封为机器学习的中文圣经了,非常值得一读。

  到这里,已经可以放手大胆地去实践了,算法的基本功可以从 LeetCode上充分汲取,机器学习的基本训练可以在 Kaggle历史赛事中完成。除此之外,我们还有必要去训练自己快速阅读 paper的能力,推荐关注 ICML、NIPS、AAAI、CVPR等顶级学会发布的相关论文。

  招聘用人是一个非常繁琐的过程,由于这是一个对个人素质要求较高的岗位,所以从我的角度出发,首先是需要可塑性高的人。

  说得再通俗一点,就是学得快用得好,能比较容易对知识点举一反三的人。对于以上我提到的所有内容,其实每个人只要用心学下去,终是可以学会的,聪明与否只是决定了学习的时间长度而已。

  所以从这点出发来看的话,和大部分大企业的招聘方向还是比较一致的。有不少同学可能会认为大厂出一些工作中几乎用不到的算法面试题完全就是在刁难面试者,其实不然,面试官往往就是通过这一类问题能了解到你在面对一个相对陌生的问题时,能否给出一个精练、合理、高效的解决方案,这和之后工作时的表现是息息相关的。对此,我有这么几点建议:

  不要为了面试而去刷 LeetCode等题库,而是保持一个稳定的节奏,可以是一周 2-3道 Hard难度的题目,保持自己的思维不会因为一些重复劳动的工作而固化,同样方式可以适用于 Kaggle来训练自己。

  清晰并富有逻辑的谈吐会给面试官带来极大的加分,这表明即使当你遇到问题了你也可以无障碍和你的同事、主管沟通,这在创业公司显得尤为重要,好的沟通下才能让产品快速迭代,完成所谓的精益创业目标。

  针对这点来说,平常可能比较难练习,可以多写技术类博客,多用文字来总结自己所学的知识,业余时间可以多参与像狼人杀、阿瓦隆一类言语类游戏。

  这点有不少同学存在争议,但我认为还是有一定必要的。白板编程考查的内容点一般不会太难,例如像链表基本操作、反转二叉树等都应该是手到擒来的。

  不少人认为编程既然有 IDE、有各种 API文档和参考资料,没有必要去这方面的训练。但我在面试中经常会遇到面试者来来回回涂改花了十分钟写完了其实只要十来行代码的反转二叉树,这就是自身缺乏对编程思维的理解,没有经过大量的编程训练。

  所以这也是大厂为什么青睐 ACM竞赛经历同学的原因之一,因为能参与竞赛并获奖的同学,往往都已经积累了大量的编程训练。

  最后,关于学历这一块,我个人并没有强求。但往往由于简历过多且面试时间开销过大,只能优先考虑面一些名校毕业的硕士生或在著名学术期刊发表论文的学生来降低招聘的时间成本。

  但如果没有以上这些的同学也不要气馁,可以通过一些其它经历来弥补,比如算法类的 ACM、数据挖掘类的 Kaggle等竞赛成绩都可以说明你在这方面有一定的努力和天赋,实在不行你还可以罗列自己丰富的实践经验,总之好过一句对算法和机器学习充满热情」对吧。

  继由硬件十万个为什么组织的2017电子工程师技术交流大会(EETC)·杭州站的召开,受到广大工程师的热烈欢迎和积极反响。

  一名一线企业嵌入式软件工程师的笔者,想通过自己的实际经历理性地评论当今嵌入式行业的真实状况。 嵌入式的定义和举例分析 ...

  目前,Linux作为嵌入式系统的主力军,广泛应用于消费类电子、工业控制、军工电子、电信/网络/通讯、....

  负责组织制定系统集成项目的技术方案编写、标书的准备、讲解及用户答疑等工作;

  招聘者每天要看成百上千份简历,也许在每份简历上花的时间不到5分钟。如果才能从许多简历中跳出来,吸引招....

  这是一份攻城狮不能拒绝的福利!30份技术干货, 涉及Iot产业发展、5G、工业物联网、智能可穿戴、智慧城市等领域精细划分 由微...

  最近和很多认为自己是高级工程师的程序员聊过,发现了一个很显著的问题,大家以为自己会ssh,会点小模块....

  外国工程师年纪都很大,曾有人表示先后与40多位外国工程师共事过。只有2位小于30岁。绝大部分是中年人....

  项目管理工程师是项目团队的领导者,其所担负的责任就是领导团队能够准时、优质的完成项目的全部工作,从而....

  手机响了,是一个实施工程师打过来的,说现场的数据采集不上来,问怎么解决。我问软件的版本,仪器的型号,....

  互联网是由一个一个的超链接组成的,从一个网页的链接可以跳到另一个网页,在新的网页里,又有很多链接。理....

  一般面试官的第一个问题八成都是问一下以前做过的项目,所以最好准备两个自己最近写的有些技术

  每当数据检查不通过时,就会有点揪心,怕是又出了什么乱子。最可恨的就是网站改版,每次改版,原先设计的系....

  一个天气应用,干净清爽的界面,天气信息一目了然。它不仅可以精确预测未来 10 天的天气,还可以显示某....

  在很久之前我就说过同样的话,表达过我觉得做为前端工程师而言设计素养的重要性,今天我想聊天为什么我有这....

  前端工程师是一个出现了10年左右,而颇受重视则是最近这五六年的事情。受到重视到前端从业人员井喷,也就....

  我建议是第一是跟语言无关的部分,也就是所谓的基本功。具体也就是我们大学本科里面最头疼的那些东西,数据....

  其实前端工程师并不少,但很多时候合适的前端工程师难找。可能是由于程序员比较内向,前端工程师都没有把自....

  了解到过完年回来很多大公司就开始实习生招聘了,我也在开学的时候就投了简历,内推和正式实习生招聘都参加....

  全栈工程师一词,最早出现于Facebook工程师Calos Bueno的一篇文章 - Full St....

  作为电子工程师,特别是电路工程师,如Analog IC, Digital IC Engineer,需要了解到电路、集成电路,数字电路、模拟电路、...

  当今我国信息化处于发展阶段,数以万计的中小企业继续中高级别Java开发工程师,导致Java开发行业越....

  闲着无事,想想最近被面试和面试别人时各个问题,自己总结了几条作为合格售前工程师需要具备的技能、素质,....

  说明:刚参加工作的新同学经验积累一般较少,为了形成“问题驱动”的工作习惯,在这个阶段应更多参与很具体....

  作为Web开发中应用最广泛的语言之一,PHP有着大量的粉丝,那么你是一名优秀的程序员吗?在进行自我修....

  现在, 我工作满7年。 原本的计划, 是在工作满10年的时候, 有更多积累之后, 再来写一些能够帮助....

  打算换个工作,近一个月面试了不少的公司,下面将一些面试经验和思考分享给大家。另外校招也快要开始了,为....

  (1)关于「开关电源工程师需要哪些知识」 以一个简单的Buck变换器的设计为例进行说明。 [图片来自:Erickson R W, Mak...

  近几年,人工智能逐渐兴起,AI 助手、无人驾驶汽车、云端全功能芯片。..在媒体领域,机器人写稿、媒体....

  每一波浪潮的到来,都意味一片无人占领的蓝海,也意味着众多新成长起来的巨头,还意味着什么?大量的技术人....

  想要了解嵌入式软件开发工程师待遇怎么样,那就先来看一下嵌入式软件工程师发展趋势怎么样,据市场分析,现....

  当你在编程的时候必须能够对以上提到的这些基础知识进行应用、执行、修改或者处理。课后练习、编码竞赛还有....

  云计算是一种通过互联网提供与计算相关资源的可扩展的方法。工程学科应用于这个概念则被称为云计算工程,它....

  随着深度学习(人工智能)的火热,异构并行计算越来越受到业界的重视。从开始谈深度学习必谈GPU,到谈深....

  我现在是自己做,但我此前有多年在从事软件开发工作,当回过头来想一想自己,觉得特别想对那些初学JAVA/DOT。NET技术的...

  在一些论坛上面经常能够看到一些人,对这个行业的一些不太积极的评价。意思大概都是对日软件开发没有技术含....

  Java是门高端计算机编程语言,Java是门称霸世界的编程语言,Java还是门企业级编程语言,当下谷....

  那将文件写入五英寸软盘的奇怪的声音,听起来却像音乐般美妙。那段时间,这块软盘简直成为了我的至宝。我把....

  在有些人看来,PCB layout工程师的工作会有些枯燥无聊,每天对着板子成千上万条走线,各种各样的....

  大数据时代已到,数据越来越具有价值了,没有数据寸步难行,有了数据好好利用,可以在诸多领域干很多事,比....

  今天我们来讨论 AI 工程师和算法工程师在应聘方面的问题。一起来看看,作为 AI 工程师,在面试一家....

  随着电子产业的迅猛发展,Java技术也得到越来越广泛的应用,Java工程师随之也成为受欢迎的IT岗位....

  JAVA已成为当今市面上最受欢迎的编程软件,对于处于信息高速发达的今天,JAVA技术已经无处不在,手....

  数据分析的坑很大,一开始走上这条路,就要明确基本的方向,依托于核心的思想,不然只会越走越偏,最后觉得....

  对于程序员来说,技术进步大大超过世人的想象,如果你不跟随时代进步,就会落后于时代。

  以硬件工程师的身份已经工作两年多,回看自己的经历,大学以前,可以用四个字来总结:按部就班。大学以后,也可以用四个字来总结...

  在去努力做好任何一件事情之前都需要有一个明确的自我认知,了解自己的性格、了解自己的技术水平,当然也要....

  做为一个刚刚入职的实施工程师实习生,学习的方向十分迷茫,不知道该怎么学,也不明白要如何学,学一些什么....

  一位工程师,如何才能称得上优秀?除了写得一手好 Code,什么样的工作态度和方法才是一个优秀工程师的....

  推荐课程: 张飞软硬开源,基于STM32 BLDC直流无刷电机驱动器视频套件 ...

  3月7日上午,华为轮值董事长郭平在外媒记者会上宣布,华为已向美国联邦法院提起诉讼,指控美国2019年国防授权法第889条款违反美国...

  电子发烧友又来送福利啦!不花一分钱就能获得100元京东卡等好礼的机会就在这里啦! 活动参与方式:进入活动链接填写表单之后...

本文链接:http://pikeducation.com/erfentu/19.html